数据库系统概论课堂笔记-规范化理论5

一、达到BCNF无损连接分解算法

数据库系统概论课堂笔记-规范化理论5

对于算法的理解:存在函数依赖X->A,且X不是R的码,这里可以理解成正常的BCNF范式左部一定包含码,那么如果不是BCNF范式,一定存在一个依赖满足上式。XA为什么是R的真子集?答:X不是候选码,不能推出整个R(候选码是可以通过依赖推导出整个R的),故XA一定不是整个R,或者说XA是R的真子集。

数据库系统概论课堂笔记-规范化理论5

   注意:这里的计算R1和R2的最小函数依赖集,其实跟正常的关于最小函数依赖集的计算思路是一致的。例如关于依赖子句的冗余:DE->C,C->D,由于在R2中并无C属性,故这样消冗余是可以的。还有关于依赖左部属性的冗余,例如DE->D。

二、达到3NF且保持函数依赖的分解 

算法实现:

数据库系统概论课堂笔记-规范化理论5

算法解释:2)中若X->A,且XA=R,说明关系模式R一定是3NF(无传递依赖),那么就无需再分解。同理,也就将最小依赖集中的每一条依赖子句构造成一个关系模式(如果左部相同即合并),这也是保留了依赖集里的每一条依赖子句,所以称为'保持函数依赖的分解',同时这种方式也保证了分解的关系模式一定是3NF,故称为'达到3NF且保持函数依赖的分解'

例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的所有函数依赖的右边都是单个属性,故不用分解
举个例子就是:CS→GB 变成 CS→G CS→B
② 去掉F中多余的函数依赖
设CS→G为冗余的函数依赖,则去掉CS→G,得:
F1={C→T,TH→R,HR→C,HS→R}
计算(CS)F1+: G不属于(CS)F1+ 故这个不是冗余的函数依赖
同理:分别判断,C→T,TH→R,HR→C,HS→R 是不是冗余的函数依赖
③ 去掉F5中各函数依赖左边多余的属性(只检查左部不是单个属性的函数依赖),没有发现左边有多余属性的函数依赖。
举例:CS→G 去掉C得到S→G这是无法由后面的依赖推出的,同理去掉S,同样的方法对其他所有的函数依赖进行检验
(二)由于R中的所有属性均在F中都出现,所以转下一步。

数据库系统概论课堂笔记-规范化理论5

举例: U={C,T,H,R,S,G},F={CS→G}
由于T,H,R没有在F中出现,于是将R1={THP}作为一个分解关系


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

(三)对F按具有相同左部的原则分为:
R1=CSG,R2=CT,R3=THR,R4=HRC,R5=HSR。
所以ρ={R1(CSG),R2(CT),R3(THR),R4(HRC),R5(HSR)}。
相同左部分的原则:

数据库系统概论课堂笔记-规范化理论5

举例:C→T ,C→A是相同的左部,则将二者合并为一个关系C→AT

三、3NF的保持无损连接和函数依赖的分解

数据库系统概论课堂笔记-规范化理论5

算法解释:即对通过'二'中算法得到达到3NF且保持函数依赖的分解执行一个“并”操作,所并对象为原关系模式R的一个关键字,若最后的并集内部存在模式的相互包含关系,那么即消除掉该模式。

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

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

解:

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

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

(2) CS,C,TH,HR,HS分别都是原模式F的关键字,以HS为例,得到 τ = σ 数据库系统概论课堂笔记-规范化理论5 {HS} = {CT,CSG,CHR,HSR,HRT,HS},这是F的一个分解。

(3)由于R6(HS)数据库系统概论课堂笔记-规范化理论5R4(HSR)数据库系统概论课堂笔记-规范化理论5数据库系统概论课堂笔记-规范化理论5,所以消去R6(HS),得到的分解为{CT,CSG,CHR,HSR,HRT}。这个就是具有无损联接性和保持函数依赖性的分解,且其中每一个模式均为3NF。

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