1

从我的阅读中,我了解了什么是好的主键,什么是外键以及什么是候选键。

我读过几本不同的书籍和资料:

  • 外键必须指向候选键(或主键)
  • 外键几乎总是指向主键

消息来源的作者总是说“虽然外键可以指向他们似乎指向的候选键(不是主键)”。

是否有任何示例说明您为什么选择候选键而不是主键?

谢谢

4

1 回答 1

2

主键 (PK) 在关系理论中没有任何作用。(例如完整性或规范化。)PK 只是您决定称之为“主要”的一些候选密钥(CK)。外键 (FK) 引用 CK。当一个表有多个 CK 并且另一个表引用了一个恰好不是 PK 的表时,您仍然应该声明一个 FK。DBMS 可以将 PK 声明用于其他目的。

在 SQL 中,一个 UNIQUE NOT NULL 声明声明了一个超键。CK 是一个不包含更小的超级密钥的超级密钥。SQL PK 声明声明了一个 UNIQUE NOT NULL 约束,因此它实际上声明了一个超键。SQL FK 声明实际上声明了一个外部超键:引用列列表引用 PK 或 UNIQUE NOT NULL 声明中的列列表。

FK 或外部超键表示源表的子行必须作为引用表的子行出现。如果是这样且还不是先前 FK 声明的结果,请声明一个 FK。

例如:一个化学元素表将合理地包含三个 CK:名称、符号和原子序数。只有一个可以PK。然而,每当任何列出现在另一个表中时,都应该为它们声明 FK。如果多个同时出现指代同一元素,则它们应形成复合 FK。(并且每个 FK 声明都是多余的。)

于 2016-05-11T22:48:56.913 回答