(2)如果有属性不在函数依赖集中任何函数依赖的右边出现,那么它必须包含在候选码中;
(3)如果有属性只在函数依赖集的左边出现,则该属性一定包含在候选码中。
(4)如果有属性或属性组能唯一标识元组,则它就是候选码;
题目要补充完整,必须给出集合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 >的最小函数依赖集F第2 步, 按照上面的定义, 分别计算出UL ,UR , UB (UL 表示仅在函数依赖集中各依赖关系式左边出现的属性的集合UR 表示仅在函数依赖集中各依赖关系式右边出现的属性的集合另记UB = U - UL - UR )
第3 步,若UL ≠Φ,计算UL的闭包,若UL+ = U ,则UL 为R 的唯一的候选码,算法结束.
若UL+ ≠U ,转第4 步. 若UL = Φ,转第5 步.
第4 步,将UL 依次与UB 中的属性组合,利用上述的定义4 判断该组合属性是否是候选码找出所有的候选码后,算法结束.
第5 步,对UB 中的属性及属性组合利用上述的定义4 依次进行判断找出所有的候选码后,算法结束. 简而言之:取最小依赖集,计算UL闭包,
如果UL闭包包含全属性,则UL为唯一侯选码,如果不包含,
则依次与UB属性组合后再求闭包是否包含全属性。
(UL为空时,直接取UB依次组合求闭包)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)