最近重新複習資料庫的時候再次被正規化這一塊搞暈了,跟之前期末考試的時候一摸一樣,弄了大半天可算是有點小明白,記錄一下。
無損鏈結的判定書上給的方法是畫圖,但是沒有例題詳細講解。書上的演算法如下。
ρ=是關係模式r的乙個分解,u=,f=,並設f是乙個最小依賴集,記fdi為xi→alj,其步驟如下:但演算法過於複雜難以理解,結合例題去理解較為簡單。例題如下① 建立一張n列k行的表,每一列對應乙個屬性,每一行對應分解中的乙個關係模式。若屬性aj ui,則在j列i行上真上aj,否則填上bij;
②對於每乙個fdi做如下操作:找到xi所對應的列中具有相同符號的那些行。考察這些行中li列的元素,若其中有aj,則全部改為aj,否則全部改為bmli,m是這些行的行號最小值。
如果在某次更改後,有一行成為:a1,a2,…,an,則演算法終止。且分解ρ具有無損連線性,否則不具有無損連線性。
對f中p個fd逐一進行一次這樣的處理,稱為對f的一次掃瞄。
③ 比較掃瞄前後,表有無變化,如有變化,則返回第②
步,否則演算法終止。如果發生迴圈,那麼前次掃瞄至少應使該錶減少乙個符號,表中符號有限,因此,迴圈必然終止
已知r, u=, f=,r的乙個分解為r1, r2, r3,判斷該分解是否具有無損鏈結性。
1首先建立乙個n列k行的**,其中n為屬性個數(n=5),k為分解個數(k=3)。每一列對應乙個屬性。
分解模式r1包含abc三個屬性則在第一行的abc三列上面填寫a1,a2,a3
分解模式r2包含cd兩個屬性,則在第二行cd兩列上面填寫a3,a4,
分解模式r3包含de兩個屬性,則在第三行de兩列上面填寫a4,a5
aj分別對應屬性在u中的位置如a-a1,b-a2,c-a3,d-a4,e-a5。ab
cdea1
a2a3
b14b15
b21b22
a3a4
b25b31
b32b33
a4a5
2觀察每乙個函式依賴fdi(x->y),找到其xi所對應的列中具有相同符號的那些行,考察這些行中y列的元素。
觀察 ab->c, 觀察表中ab兩列是否具有相同的符號。
顯然並沒有相同的符號。
觀察c->d,觀察表中c列是否具有相同的符號。
顯然前兩行都為a3,故觀察此兩行中d列的值,乙個為a4,乙個為b14,根據演算法將此兩行d列的值全部更改為a4,則有ab
cdea1
a2a3
a4b15
b21b22
a3a4b25
b31b32
b33a4
a5觀察d->e,觀察表中d列是否有相同的符號,顯然d列值全部為a4,故觀察e列三行中的值是否有aj,若有(最後一行為a5),則全部更改為aj,否則全部改為bij(i為行數最小值,若要修改則為b15)。故將e列全部修改為a5。
此時圖表如下ab
cdea1
a2a3
a4a5
b21b22
a3a4a5
b31b32
b33a4
a5此時表中已有一行被修改為a1,a2,a3,…an。故演算法終止,該分解具有無損鏈結。否則不具有無損鏈結性。
資料庫概論之無損分解
無損分解指的是對關係模式分解時,原關係模型下任一合法的關係值在分解之後應能通過自然聯接運算恢復起來。反之,則稱為有損分解。設r是乙個關係模式,f是r上的乙個依賴集,r分解為關係模式的集合p 如果對於r中滿足f的每乙個關係r,都有r r1 r r2 r rn r 則稱分解相對於f是無損連線分解,否則有...
資料庫 無損分解和保持依賴
以下的論述都基於這樣乙個前提 r是具有函式依賴集f的關係模式,r1 r2 是r的乙個分解。首先我們給出乙個看似無關卻非常重要的概念 屬性集的閉包。令 為一屬性集。我們稱在函式依賴集f下由 函式確定的所有屬性的集合為f下 的閉包,記為 下面給出乙個計算 的演算法,該演算法的輸入是函式依賴集f和屬性集 ...
資料庫 無損分解和保持依賴的判斷
批評一下自己,昨天又貪玩了,啥都沒乾。於是今天好好努力,將昨天的那份補上。這幾天做了幾份資料庫方面的試題,其他的沒什麼好說的,在無損分解這裡每次都不知道怎麼做。主要原因是書上對這一塊講解很少,我基本上沒怎麼注意就略過了。但是這幾天做了幾套試題,幾乎每套都有關於無損分解的試題,讓我不得不重視了起來。首...