-
注意:班长学号不是码(因为班长可能为 NULL)
-
码(Key)包含:候选码、主码、全码、超码。
-
外码(Foreign Key)独立:属于关系模型的参照完整性机制,不参与码的分类。
1. 基本概念定义
-
码(Key)
-
定义:能唯一标识关系中元组(记录)的属性或属性组。
-
核心要求:唯一性(不同元组的码值不同)。
-
-
超码(Super Key)
-
定义:满足唯一性但不要求最小性的码(可能包含冗余属性)。
-
示例:
学号+姓名
(若学号本身唯一,则“姓名”为冗余属性)。
-
-
候选码(Candidate Key)
-
定义:满足唯一性且最小性的超码(无冗余属性)。
-
特点:一个关系可能有多个候选码。
-
示例:
学号
、身份证号
。
-
-
主码(Primary Key)
-
定义:从候选码中选出的唯一标识符,用于实际数据操作。
-
特点:不可重复且不可为空。
-
示例:选定
学号
为主码。
-
-
全码(All-Key)
-
定义:关系中所有属性组合才能唯一标识元组,且满足最小性(即无冗余属性)。
-
特点:属于候选码的特殊情况。
-
示例:若表中仅有的属性
A+B+C
必须共同作为码。
-
-
外码(Foreign Key)
-
定义:引用其他关系主码的属性或属性组,用于维护参照完整性。
-
特点:本身不属于码的范畴,但依赖主码存在。
-
示例:
班级号
(引用班级表的主码)。
-
2. 包含关系与层次结构
(1) 包含关系
-
超码 ⊇ 候选码:候选码是满足最小性的超码。
-
候选码 ⊇ 主码:主码是从候选码中选择的一个。
-
全码 ∈ 候选码:全码是候选码的特殊情况(所有属性共同作为候选码)。
-
外码 ∉ 码的范畴:外码是关联工具,不属于码的分类。
(2) 层次结构
超码(Super Key)
│
▼
候选码(Candidate Key)
│
▼
主码(Primary Key)
│
特殊形式 ▼
全码(All-Key)
3. 对比表
概念 | 唯一性 | 最小性 | 包含关系 | 示例 |
---|---|---|---|---|
超码 | ✔️ | ❌ | 包含候选码和冗余组合 | 学号+姓名 |
候选码 | ✔️ | ✔️ | 超码的子集 | 学号 、身份证号 |
主码 | ✔️ | ✔️ | 候选码的子集 | 选定学号 为主码 |
全码 | ✔️ | ✔️ | 候选码的特殊情况 | A+B+C (所有属性为码) |
外码 | - | - | 不属于码的范畴 | 班级号 (引用主码) |
4. 关键结论
-
超码范围最大:包含所有可能的唯一标识符,无论是否冗余。
-
候选码是核心:从超码中筛选出满足最小性的属性组,提供主码的候选池。
-
主码是最终选择:从候选码中指定一个作为实际使用的唯一标识。
-
全码是候选码的特例:仅当所有属性必须共同作为码时成立。
-
外码独立于码的分类:其作用是建立表间关联,而非标识数据。
5. 实际应用示例
学生表(Student)
-
属性:
学号
(主码)、身份证号
(候选码)、姓名
、班级号
(外码)。 -
分析:
-
超码:
学号
、身份证号
、学号+姓名
、身份证号+班级号
等。 -
候选码:
学号
、身份证号
。 -
主码:
学号
。 -
外码:
班级号
(引用班级表的主码)。 -
全码:不适用,因存在单属性候选码。
-
全码示例表(OrderDetails)
-
属性:
订单号
、商品号
、供应商号
。 -
分析:
-
候选码:
订单号+商品号+供应商号
(全码)。 -
说明:仅当三者组合才能唯一标识一条记录,无冗余属性。
-
总结
-
超码是广义的唯一标识符,包含冗余组合。
-
候选码是优化的超码,满足最小性。
-
主码是候选码的实践选择。
-
全码是候选码的特殊形式,依赖所有属性。
-
外码是关联工具,独立于码的分类。