何时应该使用指向候选键而不是主键的外键的示例?

时间:2016-05-08 07:51:39

标签: sql database foreign-keys primary-key candidate-key

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

我读过几本不同的书和来源:

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

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

是否有任何可以选择候选键而非主键的示例?

谢谢

1 个答案:

答案 0 :(得分: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声明都是多余的。)