数据库中的模式分解与无损连接性
無損連接分解的普通判別方法——表格法
設(shè)關(guān)系模式R=A1,…,An,R上成立的FD集F,R的一個分解p={R1,…,Rk}。無損連接分解的判斷步驟如下:
(1)構(gòu)造一張k行n列的表格,每列對應(yīng)一個屬性Aj(1≤j≤n),每行對應(yīng)一個模式Ri(1≤i≤k)。如果Aj在Ri中,那么在表格的第i行第j列處填上符號aj,否則填上符號bij。
(2)把表格看成模式R的一個關(guān)系,反復(fù)檢查F中每個FD在表格中是否成立,若不成立,則修改表格中的元素。修改方法如下:對于F中一個FD:X→Y,如果表格中有兩行在X分量上相等,在Y分量上不相等,那么把這兩行在Y分量上改成相等。如果Y的分量中有一個是aj,那么另一個也改成aj;如果沒有aj,那么用其中的一個bij替換另一個(盡量把ij改成較小的數(shù),亦即取i值較小的那個)。
若在修改的過程中,發(fā)現(xiàn)表格中有一行全是a,即a1,a2,…,an,那么可立即斷定p相對于F是無損連接分解,此時不必再繼續(xù)修改。若經(jīng)過多次修改直到表格不能修改之后,發(fā)現(xiàn)表格中不存在有一行全是a的情況,那么分解就是有損的。特別要注意,這里有個循環(huán)反復(fù)修改的過程,因為一次修改可能導(dǎo)致表格能繼續(xù)修改。
修改過程中要特別注意,若某個bij被改動,那么它所在列的所有bij都需要做相應(yīng)的改動。為了明確這一點,舉例說明。例如,我們根據(jù)FD“H→I”、“ K→L”來修改表格之前時的表格如表1所示(已經(jīng)過多次修改,非初始表,空的單元表示省略):
表1
| ?????? ? | ?? H? | ????? I???? | ?? J???? | ??? K??? | ?? L????? | 
| R1 | ? | b12 | ? | ? | b35 | 
| R2 | a1 | a2 | ? | a4 | b25 | 
| R3 | a1 | b12 | ? | a4 | b35 | 
| R4 | ? | b12 | ? | ? | b35 | 
R2、R3所在行的H分量都為a1,根據(jù)FD“H→I”,需要修改這兩行對應(yīng)的I分量,而R2所在行的I分量為a2,因此,要將R3所在行的I分量b12修改為a2,注意到,R1、R4所在行的H分量也為b12,因此,這兩行對應(yīng)的I分量也必須修改為a2。R2、R3所在行的K分量都為a4,根據(jù)FD“K→L”,需要修改這兩行對應(yīng)的L分量,于是將R3所在行的L分量b35修改為較小的b25,同時注意到,R1、R4所在行的L分量也為b35,因此,這兩行對應(yīng)的L分量也必須修改為b25。修改后的表格如表2所示:
表2
| ??????? | ? H? | ? I? | ? J? | ? K? | ?? L? ?? | 
| R1 | ? | a2 | ? | ? | b25 | 
| R2 | a1 | a2 | ? | a4 | b25 | 
| R3 | a1 | a2 | ? | a4 | b25 | 
| R4 | ? | a2 | ? | ? | b25 | 
【例題】(軟件設(shè)計師2002年上午試題38)
設(shè)關(guān)系模式?R為?R(H,I,J,K,L),R上的一個函數(shù)依賴集為?F={H→J,J→K,I→J,JL→H},分解?(38)?是無損連接的。
供選擇的答案:
(38) A. p={HK,HI,IJ,JKL,HL} B. p={HIL,IKL,IJL}
C. p={HJ,IK,HL} D. p={HI,JK,HL}
試題分析:
根據(jù)上述判斷方法,我們列出選項B(分解成三個關(guān)系模式R1(HIL)、R2(IKL)、R3(IJL) )的初始表如表3所示:
表3選項B的初始表
| ????????? | ?? H? | ?? I?? | ????J?? | ??? K?? | ?? L? | 
| HIL | a1 | a2 | b13 | b14 | a5 | 
| IKL | b21 | a2 | b23 | a4 | a5 | 
| IJL | b31 | a2 | a3 | b34 | a5 | 
對于函數(shù)依賴集中的H→J、J→K對表3進(jìn)行處理,由于屬性列H和屬性列J上無相同的元素,所以無法修改。但對于I→J在屬性列I上對應(yīng)的1、2、3行上全為a2元素,所以,將屬性列J的第一行b13和第二行b23改為a3。修改后如表4所示:
?
表4選項B的中間表
| ?????????? | ???? H?? | ?? I? | ?? J? | ??? K? | ??? L? | 
| HIL | a1 | a2 | a3 | b14 | a5 | 
| IKL | b21 | a2 | a3 | a4 | a5 | 
| IJL | b31 | a2 | a3 | b34 | a5 | 
對于函數(shù)依賴集中的JL→H在屬性列J和L上對應(yīng)的1、2、3行上為a3、a5元素,所以,將屬性列H的第二行b21和第三行b31改為a1。修改后如表5所示:
表5選項B的結(jié)果表
| ?????????? | ?? H?? | ??? I?? | ??? J?? | ??? K?? | ?? L?? | 
| HIL | a1 | a2 | a3 | b14 | a5 | 
| IKL | a1 | a2 | a3 | a4 | a5 | 
| IJL | a1 | a2 | a3 | b34 | a5 | 
從表5可以看出,第二行為a1、a2、a3、a4、a5,所以分解p是無損的。
有一種特殊情況要注意:分解后的各個關(guān)系模式兩兩均無公共屬性。由于是模式分解,那么任一一個分解后的關(guān)系模式覆蓋的屬性集不可能是分解前的整個全部屬性U,因此初始表中不存在全是a的行。又注意到,分解后的各個關(guān)系模式兩兩均無公共屬性,表明任兩行在任一列上都沒有相同的分量,這導(dǎo)致整個表格無法修改,保持初始狀態(tài)。而初始狀態(tài)不存在全是a的行,因此這種特殊情況的分解是有損的。
例如,函數(shù)依賴集合FD,將關(guān)系模式R(ABCDEF)分解成R1(AB)、R2(CDE)、R3(F),那么這種分解肯定是有損的。考試中可能碰到這種情況,那么一眼就可以判斷出結(jié)果,從而節(jié)省了時間。
3.無損連接分解的快捷判別方法
首先要申明,這種快捷方法是有前提的,前提就是分解后的關(guān)系模式只有兩個。其內(nèi)容為:
設(shè)ρ={R1,R2}是R的一個分解,F是R上的FD集,那么分解ρ相對于F是無損分解的充分必要條件是:(R1∩R2)→(R1–R2)或(R1∩R2)→(R2–R1)。這個“或”字很重要,這里表示(R1∩R2)→(R1–R2)、(R1∩R2)→(R2–R1)中只要有一個成立就行。這里的求交和相減運(yùn)算的對象是關(guān)系模式的屬性。
【例題】
關(guān)系模式R(U,F),其中U={W,X,Y,Z},F={WX→Y,W→X, X→Z,Y→W}。那么下列分解中是無損分解的是。
供選擇的答案:
A.p={R1(WY),R2(XZ)} B.p={R1(WZ),R2(XY)}
C.p={R1(WXY),R2(XZ)} D.p={R1(WX),R2(YZ)}
試題分析:
A選項,R1∩R2為空,肯定不滿足條件。
B選項,R1∩R2為空,肯定不滿足條件。
C選項,R1∩R2={X},R1-R2={WY},R2-R1={Z},根據(jù)函數(shù)依賴集,X→Z成立,所以滿足條件。
D選項,R1∩R2為空,肯定不滿足條件。
4.總結(jié)
模式分解無損性判別的源泉仍然是普通的表格法。這種快捷方法只不過是根據(jù)這種表格法推斷出來的而已,是它的一個特列。但是這種快捷方法卻往往非常有用。
?
總結(jié)
以上是生活随笔為你收集整理的数据库中的模式分解与无损连接性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: JanusGraph: 可视化 Geph
- 下一篇: tensorflow2.0学习(一)
