前言:
一说到键,总感觉迷迷糊糊,于是总结一下它们之间的区别。
一、超键:
超键:在关系模式中,能唯一标识元组的属性集称为超键。
二、候选键:
候选键:如果一个属性集能唯一标识元组,且有不包含多余属性,那么这个属性集称为候选键(候选键是没有多余属性的超键)。
三、主键:
主键:关系模式中用户正在使用的候选键称为主键。一般,如不加说明,键是指主键。
四、外键:
外键:在关系模式R中,如果某属性集是其他模式的候选键,那么该属性集对模式R来说是外键。
举例:
光讲了定义,相当于没有说,我们通过一个例子来理解什么是超键、候选键、主键及外键。
学号 | 姓名 | 性别 | 年龄 | 学院 | 专业 |
20170101 | 任雅琪 | 女 | 22 | 心理 | 心理 |
20170102 | 李润霞 | 女 | 21 | 生科 | 生科 |
20170104 | 景晓芳 | 女 | 20 | 教育 | 数学 |
20170106 | 佟彤 | 男 | 20 | 化材 | 化学 |
20170107 | 柴一帆 | 男 | 19 | 艺术 | 画画 |
20170108 | 张佳佳 | 男 | 18 | 音乐 | 唱歌 |
A:{学号}
B:{学号、姓名}
C:{年龄、学院}
D:{姓名、性别}
E:{姓名、专业}
说一下自己的理解吧。
A:{学号}可以唯一的标识一个元组,比如我们用学号为20170101就可以知道性别为女,名字为任雅琪的人。由于没有多余的属性,所以{学号}既可以称为一个超键,也可以称为一个候选键。
B:{学号、姓名}也可以唯一的标识一个元组,但是这个集合里的姓名属性是不必要的,也就是多余的,即如果没有{姓名}这个属性,那么这个集合{学号、姓名}也可以唯一确定一个元组。由于有多余的属性,所以{学号、姓名}可以称为超键,但是不能称为候选键。
C:{年龄、学院}、D:{姓名、性别}、E:{姓名、专业}均可以唯一的标识一个元组,并且其中每一个属性均是必须的,去掉任意一个属性,那么其所在的集合便不能唯一的标识一个元组,所以C、D、E均可以称为超键,也可以称为候选键。
总结:
候选键可以称为超键,但超键不一定可以称为候选键。候选键的属性一定不多余,但超键的属性不一定均有用。用集合的关系来说就是候选键隶属于超键,而主键为候选键中的一个元素。