第六章——>如何求关系模式候选码、判断关系模式属于第几范式、求最小覆盖集Fm

1:求关系模式候选码的方法

设关系模式R中的属性集U=ABC…,有N个属性,判断U中属性在FD中出现的位置
(1)左右出现;
(2)只在左部出现;
(3)只在右部出现;
(4)不出现;

方法:按以下几步来求候选键

1.只在FD右部出现的属性,不属于候选码;
2.只在FD左部出现的属性,一定存在于任何候选码当中;
3.两边均不出现的属性一定存在于任何候选码当中;
4.其他属性逐个与2,3的属性组合,求属性集闭包,直至X的闭包等于U,若等于U,则X为候选码。(如果2.3被证明已经是候选码,所以就不用在继续4步骤)

例: R(U)=(ABCDEG),F={AB->C,CD->E,E->A,A->G},求候选码。

解答:
1)观察猜测可能的候选码
由F观察到BD(只在左边)一定包含在候选码中,G(只在右边)肯定不是主属性,先判断BD能否构成候选码,不能的话再判断:ACE(在两边)与BD组合可能形成候选码,需要求属性集的闭包进行验证。
2)验证

设X=ABD,(ABD)+F
X(0)=X=ABD
X(1)=X∪{CG}={ABDCG}≠X(0)≠ U
X(2)=X(1)∪{E}={ABCDEG}=U
即,X+F = (ABD)+F ={ABCDEG}=U,因此ABD是一个候选码。
同样,来验证BDC、BDE是否候选码?
再设X=BDC,求(BDC)+F   
X(0)=X=BDC
X(1)=X∪{E}={BDCE}≠X(0)≠ U
X(2)=X(1)∪{A}={ABCDE} ≠ U
X(3)=X(2)∪{GC}={ABCDEG} = U
即,X+F = (BDC)+F ={ABCDEG}=U,因此BDC也是一个候选码。
再设X=BDE,(BDE)+F
X(0)=X=BDE
X(1)=X∪{A}={ABDE}≠X(0)≠ U
X(2)=X(1)∪{GC}={ABCDEG}=U
即,X+F = (BDE)+F ={ABCDEG}=U,因此BDE也是一个候选码。

总结关系模式R(U,F)有三个候选码:ABD、BDC、BDE。

2:判断关系模式属于第几范式的方法

举例:
R(U)=(ABCDEG),F={AB->C,CD->E,E->A,A->G},
判断关系模式R(U,F)属于第几范式?

解答:
1)确定R(U,F)的候选码(小结1已解决)。
三个候选码:ABD、BDC、BDE。
2)属性集U分成两个集合:
码属性集,ABCDE
非码属性集,G
3)根据范式定义判断

1NF
↓ 消除非主属性对码的部分函数依赖
2NF

消除非主属性对码的传递函数依赖
3NF
↓ 消除主属性对码的部分和传递函数依赖
BCNF
↓ 消除非平凡且非函数依赖的多值依赖
4NF

显然,只有一个非主属性G,A->G,G部分依赖于候选码,所以,
R(U,F)属于1NF。

3:如何求函数依赖集F的最小覆盖集Fm

定理6.3 每一个函数依赖集F均等价于一个极小函数依赖集Fm。此Fm称为F的最小依赖集。
证明:
构造性证明,找出F的一个最小依赖集。

方法:
(1)应用分解规则,使F的每一个函数依赖的右部属性单一化。
(2)去掉各函数依赖左部多余的属性。
具体办法是: 逐个循环检查F中左边是非单属性的依赖X→Y。
设X=B1B2…Bn, 若Y∈(X-Bi)+F, 则以(X-Bi)→Y取代X→Y,直到F不再改变为止。
(3)去掉多余的函数依赖。
具体办法是:
循环检查F中各函数依赖X→Y,
令G=F-{X→Y},
若Y∈X+G, 则从F中去掉X→Y;
否则, 不能去掉X→Y。
直到F不再改变为止。

【例】 设关系模式R(U)上的函数依赖集为F, U={A, B, C, D, E, G }; F={AB→C, BC→D, ACD→B, D→EG, C→A, BE→C, CG→BD, CE→AG}。 试计算其等价的极小函数依赖集Fm。

解:
(1)应用分解规则,
使F的每一个函数依赖的右部属性单一化。
结果为:

F1={AB→C,BC→D, ACD→B, D→E, D→G,C→A,BE→C, CG→B,CG→D, CE→A,  CE→G}。
F1={AB→C, BC→D, ACD→B, D→E, D→G,C→A, BE→C, CG→B,  CG→D, CE→A,  CE→G}

(2)去掉各函数依赖左部多余的属性。 因为CE→A, C→A, 则E是多余的;
对于ACD→B,由于(CD)+F1=ABCDEG,则A是多余的。
其它函数依赖中无左部多余的属性。 删除函数依赖左部多余的函数依赖后的结果为:

 F2={AB→C,BC→D, CD→B,D→E, D→G, C→A, BE→C, CG→B,  CG→D,  CE→G}。 

(3) 在F2中去掉多余的函数依赖。
对于CG→B,
由于去掉它之后(CG)+ =ABCDEG,
包含B,所以CG->B是多余的。
可以验证其他函数依赖都不能去掉,因此其等价的极小函数依赖集Fm的结果为:

Fm={AB→C,BC→D, CD→B, D→E, D→G, C→A, BE→C, CG→D,  CE→G}。

注意:最小覆盖不唯一。

F={A->B,B->A,B->C,A->C,C->A}
Fm1={A->B,B->C,C->A}
Fm2={A->B,B->A,A->C,C->A}
发布了29 篇原创文章 · 获赞 13 · 访问量 892

猜你喜欢

转载自blog.csdn.net/yo_u_niverse/article/details/105637975