模式分解保持函数依赖3NF分解算法——数据库考试复习

前言

模式分解的本质是将一个大的模式分解为几个小的模式,在模式分解至少应达到3NF,而且要保证是无损连接性的,分解时尽可能保持函数依赖。事实证明,保持无损连接和保持函数依赖,可以达到3NF,但不一定能达到BCNF。以下具体说明保持函数依赖3NF求解算法

算法描述

假设:关系模式R<U,F>,其中U属性集,F为属性集上的函数依赖,将其分解成3NF并保持函数依赖算法如下:
①求F最小依赖集F‘;极小依赖集算法参考地址:
②将既不在左部,又不在右部的属性,构成一个独立的一个关系模式;
③若有唯一依赖X->A,且XA=R,则分解只有一个R,结束;
④将左部相同的所有函数依赖合并为一个新关系。每一个X i _i i->A i _i i,构成一个关系子模式R i _i i={X i _i iA i _i i}

示例

例1】关系模式R<U,F>,其中U={C,T,H,R,S,G},F={CS→G,C→T,TH→R,HR→C,HS→R},将其分解成3NF并保持函数依赖.
解:第一步: 求F的极小依赖集F’,
F‘=={CS→G,C→T,TH→R,HR→C,HS→R}
第二步: 不存在既不在左部,又不在右部的属性;
第三步: 函数依赖左部相同的函数依赖合并,将合并后的每个函数依赖形成一个新的关系模式,分解后ρ={R 1 _1 1(CSG),R 2 _2 2(CT),R 3 _3 3(THR),R 4 _4 4(HRC),R 5 _5 5(HSR)}

例2】设关系模式R(ABCDE)上的函数依赖集F={A→BC, BCD→E, B→D, A→D, E→A},将其分解成3NF并保持函数依赖.
解:第一步: 求F的极小依赖集F’
将右部单一化:{A→B,A→C, BCD→E, B→D, A→D, E→A}
去掉多余的函数依赖
假设去掉:A→B,F={A→C, BCD→E, B→D, A→D, E→A},求A F + _F^+ F+={ACD},不包含B,A→B不能去掉
假设去掉:A→C,F={A→B,BCD→E, B→D, A→D, E→A},求A F + _F^+ F+={ABD},不包含C,A→C不能去掉
假设去掉:BCD→C,F={A→B,A→C, B→D, A→D, E→A},求BCD F + _F^+ F+={BCD},不包含E,BCD→C不能去掉
假设去掉:B→D,F={A→B,A→C, BCD→E, A→D, E→A},求B F + _F^+ F+={BD},不包含E,B→D不能去掉
假设去掉:A→D,F={A→B,A→C, BCD→E, B→D, E→A},求A F + _F^+ F+={ABCD},包含D,A→D可以去掉,得到 F={A→B,A→C, BCD→E, B→D, E→A}
假设去掉:E→A, F={A→B,A→C, BCD→E, B→D},求E F + _F^+ F+={E},不包含A,E→A不能去掉
此时F={A→B,A→C, BCD→E, B→D, E→A}
去掉左部的冗余
尝试使用BC→E代替BCD→E,F={A→B,A→C, BCD→E, B→D, E→A},BC F + _F^+ F+={BCDE},包含E,可以使用BC代替BCD→E;
F={A→B,A→C, BC→E, B→D, E→A}
尝试使用B→E代替BC→E,F={A→B,A→C, BC→E, B→D, E→A},B F + _F^+ F+={BD},不包含E;不可替换
尝试使用C→E代替BC→E,F={A→B,A→C, BC→E, B→D, E→A},C F + _F^+ F+={C},不包含E;尝试使用D→E,D F + _F^+ F+={D},不包含E,不可替换
因此最小依赖集F‘={A→B,A→C, BC→E, B→D, E→A}
第二步: 不存在既不在左部,又不在右部的属性;
第三步: 函数依赖左部相同的函数依赖合并,将合并后的每个函数依赖形成一个新的关系模式,分解后ρ={R 1 _1 1(ABC),R 2 _2 2(BCE),R 3 _3 3(BD),R 4 _4 4(EA)}

结论

保持函数依赖3NF分解算法重点是在求极小函数依赖集,完成后将左部相同的函数依赖连同其右部合成一个关系模式,把没有出现在任何一个函数依赖的属性合成一个关系模式。

  • 23
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值