无损连接和模式分解题型

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

方法一:无损连接定理

关系模式R(U,F)的一个分解ρ={R1,R2}具有无损连接的充分必要条件是:

U1∩U2→U1-U2 €F+ 或U1∩U2→U2 -U1€F+

方法二:算法

ρ={R1,R2,...,Rk}是关系模式R的一个分解,U={A1,A2,...,An},F={FD1,FD2,...,FDp},并设F是一个最小依赖集,记FDi为Xi→Alj,其步骤如下:

① 建立一张n列k行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性Aj属于Ui,则在j列i行上填上aj,否则填上bij;

② 对于每一个FDi做如下操作:找到Xi所对应的列中具有相同符号的那些行。考察这些行中i列的元素,若其中有aj,则全部改为aj,否则全部改为bmi,m是这些行的行号最小值。

如果在某次更改后,有一行成为:a1,a2,...,an,则算法终止。且分解ρ具有无损连接性,否则不具有无损连接性。

对F中p个FD逐一进行一次这样的处理,称为对F的一次扫描。

③ 比较扫描前后,表有无变化,如有变化,则返回第② 步,否则算法终止。如果发生循环,那么前次扫描至少应使该表减少一个符号,表中符号有限,因此,循环必然终止。

举例1:已知R,U={A,B,C},F={A→B},如下的两个分解:

① ρ1={AB,BC}

② ρ2={AB,AC}

判断这两个分解是否具有无损连接性。

①因为AB∩BC=B,AB-BC=A,BC-AB=C

所以B→A ¢F+,B→C ¢ F+,故ρ1是有损连接。

② 因为AB∩AC=A,AB-AC=B,AC-AB=C

所以A→B €F+,A→C ¢F+,故ρ2是无损连接。

举例2:已知R,U={A,B,C,D,E},F={A→C,B→C,C→D,DE→C,CE→A},R的一个分解为R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE),判断这个分解是否具有无损连接性。

 ① 构造一个初始的二维表,若“属性”属于“模式”中的属性,则填aj,否则填bij

无损连接和模式分解题型_第1张图片

② 根据A→C,对上表进行处理,由于属性列A上第1、2、5行相同均为a1,所以将属性列C上的b13、b23、b53改为同一个符号b13(取行号最小值)。

无损连接和模式分解题型_第2张图片

③ 根据B→C,对上表进行处理,由于属性列B上第2、3行相同均为a2,所以将属性列C上的b13、b33改为同一个符号b13(取行号最小值)。

无损连接和模式分解题型_第3张图片

④ 根据C→D,对上表进行处理,由于属性列C上第1、2、3、5行相同均为b13,所以将属性列D上的值均改为同一个符号a4。

无损连接和模式分解题型_第4张图片

⑤ 根据DE→C,对上表进行处理,由于属性列DE上第3、4、5行相同均为a4a5,所以将属性列C上的值均改为同一个符号a3。

无损连接和模式分解题型_第5张图片

⑥ 根据CE→A,对上表进行处理,由于属性列CE上第3、4、5行相同均为a3a5,所以将属性列A上的值均改为同一个符号a1。

无损连接和模式分解题型_第6张图片

⑦ 通过上述的修改,使第三行成为a1a2a3a4a5,则算法终止。且分解具有无损连接性。

二、模式分解

1.达到BCNF无损连接分解算法

无损连接和模式分解题型_第7张图片

例:关系模式R,其中:U={A,B,C,D,E},F={A→C,C→D,B→C,DE→C,CE→A},将其分解成BCNF并保持无损连接。
      解:
      ① 令ρ={R(U,F)}。
      ② ρ中不是所有的模式都是BCNF,转入下一步。
      ③ 分解R:

  • R上的候选码为BE(因为所有函数依赖的右边没有BE)。
  • 考虑A→C函数依赖不满足BCNF条件(因A不包含候选码BE),将其分解成R1(AC)、R2(ABDE)。
  • 计算R1和R2的最小函数依赖集分别为:F1={A→C},F2={B→D,DE→D,BE→A}。其中B→D是由于R2中没有属性C且B→C,C→D;DE→D是由于R2中没有属性C且DE→C,C→D;BE→A是由于R2中没有属性C且B→C,CE→A。又由于DE→D是蕴含关系,可以去掉,故F2={B→D,BE→A}。

      分解R2:R2上的候选码为BE。考虑B→D函数依赖不满足BCNF条件,将其分解成R21(BD)、R22(ABE)。计算R21和R22的最小函数依赖集分别为:F21={B→D},F22={BE→A}。
      由于R22上的候选码为BE,而F22中的所有函数依赖满足BCNF条件。故R可以分解为无损连接性的BCNF

       如:ρ={R1(AC),R21(BD),R22(ABE)}

2.达到3NF且保持函数依赖的分解 

无损连接和模式分解题型_第8张图片

无损连接和模式分解题型_第9张图片

例:关系模式R,其中U={C,T,H,I,S,G},F={CS→G,C→T,TH→I,HI→C,HS→I},将其分解成3NF并保持函数依赖。

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

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

② 去掉F中多余的函数依赖                 ——无冗余化

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

F1={C→T,TH→I,HI→C,HS→I}

计算(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→I,HI→C,HS→I}

计算(C)F2+:

设X(0)=C

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

同理可判断TH→I,HI→C,HS→是不是冗余的函数依赖

③ 去掉F5中各函数依赖左边多余的属性(只检查左部不是单个属性的函数依赖)——既约化

没有发现左边有多余属性的函数依赖。举例:CS→G 去掉C得到S→G这是无法由后面的依赖推出的,同理去掉S,同样的方法对其他所有的函数依赖进行检验

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

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

如果R中存在一些不在Fm中出现的属性,将它们单独构成一个关系模式,并从U中去掉它们

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

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

相同左部分的原则:

对于F中的每一个函数依赖X→A,构造一个关系模式XA.如果X→A1,X→A2····X→An均属于F,则构造一个关系模式XA1A2····An

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

3.达到3NF且同时保持无损连接与函数依赖的分解 

无损连接和模式分解题型_第10张图片

无损连接和模式分解题型_第11张图片 

综合题:  

 无损连接和模式分解题型_第12张图片

无损连接和模式分解题型_第13张图片

无损连接和模式分解题型_第14张图片

无损连接和模式分解题型_第15张图片

你可能感兴趣的:(数据库原理)