现在我正在设计我的MySQL数据库。让我们从用户表和注释表开始。我们看到的主要是评论的作者存储为整数。但是它需要使用左连接,当应用程序变大时,在一个查询中需要很少的左连接。最后这会产生复杂的查询。我可以使用没有整数的用户表吗?评论的作者将与他的用户名一起存储。
此外,MySQL中有foreign keys
。如果我使用它们,我可以获得哪些实际优势?
注意:我使用的是UTF-8,应用程序(如字典(第一手银河百科全书))将会出现在西里尔语中。
答案 0 :(得分:4)
查询中的几个连接完全正常...比非正规化或为“方便”进行其他数据级别更改要好得多
答案 1 :(得分:2)
我强烈建议在用户表中使用整数作为键,设置自动增量字段以保证唯一性,因此您不必自己设置。然后在注释或其他表中设置外键。主键字段将被索引,您最好将其作为整数。这个概念很可能适用于数据库设计中的许多其他地方。
答案 2 :(得分:1)
如果您没有充分理由不使用代理键,请使用它们。
它们使您的生活变得如此简单,因为根据定义,它们是您实体的唯一标识符,不会因整个实体的生命而改变。
对于像用户名这样的自然主键,情况并非如此。因为它们很自然,所以它们依赖于应用程序数据。由于功能需求的变化,今天有效的应用程序数据的约束可能是无效的。功能要求通常不在您的控制之下,因为您的客户要求它们。因此,通常在您无法控制的约束上构建模式是不合适的。
因此,除非您有充分理由不使用代理键,否则请使用代理键。
答案 3 :(得分:0)
实际上很难确定哪个选项更好,因为它取决于很多因素(用户是否可以更改用户名?是否允许未注册用户发表评论?等等)
请考虑一个解决方案,在comments
表中存储BOTH用户名和数字用户ID。这样你可以对数据进行非规范化处理,但是可以有一些性能上的好处(你实际上存储的用户名就像放置注释时那样,实际上它不是非规范化 - 严格。:])。