以下通过学生信息表(Students)和课程选修表(Enrollments)的示例说明数据库中的主码、候选码、超码和外码的定义及区别:


1.超码(Superkey)

定义:能唯一标识关系中元组的属性或属性组合(允许包含冗余属性)。*

示例(学生表Students):

学号 身份证号 姓名 班级
S001 ID123 张三 CS1
S002 ID456 李四 CS2

** 超码示例:
• {学号}(唯一标识一个学生)
• {身份证号}(唯一且不重复)
• {学号, 姓名}(组合可唯一标识,但姓名冗余)**

✅ 超码的唯一性是核心,冗余属性不影响其成立。


2.候选码(Candidate Key)

定义:超码的最小属性集(无冗余属性),关系中可能有多个候选码。

示例(同上表):

候选码:**
• {学号}(单独可唯一标识,且无冗余属性)
• {身份证号}(单独可唯一标识,无冗余)**

非候选码:
• {学号, 姓名}(姓名冗余,不满足最小性)

3.** 主码(Primary Key)**

定义:从多个候选码中选定一个作为官方唯一标识符。

示例:
• 选定学号为主码:

学号 (主码) 身份证号 姓名 班级
S001 ID123 张三 CS1

⚠️ 主码需满足实体完整性规则:不可为空且值唯一。

4.外码(Foreign Key)

定义:一个表(R)的属性(集),引用另一个表(S)的主码,用于关联两表。就是完整性约束

示例(课程选修表Enrollments):

选课ID (主码) 学生学号(外码) 课程号 成绩
E1001 S001 C101 90
E1002 S002 C102 85

• 外码:学生学号
• 它引用Students表的主码学号,确保选课记录中的学生必须存在。

• 作用:
• 维护引用完整性(如:禁止插入不存在的学生学号)。
• 支持级联操作(如:删除学生时同步删除其选课记录)。


关键区别总结

概念 本质 特点 示例
超码 唯一标识元组的属性集 可含冗余属性 {学号}, {学号, 姓名}
候选码 最小超码(无冗余属性) 一个表可能有多个 {学号}, {身份证号}
主码 被选定的唯一候选码 不可为空、不可重复 学号(被选定)
外码 引用其他表主码的属性 建立表间关联,维护完整性 Enrollments.学生学号

💡记忆口诀:
• 超码不一定最小,候选码是精简版超码。
• 主码是候选码中的“正式代表”,外码是“关系桥梁”。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐