bcnf分解算法_BCNF的保持无损连接的分解

BCNF 的分解是数据库范式的内容

分解的算法是这样的

将关系模式R分解为一个BCNF的基本步骤是

1).检查R中关系模式是否符合BCNF,若都符合输出即可

2)若R中有关系模式S不符合BCNF,则必有X->A的闭包不包含S的全部属性,把S分为{S1,S2},其中S1=XA,S2=(S-A)X,分别计算其最小函数依赖集,并将{S1,S2}代替S代入第一步中。

这里面有几点说明的

如何检查关系模式是否满足BCNF呢

对每一个函数依赖求他们的闭包,如果闭包的结果是U,那么他是符合BCNF的,如果不是,就违反,就可以从这一个函数依赖来分解。(所以分解的方法有很多,不止一种)

如何求最小依赖集

若函数依赖集F满足下列条件,则称F为最小函数依赖集。记为: F’或Fm。(不唯一)

(1) F’的所有函数依赖的右部均为单属性;

(2) F中不存在这样的函数依赖X->A,使得F与F-{X-A}等价。 (3)

F中不存在这样的函数依赖X->A, X有真子集Z使得F-{X->A}∪{Z->A}与F等价。

求BCNF的关键之处就在于最小函数依赖的求法,需要合并一些蕴含的,可传递的函数依赖。

例题:

关系模式R,其中:U={A,B,C,D,E},F={A→C,C→D,B→C,DE→C,CE→A},将其分解成BCNF并保持无损连接。

解:

① 令ρ={R(U,F)}。

② ρ中不是所有的模式都是BCNF,转入下一步。

③ 分解R:考虑A→C函数依赖不满足BCNF条件(A所以不是候选关键码),将其分解成R1(AC)、R2(ABDE)。计算R1和R2的最小函数依赖集分别为:F1={A→C},F2={B→D,DE→D,BE→A}。其中B→D是由于R2中没有属性C且B→C,C→D;DE→D是由于R2中没有属性C且DE→C,C→D;BE→A是由于R2中没有属性C且B→C,CE→A。又由于DE→D是蕴含关系,可以去掉,故F2={B→D,BE→A}。

分解R2:考虑B→D函数依赖不满足BCNF条件,将其分解成R21(BD)、R22(ABE)。计算R21和R22的最小函数依赖集分别为:F21={B→D},F22={BE→A}。

由于R22上的候选关键字为BE,而F22中的所有函数依赖满足BCNF条件。故R可以分解为无损连接性的BCNF如:ρ={R1(AC),R21(BD),R22(ABE)}

  • 9
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值