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,但这就是您离开学术概念的地方。
我正在与同事争论 child table 是否可以使用其 parent table 的主键。这考虑了一对一的关系。
例如:
从学术角度来看,主键必须满足所有这些要点:
- 独一无二
- 最小
- 所有 PK 字段都是非空的
外键是对其他 table 主键的引用。因此它们必须准确地包括引用的 PK 所具有的字段。这并不违反归一化,因为 PK 必须是最小的(从学术的角度来看)。
如果您有一个包含 2 列或更多列的主键,并且您认为只用一列来引用它的行就足够了,那么您的主键无效,因为它不是最小的。当它有效并且您需要所有这些列来填充唯一性时,您还需要外键中的所有这些列。
DBMS 允许您定义非最小 PK,但这就是您离开学术概念的地方。