表可以使用父表的FK作为PK

时间:2017-05-22 08:55:17

标签: mysql erd

我和同事争论子表是否可以使用其父表的主键。这考虑了1比1的关系。

例如:

enter image description here

1 个答案:

答案 0 :(得分:2)

从学术角度来看,主键必须符合所有这些要点:

  • 独特
  • 最小
  • 所有PK字段均为非空

外键是对其他表的主键的引用。因此,它们必须包含引用的PK具有的字段。这并不违反正常化,因为PK必须是最小的(从学术角度来看)。

如果您拥有一个包含2个或更多列的主键,并且您认为仅使用一列引用其行就足够了,那么您的PK无效,因为它不是最小的。当它有效并且您需要所有这些列以满足唯一性时,您还需要外键中的所有这些列。

DBMS允许您定义非最小PK,但那就是您离开学术概念的那一点。