数据库核心概念:候选码、主码与外码详解

一句话先记住:
候选码是“能唯一标识一行”的最小属性集;从中挑一个当主码;外码是“引用别人主码”的属性;主属性是任何候选码里的成员。

下面分开说清楚:

  1. 候选码(Candidate Key)
    定义:关系里能唯一标识一条元组、且去掉其中任一属性就不再唯一的最小属性集合。
    特点:

    • 唯一性:不同元组在该属性集上取值绝不重复。
    • 最小性:再少一个属性就失去唯一性。
    • 可以有多个:例如学生表里(学号)和(身份证)都可做候选码。
  2. 主码(Primary Key)
    定义:人为选定、用来在表里唯一区分行的那个候选码。
    特点:

    • 只能选一个;DBMS 会自动为它建唯一索引并强制 NOT NULL。
    • 其余候选码如果也声明,就叫“唯一键/候补键(Alternate Key)”。
  3. 外码(Foreign Key)
    定义:一个表(子表)里的属性或属性集,其取值必须要么全空,要么等于被参照表(父表)主码的某个现有值
    作用:建立两个表之间的参照完整性约束。
    例子:
    选课表(学号, 课号, 成绩) 里的“学号”引用学生表的主码“学号”;选课表的“学号”列就是外码。

  4. 主属性(Prime Attribute)
    定义:任何一个候选码里包含的属性都称为主属性。
    非主属性(Non-prime Attribute):不属于任何候选码的属性。
    例子:
    若候选码有(学号)和(身份证),那么学号、身份证都是主属性;姓名、年龄等是非主属性。

记忆口诀
“候选”是最小唯一键,
“主码”是选定的真命键;
“外码”拿来连别人,
“主属性”一切候选都包含。