因为是根据自己的理解写的,欢迎指出错误
闭包
闭包:就是由一个属性直接或间接推导出的所有属性的集合
解法:一组一组的判断,如果左边的在闭包中,那边将右边的加入闭包
例:设关系R(A,B,C,D,E,G)有函数依赖集
F={AB→C,BC→AD,D→E,CG→B},求AB的闭包。
AB+={A,B}, AB→C: A,B都在AB+中,那么将C加入AB+
AB+={A,B,C}, BC→AD: B,C都在AB+中,那么将D加入AB+
AB+={A,B,C,D}, D→E: D在AB+中,那么将E加入AB+
AB+={A,B,C,D,E}, CG→B: C,G不在AB+中,不做改变
所以,AB的闭包AB+={A,B,C,D,E}
候选键
候选码:
1.只在右边的一定不是候选码
2.只在左边的一定是候选码,两边都没有的一定是候选码
3.将两边都有的和确定的候选码组合
4.求出他们的闭包,如果闭包等于全集u,那么它就是候选码
例:R<U,F>,U=(A,B,C,D,E,G),F={AB->C,CD->E,E->A,A->G},求候选码。
只在右边的R: G
只在左边的L: B,D
两边都没有的N:
两边都有的LR: A,C,E
先求L+N=BD+,BD+={B,D} != U
于是跟LR组合,得到ABD,BCD,BDE
ABD+={A,B,C,D,E,G} == U
BCD+={A,B,C,D,E,G} == U
BDE+={A,B,C,D,E,G} == U
所以,三个都是候选码:(ABD),(BCD),(BDE)
最小函数依赖集
最小函数依赖集:
1.F中的每个FD的右边都是单属性。
2.F中没有冗余的FD。
3.F中每个FD的左边没有冗余的属性。
例如:关系模式R(U,F)中,U={A,B,C,D,E,G},F={B→D,DG→C,BD→E,AG→B,ADG→BC}
求F的最小函数依赖集。
解题步骤:
1.F中的每个FD的右边都是单属性。
F={B→D,DG→C,BD→E,AG→B,ADG→B,ADG→C}
2.F中没有冗余的FD。
依次求去掉本身后,每组的闭包,如果它的闭包里面有右边的,那么就去除
B→D B+=B 没有D,所以保留
DG→C DG+=D,G 没有C,所以保留
BD→E BD+=B,D 没有E,所以保留
AG→B AG+=A,G 没有B,所以保留
ADG→B ADG+=A,D,G,C,B,E 有B,所以去除
ADG→C ADG+=A,D,G,B,E,C 有C,所以去除
F={B→D,DG→C,BD→E,AG→B}
3.F中每个FD的左边没有冗余的属性。
B→D B+=B 没有冗余,保留
DG→C D+=D G+=G 没有冗余,保留
BD→E B+=B,D D+=D D冗余,去除,保留B
AG→B A+=A G+=G 没有冗余,保留
所以F={B→D,DG→C,B→E,AG→B}