例:已知关系模式R(U,F),其中U={A,B,C,D,E,G},
F={BE→G,BD→G,CD→A,CE→G,CDE→AB,BC→A,B→D}
求(1)F的最小函数依赖集:
①右边单一化
F1={BE→G,BD→G,CD→A,CE→G,CDE→A,CDE→B,BC→A,B→D}
②分别求F1中各函数依赖的闭包
对BE→G,(BE)+ = BDEG,闭包含有右边属性G,去掉该函数依赖
……
/*如果从后到前求闭包,那么CDE→B会被去掉。说明最小依赖集不唯一 */
所以有
F2={BD→G,CD→A,CE→G,CDE→B,B→D}
③左边单一化,判断冗余,若冗余则代替
对于BD→G :
{ B→G,(B)+ =BD,闭包含属性D,所以D冗余 ;
D→G, (D)+ = D, 闭包不含属性B,B不冗余 ;
所以B→G 代替BD→G }
……
所以有
Fm={B→G,CD→A,CE→G,CDE→B,B→D}
(2)求R的候选码
解:①首先用LRN法区分各属性
L: C, E | R: A, G |
---|---|
N: none | LR: B, D |
②求闭包:
C闭包 != U , E闭包 != U
BC闭包 != U , CD闭包 != U , BE闭包 != U , DE闭包 != U , BD闭包 != U
BCE闭包 = U , CDE闭包 = U ;
所以,候选码为: BCE, CDE
主属性:B,C,D,E
(3)判断R的最高规范化程度,说明理由
答:R是第一范式。因为有CD→A,所以(C,D,E)→A,存在非主属性对主属性的部分函数依赖。
(4)判定分解p ={ABD,DGE,AG,CE}是否保持无损连接性;
答:没有保持无损连接性。因为分解p的各个子模式里面都没有包含候选码。
(5)将关系模式R分解为3NF,并且保持函数依赖和无损连接性。
解:已求得最小依赖集Fm={B→G,CD→A,CE→G,CDE→B,B→D} ;
左部相同原则分组,再将各属性并起来:
U1(=B并DG)=BDG, U2=ACD, U3=CEG, U4=BCDE
将R分解为p= {
R1( {B,D,G}, { B→G, B→D } ),
R2( {A,C,D}, { CD→A } ),
R3( {C,E,G}, { CE→G } ),
R4( {B,C,D,E}, { CDE→B } )
}
因为候选码BCE,CDE在R4中,所以所求的分解p具有无损连接性,且保持函数依赖,且每
个子模式为3NF。