数据库 之 超键、候选键、主键、主属性、外键
封面图
•
2025-09-22
•
其他数据库
366
0
0
0
在数据库系统中,**超键(Super Key)**、**候选键(Candidate Key)**、**主键(Primary Key)**、**主属性(Prime Attribute)** 和 **外键(Foreign Key)** 是关系型数据库设计中的重要概念。下面我将逐一解释这些术语的含义及其相互关系。 --- ## 1. 超键(Super Key) ### 定义: 一个**超键**是能够唯一标识关系中每一个元组(即每一行记录)的**一个或多个属性**的集合。 ### 举例: 假设有一个学生表 `Student`,包含以下属性: - 学号(Sno) - 姓名(Sname) - 年龄(Age) - 班级(Class) 在这个表中,以下都是**超键**: - {Sno}(学号) - {Sno, Sname} - {Sno, Age} - {Sno, Sname, Age} 因为它们都能唯一标识一条记录。 > ⚠️ 注意:**超键不一定是最小的**,也就是说它可能包含不必要的属性。 --- ## 2. 候选键(Candidate Key) ### 定义: 一个**候选键**是**最小的超键**,即**不包含多余属性的超键**。 换句话说,候选键是一个**能唯一标识元组**,且**不能从中删除任何属性而不失去唯一性**的属性集合。 ### 举例: 在上面的 `Student` 表中: - {Sno} 是候选键(因为它是超键,并且无法再减少属性) - {Sname} 不是候选键(因为可能有重名的学生) - {Sno, Sname} 不是候选键(因为已经存在更小的超键 {Sno}) 所以,候选键只能是那些**最简的**、能唯一标识元组的属性集合。 --- ## 3. 主键(Primary Key) ### 定义: 从候选键中选择一个作为**主键**,用于唯一标识关系中的每个元组。 ### 特点: - 每个关系只能有一个主键 - 主键不能为 NULL - 主键必须唯一 ### 举例: 在 `Student` 表中,我们选择 `{Sno}` 作为主键。 --- ## 4. 主属性(Prime Attribute) ### 定义: **主属性**是指属于任何一个**候选键**的属性。 换句话说,只要某个属性出现在至少一个候选键中,它就是主属性。 ### 举例: 在 `Student` 表中,如果候选键是 `{Sno}`,那么: - `Sno` 是主属性 - `Sname`、`Age`、`Class` 不是主属性(除非它们也出现在某个候选键中) --- ## 5. 外键(Foreign Key) ### 定义: **外键**是另一个关系(表)中的**主键**或**候选键**,用来建立两个表之间的关联。 ### 作用: - 维护数据的一致性和完整性(参照完整性) - 实现表与表之间的连接(如一对一、一对多等关系) ### 举例: 假设有两个表: - `Student` 表(主键:Sno) - `Enroll` 表(包含字段:Sno, CourseNo) 其中 `Enroll.Sno` 就是外键,引用了 `Student.Sno`。 > ⚠️ 注意:外键的值必须存在于被引用表的主键或候选键中,否则违反参照完整性。 --- ## 总结对比表格 | 名称 | 定义 | 是否唯一 | 是否允许 NULL | 是否可以有多个 | |--------------|----------------------------------------------------------------------|----------|---------------|----------------| | 超键 | 能唯一标识元组的属性集合 | 是 | 否 | 可以有多个 | | 候选键 | 最小的超键(没有多余属性) | 是 | 否 | 可以有多个 | | 主键 | 从候选键中选定的一个,用于唯一标识元组 | 是 | 否 | 只能一个 | | 主属性 | 属于任意一个候选键的属性 | - | - | - | | 外键 | 引用另一个表的主键或候选键,用于建立表间联系 | - | 是(可选) | - | --- 如果你有具体的例子或应用场景,我可以进一步帮你分析。
上一篇:
数据库课程设计“电信收费系统”的一些资料
下一篇:
怎样识别并避免社交媒体上的网络骗局?
标题录入,一次不能超过6条
返回顶部
留言
留言
评论