table 可以使用 parent table 的 FK 作为 PK

Can a table use the FK of the parent table as a PK

我正在与同事争论 child table 是否可以使用其 parent table 的主键。这考虑了一对一的关系。

例如:

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

  • 独一无二
  • 最小
  • 所有 PK 字段都是非空的

外键是对其他 table 主键的引用。因此它们必须准确地包括引用的 PK 所具有的字段。这并不违反归一化,因为 PK 必须是最小的(从学术的角度来看)。

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

DBMS 允许您定义非最小 PK,但这就是您离开学术概念的地方。