题目要补充完整,必须给出集合U
已知R(U,F),其中 U={A,B,C,D,E}, F={A→D,E→D,D→B,BC→D,DC→A},求候选关键字。
①取L类属性(仅出现在F的函数依赖左侧的)——E,C
②求EC关于F的闭包(即由EC可以推出哪些属性)——(EC)+ = ABCDE,包含了U的全部属性,故EC为候选关键字
注: 若U={A,B,C,D,E,P},P不在F中左侧或右侧,则P为N类属性,(ECP)+ =ABCDEP,同样包含了U的全部属性,那么候选关键字就为ECP
附:
定理一:对于给定的关系模式R(U,F),若X(X属于U)是L类属性,则X必为R的任一候选码的成员(组成部分)。
推论一:已知R(U,F),若X(X属于U)是L属性,且X+F包含了R的全部属性U,则X必为R的唯一候选码。
定理二:给定R(U,F),若X(X属于U)是R类属性,则X不在任何候选码中。
定理三:给定R(U,F),若X是R的N类属性,则X必包含在R的任一候选码中。
推论二:已知R(U,F),若X是R的N类和L类属性组成的属性集,且X+包含了R的全部属性U,则X是R的唯一候选码。
1 R(U,F),其中U={W,X,Y,Z},F={WX→Y,W→X, X→Z,Y→W}L:
R:Z
LR:W,X,Y
N:
候选键:(W)或(Y)
2 R(U,F),U={a,b,c,d,e}, F={={d→b,b→d, ad→b,ac→d}
L:a,c
R:
LR:b,d
N:e
候选键:(a,c,e)
超键就是指一组字段可以唯一确定一条数据,而候选键是最简洁的超键,也就是只有必要字段,举例来说明,假如有一个班级,班级中没有同名的学生,有如下一张表。
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来作为主键。
自己的理解,希望可以帮到题主。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)