无损联接分解

 

定义:无损联接分解是将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式,则称这种分解为无损联接分解。
 
 
可还原
 
 
例1:关系模式:成绩(学号,姓名,课程号,课程名,分数)
函数依赖:学号->姓名,课程号->课程名, (学号,课程号)->分数
若将其分解为下面三个关系模式:
 
成绩(学号,课程号,分数)
学生(学号,姓名)
课程(课程号,课程名)
问,这样的分解是无损分解么?
----
由于:学号->姓名,所以:
成绩( 学号,课程号,分数, 姓名)
由于:课程号->课程名,所以:
成绩(学号, 课程号,分数,姓名, 课程名)
 
所以这个例子是无损分解
 
例2:设R=ABCDE, R1=AD,R2=BC,R3=BE,R4=CDE, R5=AE, 设函数依赖:
A->C, B->C, C->D, DE->C, CE->A. 判断R分解成
 
ρ={R1,  R2,  R3,  R4,  R5}是否无损联接分解?
 
解:
这样的题要通过画表的方法来解,首先,原始表:
 
 
A
B
C
D
E
AD
a 1
b 12
b 13
a 4
b 15
BC
b 21
a 2
a 3
b 24
b 25
BE
b 31
a 2
b 33
b 34
a 5
CDE
b 41
b 42
a 3
a 4
a 5
AE
a 1
b 52
b 53
b 54
a 5
1
(A B C D E 是关系R 的属性, AD, BC, BE, CDE, AE  是分解之后每一个关系对应的属性集)
 
填表的过程:
当横竖相交的时候,如果在分解关系中存在对应列的单个的属性(譬如第一列第一行AD与A相交的单元格,AD含有A,就填写a1),则填写a 下标     下标就是单元格对应所在的列号。否则填写b 下标   下标是单元格对应所在的行列号。
填写之后的初始表就是表1 所示
2. 根据依赖关系修改原始表:
对于依赖关系A->C ,看A 列中有两行a 1 是相等的(第一行和第五行),所以在C 列中对应的两行也应该相等,但是看到这两行都是b b 13 b 53 ),所以将这个b 都换成b 13 (上面的较小的标)
 
 
A
B
C
D
E
AD
a 1
b 12
b 13
a 4
b 15
BC
b 21
a 2
a 3
b 24
b 25
BE
b 31
a 2
b 33
b 34
a 5
CDE
b 41
b 42
a 3
a 4
a 5
AE
a 1
b 52
b 53 àb 13
b 54
a 5
对于依赖B àC,  同样的道理,看B 这一列中,第二行和第三行都是a 2, 那么对C 这一列同样的操作,但是看到C 这一列中第二行是a 3 ,那么就将第三行改成a 3 ,优先级比b 要高。
 
A
B
C
D
E
AD
a 1
b 12
b 13
a 4
b 15
BC
b 21
a 2
a 3
b 24
b 25
BE
b 31
a 2
b 33 àa3
b 34
a 5
CDE
b 41
b 42
a 3
a 4
a 5
AE
a 1
b 52
b 13
b 54
a 5
 
对依赖C àD,C列的1,5行相等,D的1,5行也应该相等,D的第1行有a,所以b 54换成a 4;另外C列的2,3,4行也相等,D的2,3,4行也应该相等,D的第4行有a,所以将对应的行都换成a 4
 
A
B
C
D
E
AD
a 1
b 12
b 13
a 4
b 15
BC
b 21
a 2
a 3
b 24 àa4
b 25
BE
b 31
a 2
a 3
b 34 àa4
a 5
CDE
b 41
b 42
a 3
a 4
a 5
AE
a 1
b 52
b 13
b 54 àa4
a 5
 
 
对于DE àC, DE 公共的相等的行是3 4,5 行,对应C的3,4,5行也应该相等,故将C列的两个的b13换成a3 ,所以表格经过这个函数依赖关系,就是:  
 
A
B
C
D
E
AD
a 1
b 12
b 13 àa3
a 4
b 15
BC
b 21
a 2
a 3
a 4
b 25
BE
b 31
a 2
a 3
a 4
a 5
CDE
b 41
b 42
a 3
a 4
a 5
AE
a 1
b 52
b 13 àa3
a 4
a 5
 
对于CE àA, CE 的公共行是3 4 5 行,所以将A 3 4 5 行也对应相等,因为A 列的第五行含有a 1 ,所以将3 4 行的b 31,b 41 都换成 a1
 
最终得到的表格就是:
 
 最后,我们从表格里看到对于DE行来说,都是a,所以得出结论,题中的分解是无损联接分解
 
********************
 
无损分解的一个简便的判别方法(适用于分解成2个关系的情况)
 
譬如:
有关系R=ABC, 依赖关系{A-->B}那么下面哪个是无损分解:
 
A. {R 1(AB),R 2(AC)} 
B.{R 1(AB),R 3(BC)}
 
首先看选项A,R 1∩R 2=A,R 1-R 2=B,R 1U R 2-->(R 1-R 2).所以它是无损分解
选项B, R 1∩R 2=B, R 1-R 2=A, R 2-R 1=C,
所以它不是无损分解
 
那么这里快速判断无损分解的方法就是
对两个集合先求集合的∩,然后求集合的差(2个集合有两个差的结果)
如果集合的∩-->集合的差(得到差结果的任意一个)成立那么就是无损分解
本文出自 “ 李骥平” 博客,请务必保留此出处 http://fsjoy.blog.51cto.com/318484/137130

你可能感兴趣的:(分解,联接,无损)