批評一下自己,昨天又貪玩了,啥都沒乾。於是今天好好努力,將昨天的那份補上。
這幾天做了幾份資料庫方面的試題,其他的沒什麼好說的,在無損分解這裡每次都不知道怎麼做。主要原因是書上對這一塊講解很少,我基本上沒怎麼注意就略過了。但是這幾天做了幾套試題,幾乎每套都有關於無損分解的試題,讓我不得不重視了起來。
首先,什麼叫無損分解。無損分解就是將乙個關係模式分解成若干個關係模式後,通過自然連線或投影等運算仍能還原到原來的關係模式。
以下的論述都基於這樣乙個前提:
r是具有函式依賴集f的關係模式,(r1 ,r2)是r的乙個分解。
首先我們給出乙個看似無關卻非常重要的概念:屬性集的閉包。
令α為一屬性集。我們稱在函式依賴集f下由α函式確定的所有屬性的集合為f下α的閉包,記為α+ 。
下面給出乙個計算α+的演算法,該演算法的輸入是函式依賴集f和屬性集α,輸出儲存在變數result中。
演算法一:
result:=α;
while(result發生變化)do
for each 函式依賴β→γ in f do
begin
if β∈result then result:=result∪γ;
end屬性集閉包的計算有以下兩個常用用途:
·判斷α是否為超碼,通過計算α+(α在f下的閉包),看α+ 是否包含了r中的所有屬性。若是,則α為r的超碼。
·通過檢驗是否β∈α+,來驗證函式依賴是否成立。也就是說,用屬性閉包計算α+,看它是否包含β。
(請原諒我用∈符號來表示兩個集合之間的包含關係,那個表示包含的符號我找不到,大家知道是什麼意思就行了。)
看乙個例子吧,2023年11月係分上午37題:
● 給定關係r(a1,a2,a3,a4)上的函式依賴集f=,r的候選關鍵字為________。
(37)a. a1 b. a1a3 c. a1a3a4 d. a1a2a3
首先我們按照上面的演算法計算a1+ 。
result=a1,
由於a1→a2,a1∈result,所以result=result∪a2=a1a2
由於a2→a3,a2∈result,所以result=result∪a3=a1a2a3
由於a2→a4,a2∈result,所以result=result∪a3=a1a2a3a4
由於a3→a2,a3∈result,所以result=result∪a2=a1a2a3a4
通過計算我們看到,a1+ =result=,所以a1是r的超碼,理所當然是r的候選關鍵字。此題選a 。
好了,有了前面的鋪墊,我們進入正題。
無損分解的判斷。
如果r1∩r2是r1或r2的超碼,則r上的分解(r1,r2)是無損分解。這是乙個充分條件,當所有的約束都是函式依賴時它才是必要條件(例如多值依賴就是一種非函式依賴的約束),不過這已經足夠了。
保持依賴的判斷。
如果f上的每乙個函式依賴都在其分解後的某乙個關係上成立,則這個分解是保持依賴的(這是乙個充分條件)。
如果上述判斷失敗,並不能斷言分解不是保持依賴的,還要使用下面的通用方法來做進一步判斷。
該方法的表述如下:
演算法二:
對f上的每乙個α→β使用下面的過程:
result:=α;
while(result發生變化)do
for each 分解後的ri
t=(result∩ri)+ ∩ri
result=result∪t
這裡的屬性閉包是在函式依賴集f下計算出來的。如果result中包含了β的所有屬性,則函式依賴α→β。分解是保持依賴的當且僅當上述過程中f的所有依賴都被保持。
下面給出乙個例題,2023年5月係分上午43題:
●設關係模式r,其中u={a, b, c, d, e},f=,計算c+。
result=c
由於c→d,c∈result,所以result=result∪d=cd
可見c是r2的超碼,該分解是乙個無損分解。
再做保持依賴的判斷。
a→bc,bc→e, e→a都在r1上成立(也就是說每乙個函式依賴左右兩邊的屬性都在r1中),c→d在r2上成立,因此給分解是保持依賴的。
選a。再看乙個複雜點的例題。2023年5月數工40-41題。
●給定關係模式r,u={a, b, c, d, e},f=
(abe)+ =
(acd)+ =
(cd)+ =
選d。再看第二問。
先做無損鏈結的判斷。r1∩r2=,計算c+。
result=c
因此c既不是r1也不是r2的超碼,該分解不具有無損分解性。
再做保持依賴的判斷。
b→a,a→e,ac→b在r1上成立,d→a在r1和r2上都不成立,因此需做進一步判斷。
由於b→a,a→e,ac→b都是被保持的(因為它們的元素都在r1中),因此我們要判斷的是d→a是不是也被保持。
對於d→a應用演算法二:
result=d
對r1,result∩r1=ф(空集,找不到空集的符號,就用這個表示吧),t=ф,result=d
再對r2,result∩r2=d,d+ =ade ,t=d+ ∩r2=d,result=d
乙個迴圈後result未發生變化,因此最後result=d,並未包含a,所以d→a未被保持,該分解不是保持依賴的。
選d。
資料庫 無損分解和保持依賴
以下的論述都基於這樣乙個前提 r是具有函式依賴集f的關係模式,r1 r2 是r的乙個分解。首先我們給出乙個看似無關卻非常重要的概念 屬性集的閉包。令 為一屬性集。我們稱在函式依賴集f下由 函式確定的所有屬性的集合為f下 的閉包,記為 下面給出乙個計算 的演算法,該演算法的輸入是函式依賴集f和屬性集 ...
資料庫中的無損連線分解和是否保持函式依賴的判定
首先了解一下幾個概念 1 把乙個關係模式分解成若干個關係模式的過程,稱為關係模式的分解。2 把低一級的關係模式分解為若干個高一級的關係模式的方法不是唯一的。3 只有能夠保證分解後的關係模式與原關係模式等價,分解方法才有意義。對於第一句話,為什麼需要分解關係模式?因為原來的關係模式可能造成資料冗餘或 ...
3NF的無損連線和保持函式依賴的分解
總結 先求最小覆蓋,再求碼,然後根據左部相同原則劃分關係,將上述劃分的再根據是否有包含關係進行合併,最後若關係中包含之前求的碼,那麼這個關係就是要求的分解,否則再加上乙個關係,將碼放入其中。以下 自 例一 設關係模式r a,b,c,d,e 上的函式依賴集f是 1 計算f的最小覆蓋。首先將右部不唯一的...