知识卡片

候选键、主键与外键的精确定义

普通读书笔记卡

内容

每个关系都至少要有一个候选键——一组属性的组合(哪怕只包含单一属性,本质上也是 一个属性集合),要求关系中每个元组在这组属性上的取值都是唯一的,用来充当元组的 唯一标识符。当一个关系有不止一个候选键时,通常会挑一个作为”主键”,这个挑选动作 本身带有主观性,如果多个候选键都合理,往往找不到什么令人信服的理由证明为什么偏偏 选这一个而不是另一个。这条精确定义纠正了一个常见的认知偏差:主键凌驾于其他候选键 之上享受的”特殊对待”,本质上只是语法层面的,既不是根本性的、也不是很重要的区分—— 从关系化视角出发,真正重要的是候选键这个概念本身,而不是”哪个候选键被选为主键”这 个相对随意的决定。外键则是另一个关系(或同一关系)中的一组属性,要求它的每个取值 都必须能在目标关系的某个键中找到匹配值,这个”要求匹配”背后的语义是保证数据库不会 出现”引用了不存在的实体”这种脱离现实的状态(例如某条员工记录的部门编号,必须真的 能在部门表里找到对应部门,否则数据库就不再是”现实的真实模型”)。

参考来源

- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第1章"做好准备"1.4.1节 "结构特征"(源文件:OEBPS/text00010.html) - 结论依据:原文明确"每个关系都至少有一个候选键。候选键就是唯一标识符……如果关系 有两个以上的候选键,那么通常选择其中一个作为'主要的'……肯定会存在我们找不到什么 好理由作为选择依据的情况……主键凌驾于其他候选键之上享受的'特殊对待'本质上来说 主要是在语法上的,它既不是根本性的也不是很重要的'特殊对待'""'外键'是某关系r2中的 一个属性组合……FK的每个取值都与另一关系r1中某个键K的某个取值相等……如果EMP包含 了一个DNO属性取值为D2的元组,则DEPT中必须也包含DNO值为D2的元组;否则……数据库 也就不再是'现实的真实模型'了"。 - 原始内容:候选键就是唯一标识符;换句话说,它是属性的组合……使得关系中的每个元组 对于这样的属性组合都有唯一的值……主键凌驾于其他候选键之上享受的"特殊对待"本质上 来说主要是在语法上的……"外键"是某关系r2中的一个属性组合(或集合)FK,且要求FK的 每个取值都与另一关系r1中某个键K的某个取值相等。