以下的論述都基於這樣乙個前提:
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的超碼。
·通過檢驗β是否在α+裡,來驗證函式依賴是否成立。也就是說,用屬性閉包計算α+,看它是否包含β。
● 給定關係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的所有依賴都被保持。
●設關係模式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。●給定關係模式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。
資料庫 無損分解和保持依賴的判斷
批評一下自己,昨天又貪玩了,啥都沒乾。於是今天好好努力,將昨天的那份補上。這幾天做了幾份資料庫方面的試題,其他的沒什麼好說的,在無損分解這裡每次都不知道怎麼做。主要原因是書上對這一塊講解很少,我基本上沒怎麼注意就略過了。但是這幾天做了幾套試題,幾乎每套都有關於無損分解的試題,讓我不得不重視了起來。首...
資料庫中的無損連線分解和是否保持函式依賴的判定
首先了解一下幾個概念 1 把乙個關係模式分解成若干個關係模式的過程,稱為關係模式的分解。2 把低一級的關係模式分解為若干個高一級的關係模式的方法不是唯一的。3 只有能夠保證分解後的關係模式與原關係模式等價,分解方法才有意義。對於第一句話,為什麼需要分解關係模式?因為原來的關係模式可能造成資料冗餘或 ...
資料庫概論之無損分解
無損分解指的是對關係模式分解時,原關係模型下任一合法的關係值在分解之後應能通過自然聯接運算恢復起來。反之,則稱為有損分解。設r是乙個關係模式,f是r上的乙個依賴集,r分解為關係模式的集合p 如果對於r中滿足f的每乙個關係r,都有r r1 r r2 r rn r 則稱分解相對於f是無損連線分解,否則有...