给定关系模式R(U,F),U=A,B,C,D,E,F,F=B→F,D→A,A→E, AE→B,那么属性A的闭包为 (62) ,R的候选关键字为 (63) 。
(63)处填()。
A.ABD
B.ADE
C.ACD
D.CD
参考答案:D
解析:
求属性集的闭包可由下述算法推出:
①设X(0)=A。
②计算X(1)。逐一扫描F集合中的各个函数依赖,找左部是A的函数依赖,得到:A→E。令X(1)=X(0)∪A=AE,即把刚推导出的属性加入到X(1)中。
③由于X(1)≠X(0),因此再逐一扫描F集合中的各个函数依赖,找左部是AE的子集的那些函数依赖,得到A→E,AE→B。注意,AE是AE的子集。令X(2)=X(1)∪BE= ABE,即把刚推导出的属性加入到X(2)中。
④由于X(2)≠X(1),因此再逐一扫描F集合中的各个函数依赖,找左部是ABE的子集的那些函数依赖,得到B→F,A→E,AE→B。令X(3)=X(2)∪FEB=ABEF,即把刚推导出的属性加入到X(3)中。
⑤由于X(3)≠X(2),因此再逐一扫描F集合中的各个函数依赖,找左部是ABEF的子集的那些函数依赖,得到B→F,A→E,AE→B。令X(4)=X(3)∪FEB=ABEF。
⑥由于X(4)=X(3),因此算法到此为止,属性A的闭包为X(4),即ABEF。
如果一个属性集能唯一标识元组,且不含有多余属性,那么这个属性集称为候选关键字。该题中,由于函数依赖集中的所有函数依赖式的两边都没有出现属性C,那么候选码中肯定有属性C,否则,不可能推导出整个属性组∪。又因为D→A,而A的闭包为ABEF即A→ABEF,所以,D→ABEF,进而D→ABDEF,于是,CD→ABCDEF,鉴于C、D都不能缺少(不管缺少哪一个都不能导出∪),所以CD是候选码。属性组ACD也能推导出整个属性组U,但是A是多余的,所以它不是候选码。