什么时候应该使用指向候选键而不是主键的外键的例子?

Example of when you should use a foreign key that points to a candidate key, not a primary key?

通过阅读,我了解什么是好的主键、什么是外键以及什么是候选键。

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

来源的作者总是按照 "while foreign keys can point at a candidate key (not primary) they seem to".

的方式说一些话

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

谢谢

主键 (PK) 在关系理论中没有作用。 (例如完整性或规范化。)PK 只是您决定调用 "primary" 的一些候选密钥 (CK)。外键 (FK) 引用 CK。当一个 table 有多个 CK 而另一个 table 引用一个恰好不是 PK 的时候,你仍然应该声明一个 FK。 DBMS 可以将 PK 声明用于其他目的。

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

FK 或外键表示源 table 的子行必须显示为引用 table 的子行。如果是这样且不是先前 FK 声明的结果,则声明 FK。

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