对于不含孤立属性的对于Student表而言:
{sno,sname,ssex,sage,sdept,cno,cname,cpno,Ccredit,Grade}
令A=Sno, B=Sname, C=Ssex, D=Sage, E=Sdept,F=Cno,G=Cname,H=Cpno, I=Ccredit, J=Grade
根据相对应的属性关系,我们可以得到以下模式:
F={(A→B,A→C, A→D, A→E, F→G, FG→H,FG→I, AF→J)}
第一步:首先按照算法6.3进行3NF,保持依赖的分解:
1.求最小依赖集:
2.找出不在F中出现的属性:不存在
3.若有X→A∈F,且XA=U,不成立(因为此时的属性集U中有多个码,不能找到一个唯一的码X,使X→A∈F,且XA=U成立)
4.①按左部分类:U1={A,B,C,D,E} U2={F,G} U3={F,G,H,I} U4={A,F,J}
②合并:U2∈U3,去掉U2
5.若有X→A∈F,且XA=U,则ρ={R},此处应该分别检验U1、U2、U3,
对于U1,X=A,A=B、C、D、E
对于U2,X=F,A=F、G、H、I
对于U3,X=AF,A=J
成立,算法结束
∴所求ρ={R1<U1(A,B,C,D,E),F{A→B,A→C, A→D, A→E}>,
R2<U2(F,G,H,I)>,F{F→G, FG→H,FG→I},R3<U3(A,F,J),F{AF→J}>}
第二步:接下来,按照算法6.4进行既无损连接又保持依赖的分解:
1.求候选码:某一属性组的值能够唯一标识一个元组而其子集不能
需要注意的是,此处需采用全局观念,既要对算法6.3中分解的每一个子模式Ui进行讨论,又要对全局的大模式U进行讨论
对于R1<U1(A,B,C,D,E),F{A→B,A→C, A→D, A→E}> 其码为A
对于R2<U2(F,G,H,I)>,F{F→G, FG→H,FG→I} 其码为F
对于R3<U3(A,F,J),F{AF→J}>} 其码为AF
对于全集R<U(A,B,C,D,E,F,G,H,I,),F{...}>而言 其码为AF
2.判断:若有某个Ui,X∈Ui,将R*<X,Fx>从T中去掉,或者Ui∈X,将R*<Ui,Fx>从r中去掉
① τ 1=p U{R*<X,Fx>}=p U{R*<{A},{A→B,A→C, A→D,A→E}}
A∈U1={A,B,C,D,E} 满足A=X,X=U1 ,去掉R*<X,Fx>
② τ 2= p U{R*<X,Fx>}=p U{R*<{F},{F→ G,FG→ H,FG→I}>}
F=U2={F,G,H,I} 满足F=X,X∈U2 ,去掉R*<X,Fx>
③ τ 3=p U{R*<X,Fx>}=p U{R*<{AF},{AF→J}>}
F∈U3={A,F,J} 满足AF=X,X∈U3 ,去掉R*<X,Fx>
④ τ 4=p U{R*<X,Fx>}=p U{R*<{AF},{∅}>},存在F∈U3={A,F,J} ,去掉R*<X,Fx>
第三步:
结论∶ τ =ρ=R1<U1(A,B,C,D,E),F{A→B, A→C, A→D, A→E}>
R2<U2(F,G,H,I)>,F{F→G, FG→H, FG→l},R3<U3(A,F,J),F{AF→J}>},R4<U4(AFP),∅>}
回代∶
(1)Student<{Sno, Sname,Ssex,Sage, Sdept},{Sno→ Sname, Sno→ Ssex,
Sno→ Sage, Sno→Sdept}>
(2)Course<{Cno, Cname,Cpno, Ccredit},{Sno→ Cname,(Cno,Cname)→Cpno,
(Cno, Cname)→ Ccredit} >
(3)SC<{Sno, Cno, Grade},{(Sno, Cno)→ Grade}>
对于含孤立属性的对于Student表而言:
{sno,sname,ssex,sage,sdept,cno,cname,cpno,Ccredit,Grade,P}
令A=Sno, B=Sname, C=Ssex, D=Sage, E=Sdept,F=Cno,G=Cname,H=Cpno, I=Ccredit, J=Grade
第一步:我们采取跟不含孤立属性相同的方式进行操作,先进行算法6.3的分解:
1.求最小依赖集:
2.找出不在F中出现的属性:P,记作U0={P},U=U-U0={A,B,C,D,E,F,G,I,J}
3.若有X→A∈F,且XA=U,不成立
4.①按左部分类:U1={A,B,C,D,E} U2={F,G} U3={F,G,H,I} U4={A,F,J}
②合并:U2∈U3,去掉U2
5.若有X→A∈F,且XA=U,则ρ={R},此处应该分别检验U1、U2、U3,成立,算法结束
∴所求ρ={R1<U1(A,B,C,D,E),F{A→B,A→C, A→D, A→E}>,
R2<U2(F,G,H,I)>,F{F→G, FG→H,FG→I},R3<U3(A,F,J),F{AF→J}>}∪R0<U0(P),∅>
与不含孤立属性的分解不同之处在于,属性集F中未出现的元素P,再最后分解的模式中要加上
第二步:再6.3的基础上进行6.4的分解
1.求候选码:某一属性组的值能够唯一标识一个元组而其子集不能
对于R1<U1(A,B,C,D,E),F{A→B,A→C, A→D, A→E}> 其码为A
对于R2<U2(F,G,H,I)>,F{F→G, FG→H,FG→I} 其码为F
对于R3<U3(A,F,J),F{AF→J}>} 其码为AF
对于全集R<U(A,B,C,D,E,F,G,H,I,P),F{...}>而言,其候选码必包括孤立属性P
因此,对于全集R而言,其码应为AFP
2.判断:若有某个Ui,X∈Ui,将R*<X,Fx>从T中去掉,或者Ui∈X,将R*<Ui,Fx>从r中去掉
1. τ 1=p U{R*<X,Fx>}=p U{R*<{A},{A→B,A→C, A→D,A→E}}
A∈U1={A,B,C,D,E}满足A=X,X=U1 ,去掉R*<X,Fx>
2. τ 2= p U{R*<X,Fx>}=p U{R*<{F},{F→ G,FG→ H,FG→I}>}
F=U2={F,G,H,I}满足F=X,X∈U2 ,去掉R*<X,Fx>
3. τ 3=p U{R*<X,Fx>}=p U{R*<{AF},{AF→J}>}
F∈U3={A,F,J}满足AF=X,X∈U3 ,去掉R*<X,Fx>
4. τ 4=p U{R*<X,Fx>}=p U{R*<{AFP},{∅}>}不存在Ui,
需要新建一个模式将码AFJ存入
5. τ 0=p U{R*<X,Fx>}=p U{R0<{P},{∅}>},存在码X=AFP,使U0=P∈X,去掉R0
因为对于属性集AFJ而言,模式中必须有码才能表示此模式是无损连接保持依赖的,如果没有码存在,只能达到保持依赖的三范式
第三步:
结论:τ =R1<U1(A,B,C,D,E),F{A→B, A→C, A→D, A→E}>,R2<U2(F,G,H,I)>,F{F→G, FG→H, FG→l},R3<U3(A,F,J),F{AF→J}>},R4<U4(AFP),∅>}
回代∶
(1)Student<{Sno, Sname,Ssex,Sage, Sdept},{Sno→ Sname, Sno→ Ssex,
Sno→ Sage, Sno→Sdept}>
(2)Course<{Cno, Cname,Cpno, Ccredit},{Sno→ Cname,(Cno,Cname)→Cpno,
(Cno, Cname)→ Ccredit} >
(3)SC<{Sno, Cno, Grade},{(Sno, Cno)→ Grade}>
(4)NEW<{Sno,Cno,P},{∅}>