转换成3NF的保持无损连接和函数依赖的分解

判别一个分解的无损连接性

 

 

算法的伪代码描述为:

 

例题解析

对于分解为两个关系模式的情况,有如下的定理:

 

 

 

============================================================================================

 

算法2:

     

 

 ================================================================================   

 例1:关系模式R<U,F>,其中U={C,T,H,R,S,G},

F={CS→G,C→T,TH→R,HR→C,HS→R},将其分解成3NF并保持函数依赖。

解:根据算法进行求解     

(一)计算F的最小函数依赖集

      ① 利用分解规则,将所有的函数依赖变成右边都是单个属性的函数依赖。由于F的所有函数依赖的右边都是单个属性,故不用分解。

      ② 去掉F中多余的函数依赖

      A.设CS→G为冗余的函数依赖,则去掉CS→G,得:

      F1={C→T,TH→R,HR→C,HS→R}

      计算(CS)F1+:

      设X(0)=CS

      计算X(1):扫描F1中各个函数依赖,找到左部为CS或CS子集的函数依赖,找到一个C→T函数依赖。故有X(1)=X(0)∪T=CST。

      计算X(2):扫描F1中的各个函数依赖,找到左部为CST或CST子集的函数依赖,没有找到任何函数依赖。故有X(2)=X(1)。算法终止。

      (CS)F1+= CST不包含G,故CS→G不是冗余的函数依赖,不能从F1中去掉。

      B.设C→T为冗余的函数依赖,则去掉C→T,得:

      F2={CS→G,TH→R,HR→C,HS→R}

      计算(C)F2+:

      设X(0)=C

      计算X(1):扫描F2中的各个函数依赖,没有找到左部为C的函数依赖。故有X(1)=X(0)。算法终止。故C→T不是冗余的函数依赖,不能从F2中去掉。

      C.设TH→R为冗余的函数依赖,则去掉TH→R,得:

      F3={CS→G,C→T,HR→C,HS→R}

      计算(TH)F3+:

      设X(0)=TH

      计算X(1):扫描F3中的各个函数依赖,没有找到左部为TH或TH子集的函数依赖。故有X(1)=X(0)。算法终止。故TH→R不是冗余的函数依赖,不能从F3中去掉。

      D.设HR→C为冗余的函数依赖,则去掉HR→C,得:

      F4={CS→G,C→T,TH→R,HS→R}

      计算(HR)F4+:

      设X(0)=HR

      计算X(1):扫描F4中的各个函数依赖,没有找到左部为HR或HR子集的函数依赖。故有X(1)=X(0)。算法终止。故HR→C不是冗余的函数依赖,不能从F4中去掉。

      E.设HS→R为冗余的函数依赖,则去掉HS→R,得:

      F5={CS→G,C→T,TH→R,HR→C}

      计算(HS)F5+:

      设X(0)=HS

      计算X(1):扫描F5中的各个函数依赖,没有找到左部为HS或HS子集的函数依赖。故有X(1)=X(0)。算法终止。故HS→R不是冗余的函数依赖,不能从F5中去掉。即:F5={CS→G,C→T,TH→R,HR→C,HS→R}

      ③ 去掉F5中各函数依赖左边多余的属性(只检查左部不是单个属性的函数依赖),没有发现左边有多余属性的函数依赖。

故最小函数依赖集为:F={CS→G,C→T,TH→R,HR→C,HS→R}

(二)由于R中的所有属性均在F中都出现,所以转下一步。     

(三)对F按具有相同左部的原则分为:

R1=CSG,R2=CT,R3=THR,R4=HRC,R5=HSR。

所以ρ={R1(CSG),R2(CT),R3(THR),R4(HRC),R5(HSR)}。

 

================================================================================================================ 

算法3:

    

例2:关系模式R<U,F>,其中:U={C,T,H,R,S,G},

F={CS→G,C→T,TH→R,HR→C,HS→R},分解成3NF并保持无损连接和函数依赖。

 

解:

(1) 根据上例例1,得到3NF并保持函数依赖的分解如下:

      σ={ R1(CSG),R2(CT),R3(THR),R4(HRC),R5(HSR) }。

(2) CS,C,TH,HR,HS分别都是原模式F的关键字,以HS为例,得到 τ = σ \cup {HS} = {CT,CSG,CHR,HSR,HRT,HS},这是F的一个分解。

(3)由于R6(HS)\leqslantR4(HSR)\in\tau,所以消去R6(HS),得到的分解为{CT,CSG,CHR,HSR,HRT}。这个就是具有无损联接性和保持函数依赖性的分解,且其中每一个模式均为3NF。

将(2)中的HS换成F中其他的CS,C,TH或者HR进行(2)(3)的推导,得到的结果跟上面(3)中的结果依然是一样的

  • 20
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值