1. 程式人生 > >關係模式的分解與函式依賴模式的判斷

關係模式的分解與函式依賴模式的判斷

一:候選鍵的判斷

屬性集的閉包: 令α為一屬性集。我們稱在函式依賴集F下由α函式確定的所有屬性的集合為F下α的閉包,記為α+ 。

下面給出一個計算α+的演算法,該演算法的輸入是函式依賴集F和屬性集α,輸出儲存在變數result中。

演算法:

result=α;
while(result發生變化)do
    for each 函式依賴β→γ in F do
    begin
        if β∈result then result=(result∪γ);
    end

       此演算法是要算出α屬性所能決定的所有屬性是那些,包括傳遞依賴的屬性,如主鍵所能決定的是整個表的所有屬性。例如

α->ββ->γβ->δ、δ->θ,此演算法能算出屬性為:βγβ、δ、θ}

屬性集閉包的計算有以下兩個常用用途:
1.判斷α是否為超碼 : 通過計算α+(α在F下的閉包),看α+ 是否包含了R中的所有屬性。若是,則α為R的超碼。
2.通過檢驗是否β∈α+,來驗證函式依賴是否成立。也就是說,用屬性閉包計算α+,看它是否包含β。

 例題:

給定關係R(A1,A2,A3,A4)上的函式依賴集F={A1→A2,A3→A2,A2→A3,A2→A4},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∪A4=A1A2A3A4
由於A3→A2,A3∈result,所以result=result∪A2=A1A2A3A4

通過計算我們看到,A1+ =result={A1A2A3A4},所以A1是R的超碼,理所當然是R的候選關鍵字。此題選A 。

二  無損分解的判斷。
如果R1∩R2是R1或R2的超碼,則R上的分解(R1,R2)是無損分解。這是一個充分條件。

例題:

●設關係模式R<U, F>,其中U={A, B, C, D, E},F={A→BC,C→D,BC→E,E→A},則分解ρ={R1(ABCE),R2(CD)}滿足 (43)

A.具有無損連線性、保持函式依賴
             B.不具有無損連線性、保持函式依賴
             C.具有無損連線性、不保持函式依賴
             D.不具有無損連線性、不保持函式依賴
 

step1: R1∩R2={C} 

step2: 計算C+。

解:

R1∩R2=result=c

由於C→D,C∈result,所以result=result∪D=CD
可見C是R2的超碼,該分解是一個無損分解。
 

三   保持依賴的判斷。
如果F上的無論那個函式依賴都能在其分解後的若干個關係中找到一個關係,並且該函式依賴在此關係上成立,則這個分解是保持依賴的(這是一個充分條件),即F上全部函式依賴都能在分解後的關係上成立。如果上述判斷失敗,並不能斷言分解不是保持依賴的,還要使用下面的通用方法來做進一步判斷。

例如:

··· 給定關係模式R<U, F>,U={A,B, C, D, E},F={B→A,D→A,A→E,AC→B},其候選關鍵字為,則分解ρ={R1(ABCE),R2(CD)}滿足。
      A.ABD         B.ABE        C.ACD D.CD

A.具有無損連線性、保持函式依賴
                B.不具有無損連線性、保持函式依賴
               C.具有無損連線性、不保持函式依賴
               D.不具有無損連線性、不保持函式依賴

對於第一問,分別計算ABCD四個選項的閉包,
(ABD)+ = { ABDE }
(ABE)+ = { ABE }
(ACD)+ = { ABCDE }
(CD)+ = { ABCDE }
選D。

再看第二問。
先做無損連結的判斷。R1∩R2={C},計算C+。

result=C
因此C既不是R1也不是R2的超碼,該分解不具有無損分解性。


再做保持依賴的判斷。
B→A,A→E,AC→B在R1上成立,D→A在R1和R2上都不成立,因此需做進一步判斷。
 

由於B→A,A→E都是被保持的(因為它們的元素都在R1中),因此我們要判斷的是D→A,AC→B是不是也被保持。

對於D→A應用演算法二:
result=D
對R1,result∩R1=ф(空集,找不到空集的符號,就用這個表示吧),t=ф,result=D
再對R2,result∩R2=D,D+ =ADE ,t=D+ ∩R2=D   (D+ =ADE表示resultR2的閉包值為ADE,用演算法一計算得到)
一個迴圈後result未發生變化,因此最後result=D,並未包含A,所以D→A未被保持,該分解不是保持依賴的。

選D。

在以下給定的關係模式分解中,D→A的依賴是保持下來的:

給定關係模式R<U, F>,U={A, B, C, D, E,h},F={B→A,D→A,A→E,AC→B,dh,hb},則分解ρ={R1(ABCE),R2(CDh),(abh)

原因是:D→H,H→B,B→A,所以D→A成立。

總結:

函式依賴:

X → YY→Z ”→” 符號左右兩邊的屬性XY必須在同一個關係①中XY的依賴關係才能成立,YZ必需在同一個關係②中YZ的依賴關係才能成立,但XZ卻可以不必在同一個關係中,函式的傳遞依賴關係還是被傳遞保持下來的,即X→Z仍然是成立,即關係①中的X仍能決定關係②中的Z

若在關係中有四個屬性(ABCD),如果存在如下函式依賴:A→BB→C ;關係如果被分解為若干個關係,其中的一個關係是(AC),則在關係(AC)中A→C仍能成立,即函式依賴A→C在關係(AC)中被保留下來。