MySQL 超键 候选键 主键 外键是什么
搬运出处: https://github.com/0voice/interview_internal_reference
超键(super key): 在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidate key): 不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了!
主键(primary key): 用户选作元组标识的一个候选键程序主键
外键(foreign key):如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键。
举例
比如有如下数据:
| 学号 | 姓名 | 性别 | 年龄 | 系别 | 专业
|:---: |:---: |:---: |:---: |:---: |:---:
|20020612 | 李辉 | 男 |20 |计算机 |软件开发
|20060613 | 张明 | 男 |18 |计算机 |软件开发
|20060614 | 王小玉 | 女 |19 |物理 |力学
|20060615 | 李淑华 | 女 |17 |生物 |动物学
|20060616 | 赵静 | 男 |21 |化学 |食品化学
|20060617 | 赵静 | 女 |20 |生物 |植物学
-
超键
在关系中能唯一标识元组的属性集称为关系模式的超键。
于是我们从例子中可以发现 学号是标识学生实体的唯一标识。那么该元组的超键就为学号。
除此之外我们还可以把它跟其他属性组合起来,比如:
(
学号
,性别
)(
学号
,年龄
)这样也是超键.
-
候选键
不含多余属性的超键为候选键。
根据例子可知,学号是一个可以唯一标识元组的唯一标识,因此学号是一个候选键,实际上,候选键是超键的子集,比如 (学号,年龄)是超键,但是它不是候选键。因为它还有了额外的属性。
-
主键
用户选择的候选键作为该元组的唯一标识,那么它就为主键。
简单的说,例子中的元组的候选键为学号,但是我们选定他作为该元组的唯一标识,那么学号就为主键。
-
外键
总结
主键为候选键的子集,候选键为超键的子集,而外键的确定是相对于主键的。