Questions tagged «database-design»

数据库设计是指定数据库的结构以及逻辑方面的过程。数据库设计的目的是代表某种“话语世界”-事实的类型,业务规则和数据库要建模的其他要求。

11
用户代理字符串可以达到多大?
如果您打算将用户代理存储在数据库中,那么您需要容纳多少? 我找到了这篇Technet文章,建议将UA保持在200以下。它看起来并不是HTTP规范中定义的,至少不是我发现的。我的UA已经是149个字符,而且似乎每个.NET版本都将添加到其中。 我知道我可以解析字符串并将其分解,但我宁愿不这样做。 编辑 在此基础上博客 IE9将改变以发送短UA字符串。这是一个很好的变化。

5
多语言数据库设计的最佳实践是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 创建多语言数据库的最佳方法是什么?为每个表创建本地化表会使设计和查询变得复杂,在其他情况下,为每种语言添加列很简单但不是动态的,请帮助我了解什么是企业应用程序的最佳选择

15
字符串作为SQL数据库中的主键
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 上个月关闭。 改善这个问题 我对数据库及其工作原理并不十分熟悉。从性能的角度(插入/更新/查询)角度来看,将字符串用作主键是否比整数慢?

12
在MySQL中删除主键
我有以下表模式,它将user_customers映射到实时MySQL数据库的权限: mysql> describe user_customer_permission; +------------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+---------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_customer_id | int(11) | NO | PRI | NULL | | | permission_id | int(11) | NO …

19
代理与自然/业务密钥的比较[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 改善这个问题 再来一次,旧的争论仍然浮现... 我们是否最好将业务密钥作为主键,还是宁愿使用在业务密钥字段上具有唯一约束的代理ID(即SQL Server身份)? 请提供示例或证明来支持您的理论。


10
在十进制列中存钱-精度和小数位数是多少?
我正在使用一个十进制列将货币值存储在数据库中,今天我想知道使用什么精度和小数位数。 由于据说固定宽度的char列效率更高,所以我想对于十进制列也是如此。是吗? 我应该使用什么精度和规模?我正在考虑精度24/8。那是矫kill过正,还不够还是可以? 这是我决定要做的: 将转换率(如果适用)存储为交易表本身(以浮动形式) 将货币存储在帐户表中 交易金额为 DECIMAL(19,4) 所有使用转换率的计算都将由我的应用处理,因此我可以控制舍入问题 我认为转换率的浮动不成问题,因为它主要用于参考,而且无论如何我都会将其转换为小数。 谢谢大家的宝贵意见。

12
标记的数据库设计
您如何设计数据库以支持以下标记功能: 项目可以具有大量标签 搜索带有给定标签集的所有项目必须快速(这些项目必须具有ALL标记,因此这是AND搜索,而不是OR搜索) 创建/写入项目可能较慢,无法快速查找/阅读 理想情况下,应使用单个SQL语句对(至少)带有一组n个给定标签的所有标签进行查找。由于要搜索的标签数量以及任何项目上的标签数量都是未知的并且可能很高,因此使用JOIN是不切实际的。 有任何想法吗? 到目前为止,感谢您提供所有答案。 但是,如果我没记错的话,给出的答案将显示如何对标签进行“或”搜索。(选择所有具有n个标签中的一个或多个标签的项目)。我正在寻找有效的AND搜索。(选择所有带有n个标签的项目-可能还有更多。)

13
如何存储历史数据
我和一些同事就存储历史数据的最佳方法进行了辩论。当前,对于某些系统,我使用一个单独的表来存储历史数据,并且为当前的活动记录保留一个原始表。因此,假设我有表FOO。在我的系统下,所有活动记录都将进入FOO,所有历史记录都将进入FOO_Hist。用户可以更新FOO中的许多不同字段,因此我想对所有更新内容保持准确的了解。FOO_Hist保留与FOO完全相同的字段,但自动递增的HIST_ID除外。每次FOO更新,我执行插入语句插入FOO_Hist类似于:insert into FOO_HIST select * from FOO where id = @id。 我的同事说这是错误的设计,因为出于历史原因,我不应该拥有表的确切副本,而应该在活动表中插入另一个记录,并带有一个标志,表明该记录是出于历史目的。 是否有处理历史数据存储的标准?在我看来,考虑到可能超过一百万条记录,我不想将我的活动记录与所有历史记录都放在同一张表中(我在考虑长期)。 您或您的公司如何处理? 我正在使用MS SQL Server 2008,但我想保留所有DBMS的通用和任意答案。



10
是否有充分的理由使我看到VARCHAR(255)经常使用(相对于另一种长度)?
在多门课程,书籍和工作中,我已经看到定义为VARCHAR(255)的文本字段是“短”文本的默认字段。有什么好的理由经常选择255的长度,而不是一个不错的整数有?是有一定理由(过去是否适用)从过去某个时间开始的坚持吗? 我当然知道,如果您以某种方式知道字符串的最大长度,则更严格的限制将更为理想。但是,如果您使用的是VARCHAR(255),则可能表明您不知道最大长度,只是它是一个“短”字符串。 注意:我发现这个问题(VARCHAR(255)V TINYBLOB v TINYTEXT),它表示,VARCHAR(Ñ)需要Ñ为1个字节的存储Ñ <= 255,Ñ为2个字节的存储Ñ > 255。这是唯一原因吗?这似乎是任意的,因为与VARCHAR(256)相比,您只节省了两个字节,并且可以通过声明VARCHAR(253)来轻松保存另外两个字节。


14
子查询与联接
我重构了我们从另一家公司继承来的应用程序的缓慢部分,以使用内部联接而不是子查询,例如: WHERE id IN (SELECT id FROM ...) 重构查询的运行速度提高了约100倍。(约50秒,约0.3秒),我期望有所改善,但是谁能解释为什么如此剧烈?where子句中使用的列均已建立索引。SQL是否在where子句中每行执行一次查询? 更新 -说明结果: 区别在于“(())中的id”查询的第二部分- 2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where vs 1带有连接的索引行: SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index

2
SQL ON DELETE CASCADE,删除以哪种方式发生?
如果我在数据库中有两个关系,如下所示: CREATE TABLE Courses ( CourseID int NOT NULL PRIMARY KEY, Course VARCHAR(63) NOT NULL UNIQUE, Code CHAR(4) NOT NULL UNIQUE ); CREATE TABLE BookCourses ( EntryID int NOT NULL PRIMARY KEY, BookID int NOT NULL, Course CHAR(4) NOT NULL, CourseNum CHAR(3) NOT NULL, CourseSec CHAR(1) NOT NULL ); 我在两者之间建立了外键关系,如下所示: …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.