1、把一個關系模式分解成若干個關系模式的過程,稱為關系模式的分解。
2、定義
關系模式R<U,F>的分解是指R為它的一組子集 ρ={R1<U1,F1>, R2<U2,F2>,…, Rk<Uk,Fk>}所代替的過程。 其中U=U1∪U2∪...∪k ,並且沒有Ui≤Uj(表Ui包含於Uj,1≤i,j≤k), Fi是F在Ui上的投影,即Fi={X→Y∈F+∧XY≤Ui}(表XY包含於Ui)。 例4.4.1: 將R=(ABCD,{A→B,B→C,B→D,C→A})分解為 關於U1=AB,U2=ACD兩個關系,求R1,R2。
解: R1=(AB,{A→B,B→A}) R2=(ACD,{A→C,C→A,A→D})
3、關系模式分解必須遵守兩個准則 (1)無損聯接性:信息不失真(不增減信息)。 (2)函數依賴保持性:不破壞屬性間存在的依賴關系。
|
1、定義
設F是關系模式R的函數依賴集
ρ={R
1<U
1,F
1>, R
2<U
2,F
2>,…,R
k<U
k,F
k>}
是R的一個分解,
如果R的滿足F的任一個關系r均有:r=mρ(r), 則稱分解ρ具有無損聯接性。
2、引理 設ρ={R1<U1,F1>, R2<U2,F2>,…,Rk<Uk,Fk>} 為關系模式R的一個分解,r為R的任一個關系,ri=πUi(r), 則: ① r≤mρ(r)(表r包含於mρ(r)) ② 如果s=mρ(r) ,則πUi(s)=ri ③ mρ(mρ(r))=mρ(r)
證: ①設t為關系r的任一元組,ti=t[ui]∈ri(i=1,2,…,k), 根據自然連接的定義,t1,t2,…,ti∈ πUi(r),即t∈mρ(r), 所以有r≤mρ(r)(表包含於mρ(r))。 ②、③的證明參看P121。
結論:分解后的關系做自然聯接必包含分解前的關系, 即分解不會丟失信息,但可能增加信息, 只有r=mρ(r)時,分解才具有無損聯接性。
例4.4.2:設ρ(r),由此可得到什么結論? 解: 結論:分解不具有無損聯接性。
3、為什么要進行關系分解 一個關系模式分解后,可以存放原來所不能存放的信息, 通常稱為“懸掛”的元組,這是實際所需要的,正是分解的優點。 在做自然聯接時,這類懸掛元組自然丟失了, 但不是信息的丟失,而是合理的。 4、檢驗分解無損聯接性的算法 設有關系模式R(A1,A2,…,An), F為它的函數依賴集, ρ={R1,R2,…,Rk}為R的一個分解。
算法:
(1)構造初始表: 構造一個k行n列的初始表,其中每列對應於R的一個屬性, 每行用於表示分解后的一個模式組成。 如果屬性Aj屬於關系模式Ri, 則在表的第一i行第j列置符號aj, 否則置符號bij 。
(2)根據F中的函數依賴修改表內容: 考察F中的每個函數依賴X→Y,在屬性組X所在的那些列上 尋找具有相同符號的行,如果找到這樣的兩行或更多的行, 則修改這些行,則使這些行上屬性組Y所在的列上元素相同。 修改規則是:如果y所在的要修改的行中有一個為aj, 則這些元素均變成aj;否則改動為bmj(其中m為這些行的最小行號)。
注意:若某個bij被改動,則該列中凡是與bij相同的符號均做相同的改動。 循環地對F中的函數依賴進行逐個處理,直到發現表中有一行 變為a1,a2,…an或不能再被修改為止。
(3)判斷分解是否為無損聯接: 如果通過修改,發現表中有一行變為a1,a2,…an, 則分解是無損聯接的,否則分解不具有無損聯接性。
算法實現: 輸入:關系R上的屬性集U={A1,A2,…,Ak} , R上的函數依賴集F, R的分解ρ={R1,R2,…,Rk}。 輸出:如果ρ為無損分解則為真,否則為假。
Lossless(R,F,ρ) { 構造初始表Rρ change=真; while (change) { for (F中的每個函數依賴X→Y) { if(Rρ中ti1[X]=ti2[X]=…=tim[X]) {將ti1[Y],ti2[Y]=,…,tim[Y]改為相同} if (Rρ中有一行為a1,a2,…an) {return 真;} } if (修改后的表Rρ=修改前的表Rρ ) {chang=假;} } if (Rρ中有一行為a1,a2,…an){return 真;} else {return 假;} }
例4.4.3:關系模式R(SAIP),F={S→A,SI→P},ρ={R1(SA),R2(SIP)}, 檢驗分解是否為無損聯接。 通過修改發現表中第二行元素變為a1,a2,…,an,分解是無損聯接。
例4.4.4:已知關系模式R(ABCDE)及函數依賴集F={A→C,B→C,C→D,DE→C,CE→A} 驗證分解ρ={R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE)}是否為無損聯接。 通過修改發現表中第三行元素變為a1,a2,…,an,分解是無損聯接。
練習4.4.1: 已知關系模式R(U,F) , U={SNO,CNO,GRADE,TNAME,TAGE,OFFICE}, F={(SNO,CNO)→GRADE,CNO→TNAME,TNAME→(TAGE,OFFICE)}, 以及R上的兩個分解 ρ1={SC,CT,TO}, ρ2={SC,GTO}, 其中SC={SNO,CNO,GRADE},CT={CNO,TNAME},TO={TNAME,TAGE,OFFICE}, GTO={GRADE,TNAME,TAGE,OFFICE}。 試檢驗ρ1,ρ2的無損聯接性。
答案: ρ1是無損分解,ρ2不是無損分解。
5、定理4.4.1 檢驗分解無損聯接性的算法,能夠正確判定一個分解 是否具有無損聯接性。(證明:參看課本P124)
6、定理4.4.2 設ρ={R1, R2}是關系模式R的一個分解,F是R的函數依賴集, 那么ρ是R(關於F)的無損分解的充分必要條件是: (R1∩R2)→R1-R2∈F+ 或 (R1∩R2)→R2-R1∈F+ (證明:參看課本P124)
例4.4.5:關系模式R(SAIP),F={S→A,SI→P},ρ={R1(SA),R2(SIP)} 檢驗分解是否為無損聯接?
解:R1∩R2=SA∩SIP=S R1-R2=SA-SIP=A,S→A∈F,所以ρ是無損分解。
7、定理4.4.3(逐步分解定理——關系模式可以逐步進行分解) 設F是關系模式R的函數依賴集,ρ={R1,R2,…,Rk}是R關於F的一個無損聯接。
分解:
(1)若σ={S1,S2,…,Sm}是Ri關於Fi的一個無損聯接分解,則 ε={R1,…,Ri-1,S1,S2,…,Sm,Ri+1,…,Rk}是R關於F的無損聯接分解。 其中Fi=πRi(F)。
(2)設τ={R1,…,Rk,Rk+1,…,Rn}是R的一個分解,其中τ≥ρ(表τ包含ρ) , 則τ也是R關於F的無損聯接分解。
有關系模式R(A,B,C), ρ={R1,R2}為它的一個分解, 其中R1=AB,R2=BC,r為R的一個關系,r1=πR1(r),r2=πR2(r), 求r1,r2,m |
1、定義 設F是關系模式R的函數依賴集, ρ={R1<U1,F1>, R2<U2,F2>,…, Rk<Uk,Fk>}為R的一個分解, 如果Fi=πRi(F)的並集(F1∪F2∪…∪Fk)≡F(i=1,2,…,k) 則稱分解ρ具有函數依賴保持性。
2、例題與練習
例4.4.6:將R=(ABCD,{A→B,B→C,B→D,C→A})分解為 關於U1=AB,U2=ACD兩個關系,求R1、R2, 並檢驗分解的無損聯接性和分解的函數依賴保持性。
解:F1=πR1(F)={A→B,B→A}, F2=πR2(F)={A→C,C→A,A→D} R1=(AB,{A→B,B→A}) R2=(ACD,{A→C,C→A,A→D}) U1∩U2=AB∩ACD=A, U1-U2=AB-ACD=B,A→B∈F, 所以ρ是無損分解; F1UF2={A→B,B→A,A→C,C→A,A→D}≡{A→B,B→C,B→D,C→A}=F 所以ρ是函數依賴保持性。
例4.4.7:關系模式R(A,B,C,D) 函數依賴集F={A→B,C→D},ρ={R1(AB),R2(CD)} 求R1,R2 ,並檢驗分解的無損聯接性和分解的函數依賴保持性。
解:F1=πR1(F)={A→B}, F2=πR2(F)={C→D} R1(AB,{A→B}), R2(Cd,{C→D}) U1∩U2=AB∩CD=Φ, U1-U2=AB, U2-U1=CD, Φ→AB F, Φ→CD F, 所以ρ不是無損分解。
練習4.4.2:已知關系模式R(CITY,ST,ZIP), F={(CITY,ST)→ZIP,ZIP→CITY} 以及R上的一個分解ρ={R1, R2}, R1 ={ST,ZIP}, R2 ={CITY,ZIP} 求R1,R2 ,並檢驗分解的無損聯接性和分解的函數依賴保持性。
答案:R1=({ST,ZIP},{Φ}) R2=(CITY,ZIP,{ZIP→CITY}) ρ是無損分解,但不具有函數依賴保持性。 |