如何将R分解成BCNF模式集
发布网友
发布时间:2022-04-14 15:02
我来回答
共3个回答
热心网友
时间:2022-04-14 16:31
∵(BE)+=ABCDE, B+=BC不属于ABCDE, E+=E不属于ABCDE
∴BE为R的关键字.
考虑A→C,不包含关键字
∴将R分解为R11(AC)R12(ABDE)
F11的函数依赖为{A→C},F12的函数依赖为{A→D,BE→A}
∵F11∈BCNF,F12不属于BCNF,继续分解
将的R12分解为R21(AD),R22(ABE)
F21的函数依赖为{A→D},F22的函数依赖为{BE→A}
∵R21∈BCNF,R22∈BCNF
∴R的一组BCNF模式分解为R11(AC),R21(AD),R22(ABE)
注:分解的结果可能不唯一.追问哪里有E?
你求的闭包都不对。。。
复制粘贴的吧 - - ||
热心网友
时间:2022-04-14 17:49
BCNF分解就是要把R这个关系拆分成若干小的R,且满足分解定律,满足BCNF范式。
BCNF范式要求在R中,每一个FD的左侧都包含key,(不必包含所有key).
BCNF分解算法:
1.如果R满足BCNF 不必操作
2.如果FD: X->Y违例,则计算{X}+, x的闭包也就是X能决定什么
3.拆分,将{X}+作为一个关系R1,X与剩下部分作为另一个集合R2
4.对R1,R2做前三部的递归。
本内容来自知乎,作者id:马格烈特。
热心网友
时间:2022-04-14 19:24
(1)AC是候选键,这个应该没问题吧。
(2)不是BCNF,因为A->B,和BC->D左边都不包含候选键,要做无损连接的分解。
(3)首先看A->B,R分解为R1(AB)和R2(ACD),F1={A->B},F2={AC->D},这里的AC->D是因为R2(ACD)中并没有B,而A->B和BC->D可知道AC->D,R1必然满足BCNF,然后观察到R2的候选键为AC,R2也满足BCNF,所以分解完毕,R1(AB),R2(ACD)。