【发布时间】:2014-07-29 16:11:00
【问题描述】:
我的数据库中有一些非常丑陋的表,所以我回去尝试对其进行规范化。我不确定这是否足够或做得正确,如果有任何关于如何改进我的数据库设置的建议,我将不胜感激。
我已经在 SQLFiddle 设置了它:http://sqlfiddle.com/#!2/7ac6a1
【问题讨论】:
-
是的,它似乎“足够规范化”,但是您在某些表上缺少 PK,并且您在其他表(存在自然键)上提供了代理 PK。这些在任何其他表格中都没有引用,因此(在我看来)它们是多余的。
-
你指的是哪个?我知道像 dragon_to_habitat、boosts 和 dragon_elements 这样的表没有 PK,因为它们从其他表中获取 PK。你觉得哪个是多余的?
-
RDBMS 中的所有表都需要主键。这是基本的(1NF)。在链接表上,PRIMARY KEY 可以由与其他表的 FOREIGN KEY 组合而成。
-
@Strawberry 关系理论中没有主键。 PK 是选择的一些候选键(又名键)......称为“主键”。候选键很重要。它们是最小的超级键。超级键是具有唯一值的列。 SQL 中的哪个是通过 UNIQUE 或 PK 声明定义的唯一性。所以实际上一个 SQL“PK”列集甚至不一定是一个键。但是每个表都至少有一个键,并且应该声明它的键。
-
@philipxy 太好了。我的观点很简单,RDBMS 中的所有表都应该包含一种机制,用于唯一标识每一行。无论它在技术上是否精确,我认为我们都可以同意,在通常的说法中,这被称为 PRIMARY KEY。
标签: mysql database normalization