軟考數據庫-無損聯接分解


定義:無損聯接分解是將一個關系模式分解成若干個關系模式后,通過自然聯接和投影等運算仍能還原到原來的關系模式,則稱這種分解為無損聯接分解。  
例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
a1
b 12
b 13
a4
b 15
BC
b 21
a2
a3
b 24
b 25
BE
b 31
a2
b 33
b 34
a5
CDE
b 41
b 42
a3
a4
a5
AE
a1
b 52
b 53
b 54
a5
 
表1
(A B C D E是關系R的屬性, AD, BC, BE, CDE, AE 是分解之后每一個關系對應的屬性集)
 
填表的過程:
當橫豎相交的時候,如果在分解關系中存在對應列的單個的屬性(譬如第一列第一行AD與A相交的單元格,AD含有A,就填寫a 1),則填寫a 下標  , 下標就是單元格對應所在的列號。否則填寫b下標, 下標是單元格對應所在的行列號。
填寫之后的初始表就是表1所示
2.根據依賴關系修改原始表:
對於依賴關系A->C,看A列中有兩行a1是相等的(第一行和第五行),所以在C列中對應的兩行也應該相等,但是看到這兩行都是b(b13,b53),所以將這個b都換成b13(上面的較小的標)
 
 
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
b53b 13
b 54
a 5
對於依賴B->C, 同樣的道理,看B這一列中,第二行和第三行都是a2,那么對C這一列同樣的操作,但是看到C這一列中第二行是a3,那么就將第三行改成a3,優先級比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
b33a 3
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,所以b54換成a4;另外C列的2,3,4行也相等,D的2,3,4行也應該相等,D的第4行有a,所以將對應的行都換成a4
 
A
B
C
D
E
AD
a 1
b 12
b 13
a 4
b 15
BC
b 21
a 2
a 3
b24a 4
b 25
BE
b 31
a 2
a 3
b34a 4
a 5
CDE
b 41
b 42
a 3
a 4
a 5
AE
a 1
b 52
b 13
b54a 4
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
b13a 3
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
b13a 3
a 4
a 5
 
對於CE->A, CE的公共行是3,4,5行,所以將A的3,4,5行也對應相等,因為A列的第五行含有a1,所以將1行的b31換成a3
 
最終得到的表格就是:
 
 
 最后,我們從表格里看到對於DE行來說,都是a,所以得出結論,題中的分解是無損聯接分解
 
********************
 
無損分解的一個簡便的判別方法(適用於分解成2個關系的情況)
 
譬如:
有關系R=ABC, 依賴關系{A-->B}那么下面哪個是無損分解:
 
A. {R1(AB),R2(AC)} 
B.{R1(AB),R3(BC)}
 
首先看選項A,R1∩R2=A,R1-R2=B,R1U R2-->(R1-R2).所以它是無損分解
選項B, R1∩R2=B, R1-R2=A, R2-R1=C,
所以它不是無損分解
 
那么這里快速判斷無損分解的方法就是
對兩個集合先求集合的∩,然后求集合的差(2個集合有兩個差的結果)
如果集合的∩-->集合的差(得到差結果的任意一個)成立那么就是無損分解
其它問題請加我的微信:x7993794, 可加入我的軟考數據庫微信群一起討論
(本文出自 “李驥平” 博客)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM