
举例来说明,假如有一个班级,班级中没有同名的学生,有如下一张表。
std_id last_name first_name gender score
10001 张 三 男 85
10002 李 四 男 86
10005 妹 子 女 95
10006 李 三 男 88
这张表里,因为我们前面说到这个班级里没有同名的学生。
因此last_name+first_name就是一个超键,因为可以唯一确定一行数据,同时也是一个候选键,因为这两个字段去掉任何一个都不再能唯一确定一行数据。
更明显的区别在于,last_name+first_name+gender还是一个超键,但是已经不再是候选键了,因为在确定唯一一条数据的时候,gender不是必要的字段。
也就是说候选键是可以唯一确定一条数据的必要字段的最小集合,而候选键加上任何的额外字段都是超键。
在上面的例子中,std_id自己就是一个候选键,std_id+任何额外的字段都是候选键。
同时从习惯而言,一般会把这种std_id字段定义为主键,主键并不一定只是一个字段,如果我们上面的表增加一列班级id(class_id),同时加入每个班级中的std_id都是从10001开始的话,我们就可以用class_id+std_id来作为主键。
自己的理解,希望可以帮到题主。
在关系模型中,候选键又称候选码(英语:candidate key),是某个关系变量的一组属性所组成的集合,它需要同时满足下列两个条件:
1.这个属性集合始终能够确保在关系中能唯一标识元组。
2.在这个属性集合中找不出合适的子集能够满足条件。
如果关系模式R(u)的属性集合K ∈u 的候选键。R(u)的任何一个关系实例的任意两个元素在属性集合K上的值部不相同————唯一性,K的任何真子集都不满足条件 ————最小性通俗点,候选键在每一行数据里的值都不相同,可以说成是候选的主键。
候选键是唯一标识表中每一行的键。候选键可以是单列键,也可以是复合键。例如下列学生表中“学号”或“图书证号”都能唯一标识一个元组,则“学号”和“图书证号”都能唯一地标识一个元组,则“学号”和“图书证号”都可作为学生关系的候选键。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)