从我的阅读中,我了解什么是好的主键,什么是外键以及什么是候选键。
我读过几本不同的书籍和资料来源:
消息来源的作者总是说类似的话,“而外键可以指向它们似乎是候选键(而不是主键)”。
是否有任何示例说明为什么您可能选择候选键而不选择主键?
谢谢
主键(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声明都是多余的。)