3NF、BCNF和4NF基本概念和分解

只谈情不闲聊 提交于 2020-02-25 16:11:32

https://blog.csdn.net/yuyang_z/article/details/79115991

 

一、第三范式(3NF)——相对于BCNF,允许存在主属性对候选码的传递依赖和部分依赖

定义:如果关系模式R∈2NF,且每个非主属性都不传递函数依赖于R的主关系键,则称R属于第三范式,简称3NF。

1、把一个关系模式分解成3NF,使它具有保持函数依赖性

算法如下:

其中提到了最小函数依赖集,那么最小函数依赖集怎么求呢?方法如下:

举个例子:在R(U,F)中,U=ABCDEG,F={B→D,DG→C,BD→E,AG→B,ADG→BC}

1.1首先求最小依赖集

(1)右部属性单一化,F={B→D,DG→C,BD→E,AG→B,ADG→B,ADG→C}

(2)去掉左边多余属性,只针对非单属性

DG→C,若去掉D,则(G)+=G不包含C,D保留(不冗余),若去掉G,(D)+=D不包含C,G保留

BD→E,(D)+=D,(B)+=BDE包含E,则可以B→E代替此函数依赖

AG→B,(G)+=G,(A)+=A

ADG→B,(DG)+=DGC,(AG)+=AGB包含B,则可以由AG→B代替

ADG→C,(DG)+=DGC包含C,则可以由DG→C代替

所以最小依赖集F={B→D,DG→C,B→E,AG→B}

(3)去掉多余的依赖

去掉B→D,(B)+=BE,不包含D,则不冗余,不去掉

去掉DG→C,(DG)+=DG,不包含C

去掉B→E,(B)+=BD,不包含E

去掉AG→B,(AG)+=AG,不包含B

所以最小依赖集F={B→D,DG→C,B→E,AG→B}

1.2R中所有属性都在最小依赖集中出现,转下一步

1.3按照具有相同左部的原则分为:

R1=BDE,R2=DGC,R3=AGB

所以最终分解为ρ={R1(BDE),R2(DGC),R3(AGB)}

2、把一个关系模式分解成为3NF,使它具有保持函数依赖且无损

算法:step1,求F的规范覆盖Fc

 step2,初始化,置ρ={ }

 step3,逐个考察Fc中的每一个FD:X→Y,如果ρ中的每一个关系模式都不包含XY,则将XY加入ρ中

   step4,考察R的候选码,如果ρ中所有关系模式都不包含R的候选码,则将R的某个候选码加入ρ中

2.1其中用到了规范覆盖,那么规范覆盖怎么求呢?如下:

步骤1,合并函数依赖,将Fc中如α1→β1和α1→β2转换成α1→β1β2,得到新函数依赖集F1

步骤2,去除无关属性,找出F1中α或β中含有无关属性的函数依赖α→β,去除无关属性后,代替原依赖集

其中步骤2中的无关属性定义:

 

有了无关属性的定义后,步骤2比较好解决了。

举个例子:r(R)=r(A,B,C)和F={A→BC,B→C,A→B,AB→C}计算Fc

合并:A→BC与A→B合并为A→BC,F1={A→BC,B→C,AB→C}

去除无关属性(单属性不存在无关属性):

对于AB→C,多属性在左边,去除AB中的A,r={AB}-{A}=B,(B)+=BC包含C,所以A无关,变为B→C,已存在,F1={B→C,A→BC}

对于A→BC,多属性在右边,去除BC中的B,F2={B→C,A→C},计算(A)+=AC,不包含B,不无关

                                             去除BC中的C,F2={B→C,A→B},计算(A)+=AC,包含C,则BC中的C是无关属性

变为F={B→C,A→B}

最终规范覆盖Fc={B→C,A→B}

继续以此题为例,求出候选码,为A,所以依次考察Fc中的BC,初始ρ={},将BC加入ρ中,ρ={R1(BC)}。再考虑AB,ρ中的关系模式不包含AB,则将AB加入ρ中,ρ={R1(BC),R2(AB)}因为候选码A已经在R2中,所以分解结束,最终分解为ρ={R1(BC),R2(AB)}。如果这里最终只有ρ={BC},那么要把候选码A加入进去,则ρ={R1(BC),R2(A)}。这里附上候选码的计算方法:

 

二、BC范式——排除了任何属性(主、非主属性)对候选码的部分依赖和传递依赖,主属性之间的传递依赖

定义:如果关系模式R∈1NF,且所有的函数依赖XY,决定因素X都包含了R的一个候选键,则称R属于BC范式。

算法:将一个关系模式分解成BCNF

(1)令ρ={R}

(2)如果ρ中所有模式都是BCNF,则转(4)

(3)如果ρ中有一个关系模式S不是BCNF,则S中必能找到一个函数依赖X→A且X不是S的候选键,且A不属于X,设S1=XA,S2=S-A,用分解{S1,S2}代替S,转(2)

(4)分解结束,输出ρ

举个例子:将R(A,B,C,D)规范到BCNF,候选键为AC和BC,F={A→B,B→A,AC→D,BC→D}

令ρ={R(A,B,C,D)},分解为S1(AB),S2(ACD)

三、第4范式(4NF)

定义:

其中涉及到多值依赖的定义,

最终4NF的分解算法如下:


————————————————
版权声明:本文为CSDN博主「星星,就酱」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yuyang_z/article/details/79115991

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!