什么叫数据库的候选键?

什么叫数据库的候选键?,第1张

在关系模型中,候选键又称候选码(英语:candidate key),是某个关系变量的一组属性所组成的集合,它需要同时满足下列两个条件:

1.这个属性集合始终能够确保在关系中能唯一标识元组。

2.在这个属性集合中找不出合适的子集能够满足条件。

如果关系模式R(u)的属性集合K ∈u 的候选键。R(u)的任何一个关系实例的任意两个元素在属性集合K上的值部不相同————唯一性,K的任何真子集都不满足条件 ————最小性通俗点,候选键在每一行数据里的值都不相同,可以说成是候选的主键

候选键是唯一标识表中每一行的键。候选键可以是单列键,也可以是复合键。例如下列学生表中“学号”或“图书证号”都能唯一标识一个元组,则“学号”和“图书证号”都能唯一地标识一个元组,则“学号”和“图书证号”都可作为学生关系的候选键。

超键就是指一组字段可以唯一确定一条数据,而候选键是最简洁的超键,也就是只有必要字段,

举例来说明,假如有一个班级,班级中没有同名的学生,有如下一张表。

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来作为主键。

自己的理解,希望可以帮到题主。

1、主键(primary

key)吧:一张表(关系)的一个列(属性)或多个列可以作为主键,但是前提是让这个列作主键,这个列就能保证该列下的各个行(元组)的值不能相同,比如说用姓名属性作主键的话,那么这个主键就不一定可以,如果有两个人是同样的名字的话,就不能做到该属性下的各个元组数据的值不同,如果用阿拉伯数字作主键就是一个很好的选择。

2、外键(foreign

key):一张表(关系)的列(属性)它同时存在表1和表2中,它不是表1的主键,而是表2的主键,就可以说他是表1的外键。

3、候选键(Candidate

Key):能唯一标识表(关系)中行(元组)的列(属性),则称该属性为候选键,也称

候选关键字

候选码;由此来看候选键可以不只一个,还看一看得出的就是主键同时它也是候选键。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6696962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存