数据库怎样求最小函数依赖集,候选码,分解bcnf例题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库怎样求最小函数依赖集,候选码,分解bcnf例题相关的知识,希望对你有一定的参考价值。
参考技术A 因为A->C,C->D,所以A->D先把这ACD三个从总表中分出来,得出 ACD和ABE
由于A->D,需要经过C,所以这属于传递依赖,因此ACD又可以分为{AC}和{CD}
所以最后答案是{AC}{CD}{ABE}
求最小函数依赖集
//新编数据库原理习题与解析 李春葆
例:求F={ABD→AC,C→BE,AD→BF,B→E}的最小函数依赖集Fm
注意:当在函数依赖已经改变的地方开始一个新步骤时,重写函数依赖集很重要,这样可以在下一步中方便引用。
第一步 对F中的函数依赖运用分解原则来创建一个等价函数依赖集H,该集合中每一个函数依赖的右部是单个属性:
H={①ABD→A,②ABD→C,③C→B,④C→E,⑤AD→B,⑥AD→F,⑦B→E}
第二步 考察每一个函数依赖是否是必须的,去除非必要的函数依赖
(1) ABD→A是平凡的函数依赖(就是A是ABD的子集,所以他是平凡的依赖),所以显然是非必要的函数依赖,因此去除。保留在H中的函数依赖是H={②ABD→C,③C→B,④C→E,⑤AD→B,⑥AD→F,⑦B→E}
(2) 考察ABD→C,去掉此函数依赖将会得到新的函数依赖集J={③C→B,④C→E,⑤AD→B,⑥AD→F,⑦B→E}。如果ABD→C是非必要的,则(ABD)J+=ABDFE,不包含C,因此ABD→C是必要的函数依赖,不能去掉。
H={②ABD→C,③C→B,④C→E,⑤AD→B,⑥AD→F,⑦B→E}
(3) 考察C→B,J={②ABD→C,④C→E,⑤AD→B,⑥AD→F,⑦B→E}(C)J+=CE,不包含B,因此C→B是必要的函数依赖,保留在H中。
(4) 考察C→E,J={②ABD→C,③C→B,⑤AD→B,⑥AD→F,⑦B→E}(C)J+=CBE,包含E,因此是不必要的,去除后得到的函数依赖集为
H={②ABD→C,③C→B,⑤AD→B,⑥AD→F,⑦B→E}
(5) 同理考察函数依赖⑤、⑥和⑦,最后得到的函数依赖集为H={②ABD→C,③C→B,⑤AD→B,⑥AD→F,⑦B→E}。为了第三步方便引用,我们进行重新编号:
H={①ABD→C,②C→B,③AD→B,④ AD→F,⑤ B→E}。
第三步 考察每一个左部为多个属性的函数依赖,看左部的每个属性是否是必须的,能否用更小的属性集替代原有的属性集。
首先从函数依赖①ABD→C开始。
(1) 去除A?如果A可以去除,那么可得到新的函数依赖集J={①BD→C,②C→B,③AD→B,④ AD→F,⑤ B→E}。去掉A后BD在J上的闭包将比在H下函数决定更多的属性,如果(BD)J+=(BD)H+或者C∈(BD)H+,则说明去掉A得到的函数依赖集和原有的函数依赖集是等价的,可以用BD→C替换ABD→C。
(BD)H+=BDE,不包含C,所以A不能去掉。
(2) 去掉B?J={①AD→C,②C→B,③AD→B,④ AD→F,⑤ B→E} 。
(AD)J+=ADBC,包含了B,因此B→C是冗余的函数依赖,所以去除
(3) 去掉D?J={①A→C,②C→B,③AD→B,④ AD→F,⑤ B→E}。
因为H的函数依赖集在第三步发生了改变,因此我们需要回到第二步。
此时H={①AD→C,②C→B,③AD→B,④ AD→F,⑤ B→E}。
在进行第二步
其中考察到③,有(AD)J+=ADCB,包含B,因此AD→B是不必要的函数依赖,所以去除
最后
得到的函数依赖集为H={AD→C, C→B, AD→F, B→E}
以上是关于数据库怎样求最小函数依赖集,候选码,分解bcnf例题的主要内容,如果未能解决你的问题,请参考以下文章