数据库分解-含孤立属性的三范式无损连接保持依赖分解——以S-T表为例

对于不含孤立属性的对于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.求最小依赖集:

右单: {A→B,A→C, A→D, A→E, F→G, FG→H,FG→I, AF→J}
去多余依赖: {A→B,A→C, A→D, A→E, F→G, FG→H,FG→I, AF→J}
去左多余属性: {A→B,A→C, A→D, A→E, F→G, FG→H,FG→I, AF→J}
求得最小依赖集为 F={A→B,A→C, A→D, A→E, F→G, FG→H,FG→I, AF→J}

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},此处应该分别检验U1U2U3

对于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},{SnoSname, SnoSsex,

Sno→ Sage, Sno→Sdept}>

(2)Course<{Cno, Cname,Cpno, Ccredit},{SnoCname,(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.求最小依赖集:

1.右单: {A→B,A→C, A→D, A→E, F→G, FG→H,FG→I, AF→J}
2. 去多余依赖: {A→B,A→C, A→D, A→E, F→G, FG→H,FG→I, AF→J}
3. 去左多余属性: {A→B,A→C, A→D, A→E, F→G, FG→H,FG→I, AF→J}
求得最小依赖集为 F={A→B,A→C, A→D, A→E, F→G, FG→H,FG→I, AF→J}

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},此处应该分别检验U1U2U3,成立,算法结束

所求ρ={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},{SnoSname, SnoSsex,

Sno→ Sage, Sno→Sdept}>

(2)Course<{Cno, Cname,Cpno, Ccredit},{SnoCname,(Cno,Cname)→Cpno,

(Cno, Cname)→ Ccredit} >

(3)SC<{Sno, Cno, Grade},{(Sno, Cno)→ Grade}>

(4)NEW<{Sno,Cno,P},{}>

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值