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