RiKeR

          本博客停止更新,最新內(nèi)容請訪問--> http://blog.csdn.net/shuailee

          統(tǒng)計

          留言簿(3)

          積分與排名

          閱讀排行榜

          評論排行榜

          無損分解和保持依賴的判斷

          大部分是對一個關(guān)系模式分解成兩個模式的考察,分解為三個以上模式時無損分解和保持依賴的判斷比較復(fù)雜,考的可能性不大,因此我們只對“一個關(guān)系模式分解成兩個模式”這種類型的題的相關(guān)判斷做一個總結(jié)。

          以下的論述都基于這樣一個前提:
          R是具有函數(shù)依賴集F的關(guān)系模式,(R1 ,R2)是R的一個分解。

          首先我們給出一個看似無關(guān)卻非常重要的概念:屬性集的閉包
          令α為一屬性集。我們稱在函數(shù)依賴集F下由α函數(shù)確定的所有屬性的集合為F下α的閉包,記為α+ 。
          下面給出一個計算α+的算法,該算法的輸入是函數(shù)依賴集F和屬性集α,輸出存儲在變量result中。
          算法一:
          result:=α;
          while(result發(fā)生變化)do
              for each 函數(shù)依賴β→γ in F do
              begin
                  if β∈result then result:=result∪γ;
              end

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

          (請原諒我用∈符號來表示兩個集合之間的包含關(guān)系,那個表示包含的符號我找不到,大家知道是什么意思就行了。)

          看一個例子吧,2005年11月系分上午37題:

          ● 給定關(guān)系R(A1,A2,A3,A4)上的函數(shù)依賴集F={A1→A2,A3→A2,A2→A3,A2→A4},R的候選關(guān)鍵字為________。
          (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={A1A2A3A4},所以A1是R的超碼,理所當(dāng)然是R的候選關(guān)鍵字。此題選A 。


          好了,有了前面的鋪墊,我們進(jìn)入正題。

          無損分解的判斷
          如果R1∩R2是R1或R2的超碼,則R上的分解(R1,R2)是無損分解。這是一個充分條件,當(dāng)所有的約束都是函數(shù)依賴時它才是必要條件(例如多值依賴就是一種非函數(shù)依賴的約束),不過這已經(jīng)足夠了。

          保持依賴的判斷
          如果F上的每一個函數(shù)依賴都在其分解后的某一個關(guān)系上成立,則這個分解是保持依賴的(這是一個充分條件)。
          如果上述判斷失敗,并不能斷言分解不是保持依賴的,還要使用下面的通用方法來做進(jìn)一步判斷。
          該方法的表述如下:
          算法二:
          對F上的每一個α→β使用下面的過程:
          result:=α;
          while(result發(fā)生變化)do
              for each 分解后的Ri
                  t=(result∩Ri)+ ∩Ri
                  result=result∪t

          這里的屬性閉包是在函數(shù)依賴集F下計算出來的。如果result中包含了β的所有屬性,則函數(shù)依賴α→β。分解是保持依賴的當(dāng)且僅當(dāng)上述過程中F的所有依賴都被保持。


          下面給出一個例題,2006年5月系分上午43題:

          ●設(shè)關(guān)系模式R<U, F>,其中U={A, B, C, D, E},F(xiàn)={A→BC,C→D,BC→E,E→A},則分解ρ={R1(ABCE),R2(CD)}滿足 (43) 。
          (43) A.具有無損連接性、保持函數(shù)依賴
                        B.不具有無損連接性、保持函數(shù)依賴
                        C.具有無損連接性、不保持函數(shù)依賴
                        D.不具有無損連接性、不保持函數(shù)依賴

          先做無損鏈接的判斷。R1∩R2={C},計算C+。
          Result=C
          由于C→D,C∈result,所以result=result∪D=CD
          可見C是R2的超碼,該分解是一個無損分解。

          再做保持依賴的判斷。
          A→BC,BC→E, E→A都在R1上成立(也就是說每一個函數(shù)依賴左右兩邊的屬性都在R1中),C→D在R2上成立,因此給分解是保持依賴的。

          選A。


          再看一個復(fù)雜點的例題。2007年5月數(shù)工40-41題。

          ●給定關(guān)系模式R<U, F>,U={A, B, C, D, E},F(xiàn)={B→A,D→A,A→E,AC→B},其候選關(guān)鍵字為
          (40)  ,則分解ρ={R1(ABCE),R2(CD)}滿足 (41) 。
          (40) A.ABD
                        B.ABE
                        C.ACD
                        D.CD
          (41) A.具有無損連接性、保持函數(shù)依賴
                        B.不具有無損連接性、保持函數(shù)依賴
                        C.具有無損連接性、不保持函數(shù)依賴
                        D.不具有無損連接性、不保持函數(shù)依賴

          看見了吧,和前面一題多么的相像!
          對于第一問,分別計算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上都不成立,因此需做進(jìn)一步判斷。
          由于B→A,A→E,AC→B都是被保持的(因為它們的元素都在R1中),因此我們要判斷的是D→A是不是也被保持。

          對于D→A應(yīng)用算法二:
          result=D
          對R1,result∩R1=ф(空集,找不到空集的符號,就用這個表示吧),t=ф,result=D
          再對R2,result∩R2=D,D+ =ADE ,t=D+ ∩R2=D,result=D
          一個循環(huán)后result未發(fā)生變化,因此最后result=D,并未包含A,所以D→A未被保持,該分解不是保持依賴的。

          選D。

          posted on 2007-10-18 00:53 RiKeR 閱讀(17892) 評論(17)  編輯  收藏

          評論

          # re: 無損分解和保持依賴的判斷 2007-11-24 13:04 star

          看書太抽象了,這個帖子不錯,理解了,感謝  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2007-12-29 01:22

          不錯啊
            回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2008-01-21 12:06 Danielsym

          下午就考數(shù)據(jù)庫了,這篇帖子真是雪中送炭哪!  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2008-01-24 23:42 good

          good
            回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2008-05-03 16:04 dbs

          不錯!這貼講得很透徹  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2009-04-26 16:00 HHK

          不錯.謝謝作者.  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷[未登錄] 2009-05-10 18:17 浪子

          受益匪淺!  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2009-05-21 15:58 SimonKing

          最后的D-A判斷不是很明白,后天就考試了,這帖子不錯。  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2009-06-22 15:22 和加快

          謝謝  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷[未登錄] 2011-01-08 23:01 OK

          非常感謝!現(xiàn)在的課本真的太抽象了。。。  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2011-01-09 17:23 guy

          @OK
          你是華農(nóng)吧  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷[未登錄] 2011-05-15 20:04 ice

          nice  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷[未登錄] 2012-05-09 17:01 Roy

          (ACD)+ = { ABCDE }
          (CD)+ = { ABCDE }
          選D。

          2者都是超碼,為什么選D呢  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷[未登錄] 2014-06-12 23:57 JOJO

          因為ACD雖然是超碼,但是去掉屬性A它仍然是超碼,所以它不是候選碼,看候選碼的定義就知道了@Roy
            回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2014-12-04 11:53 。。。

          講的太好了,看完立刻懂  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2015-06-30 00:12 111111111

          謝謝了  回復(fù)  更多評論   

          # re: 無損分解和保持依賴的判斷 2015-08-29 17:48 ghost

          相當(dāng)感謝!!!!Orz....  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 白朗县| 贵港市| 左贡县| 星座| 来宾市| 呈贡县| 合水县| 潼关县| 高台县| 临沧市| 西藏| 郧西县| 五莲县| 乌拉特后旗| 诸暨市| 托克托县| 堆龙德庆县| 大厂| 昌乐县| 沿河| 衡阳县| 高清| 丹东市| 资溪县| 改则县| 罗甸县| 滦南县| 同江市| 射洪县| 兰坪| 武川县| 拜泉县| 尤溪县| 崇仁县| 永城市| 汤阴县| 克山县| 佛学| 河源市| 安化县| 大宁县|