举例说明数据库中的主超码,候选码,主码,外码
候选码最小超码(无冗余属性)一个表可能有多个{学号}, {身份证号}超码唯一标识元组的属性集可含冗余属性{学号}, {学号, 姓名}主码被选定的唯一候选码不可为空、不可重复学号(被选定)• {学号, 姓名}(组合可唯一标识,但姓名冗余)***• {身份证号}(单独可唯一标识,无冗余)***3.*** 主码(Primary Key)***• {学号, 姓名}(姓名冗余,不满足最小性)• {学号}(单
以下通过学生信息表(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.学生学号 |
💡记忆口诀:
• 超码不一定最小,候选码是精简版超码。
• 主码是候选码中的“正式代表”,外码是“关系桥梁”。
更多推荐
所有评论(0)