[總結]關系數據庫設計基礎(函數依賴、無損連接性、保持函數依賴、范式、……)


≏≎≟≗≖≍≭∼∽≁≃≂≅≊≈≉≇≳⪞⪆⋧⪊≵≲⪝⪅⋦⪉≴⊂ subset ⫅⋐⊄⊊⫋⊈⊃⊇⫆⋑⊅⊋⫌⊉≺⪯≼⋞≾⪷⋨⪵⪹⊀≻⪰≽⋟≿⪸⋩⪶⪺⊁ in ∋∉∌∝≬⊸

函數依賴(Function Dependency)

定義
設關系模式R(U),屬性集合U= {A1,A2,…,An},X,Y為屬性集合U的子集,如果對於關系模式R(U)的任一可能的關系r,r中的任意兩個元組u、v,若有 u[X]=v[X],就有u[Y]=v[Y],則稱X函數決定Y,或稱Y函數依賴於X。用符號X→Y表示。其中X為決定因素,Y為被決定因素。若對於R(U)的任意一個可能的關系r,r中不可能存在兩個元組在X上的屬性值性等,而在Y上的屬性值不等。
 (1) 函數依賴是語義范疇的概念,只能根據語義來確定一個函數依賴關系。
 (2) 函數依賴X→Y的定義要求關系模式R的任何可能的關系r中的元組都滿足函數依賴條件。
術語
 (1)若X→Y,則X稱作決定因素(Determinant)
 (2)若X→Y,Y→X,稱作X<->Y。
 (3)若Y不函數依賴於X,稱作X -/-> Y。
 (4)X
→Y,若Y不包含X,即X ⊄ Y,則稱X→Y為非平凡的函數依賴。正常討論的都是非平凡的函數依賴。
 (5)X→Y,若Y包含X,即X ⊂ Y,則稱X→Y為平凡的函數依賴。
 (6)完全函數依賴(full functional dependency):在R(U)中,設X、Y是關系模式R(U)中不同的屬性子集(即X   U,Y   U),

    若存在 X→Y,且不存在 X的任何真子集X'(即 X' ⊊ X),使得 X'→Y,則稱Y完全函數依賴 ( full functional dependency ) 於X。記作 X-F->Y。

 (7)部分函數依賴:在關系模式R(U)中,X、Y是關系模式R(U)中不同的屬性子集(即X  ⊂ U,Y  ⊂ U),

    若X→Y成立,如果X中存在任何真子集X'(即 X' ⊊ X),而且有X'→Y也成立,則稱Y對X是部分函數依賴,記作:X-P->Y。

 (8)設R是關系模式,U是其屬性集,K包含於U(即K  U) 。若K完全函數確定U,則稱K是R的候選鍵(又叫候選關鍵字,候選碼)。包含在任意候選鍵內的屬性稱為鍵屬性(又叫主屬性),不是鍵屬性的屬性稱為非鍵屬性(又叫非主屬性)。顯然,候選鍵可以唯一  標識關系的元組。候選鍵可能不唯一,通常指定一個候選鍵作為識別元組的主鍵

  (9)若關系R的屬性子集X是另一關系S的候選鍵,則稱X是R關於S的外部鍵主鍵和外部鍵描述了關系之間的聯系。
  (10)傳遞函數依賴:在關系模式R(U) 中,如果X→Y,Y→A,且YX(Y不決定X), AY(A不屬於Y),那么稱X→A是傳遞依賴。

一題搞懂什么是候選鍵

 

學號

姓名 性別 年齡 系別

專業

20020612 李輝 20 計算機 軟件開發
20020613 張明 19 計算機 軟件開發
20020614 王小玉 18 物理 力學
20020615 李淑華 17 生物 動物學
20020616 趙靜 21 化學 食品化學
20020617 趙靜 20 生物 植物學

【題目】數據庫中有一個學生信息表如上所示,在該表中不能作為候選鍵的屬性集合為( ) (選擇一項)

a){學號}              b){學號、姓名}            c){年齡、系別}            d){姓名、性別}            e){姓名、專業}

【解析】透過概念,我們可以了解到,超鍵包含着候選鍵,候選鍵中包含着主鍵。主鍵一定是惟一的。為什么呢?因為他的爺爺超鍵就是惟一的。
我們分析一下上面的題目,a,b,c,d,e,5個答案都可以作為超鍵,他們組合在一起的集合可以用來惟一的標識一條數據記錄(實體)。
請注意我們的要求:候選鍵。候選鍵要求是不能包含多余屬性的超鍵,我們看一下答案b。在答案b中,如果我們不使用姓名也可以惟一的
標識一條數據實體,可以說姓名字段在這里是多余的。那么很明顯,b選項包含了多余字段屬性。那么這題答案應該選擇b。

那么其他的4個選項都可以作為候選鍵,假設很幸運,a){學號}被選擇作為用戶正在使用的候選鍵來惟一標識元組了,那么他很幸運的獲得了主鍵的稱號

【答案】b

 

函數依賴的推理規則

1. 邏輯蘊含
  給定一個關系模式,只考慮給定的函數依賴是不夠的,必須找出在該關系模式上成立的其他函數依賴。
  邏輯蘊含:設F是關系模式R(U)的函數依賴集合,由F出發,可以證明其他某些函數依賴也成立,我們稱這些函數依賴被F邏輯蘊含。"F蘊含X→Y"意味着關系實例只要滿足F就滿足X→Y。
  例如,設F={ A→B,B→C },則函數依賴A→C被F邏輯蘊含,記作:F |= A→C。即函數依賴集 F 邏輯蘊含函數依賴A→C。


2. F的閉包F+
  對於一個關系模式,如何由已知的函數依賴集合F找出F邏輯蘊涵的所有函數依賴集合呢?這就是我們下面要討論的問題。
  F的閉包F+設F為一個函數依賴集,F的閉包是指F邏輯蘊涵的所有函數依賴集合。 F的閉包記作F+
  例如,給定關系模式R(A,B,C,G,H,I),函數依賴集合F={A→B,A→C,CG→H,CG→I,B→H}。可以證明函數依賴A→H被F邏輯蘊涵。
  設有元組s和t,滿足s[A]=t[A],根據函數依賴的定義,由已知的A→B,可以推出s[B]=t[B]。又根據函數依賴B→H,可以有 s[H]=t[H]。因此,已經證明對任意的兩個元組s和t,只要有s[A]=t[A],就有s[H]=t[H]。所以,函數依賴A→H被F邏輯蘊涵。
  計算F的閉包F+,可以由函數依賴的定義直接計算,如上面的示例。

 

當F很大時,計算的過程會很長。為了從已知的函數依賴推導出其它函數依賴,Armstrong 提出了一套推理規則,稱為Armstrong 公理 ,通過反復使用這些規則,可以找出給定F的閉包F+

3.Armstrong 公理
  設U為屬性總體集合,F為U上的一組函數依賴集,對於關系模式R(U,F),X、Y、Z為屬性U的子集,有下列推理規則:

  在此先說一下 Armstrong 的基本公理和推理規則:

  基本公理:

  1)(自反律)如果 Y ∈ X∈ U,則 X → Y 成立。(平凡函數依賴)

  2)(增廣律)如果 X → Y 在 R(U)  成立,且 Z∈ U,則 XZ → YZ成立

  3)(傳遞律)如果 X → Y,Y → Z 成立,則 X → Z 成立。

  推理規則:

  1)(合並):{X → Y,X → Z},則 X → YZ

  2)(分解):{X → Y,Z ∈ Y},則 X → Z。(或:X → YZ,那么 X → Y,X → Z)

  3)(偽傳遞):{X → Y,YW → Z},則 WX → Z

  4)(復合):{X → Y,W → Z},則 XW → YZ

  5)(自積律):{X → YZ,Z → W},則 X → YZW


4.屬性集的閉包
  原則上講,對於一個關系模式R(U,F),根據已知的函數依賴F,反復使用前面的規則,可以計算函數依賴集合F的閉包F+。但是,利用推理規則求出其全部的函數依賴F+是非常困難的,而且也沒有必要。因此,可以計算閉包的子集,即選擇一個屬性子集,判斷該屬  性子集能函數決定哪些屬性,這就是利用屬性集閉包的概念。
 (1)屬性集閉包的定義
  設F為屬性集U上的函數依賴集,X∈U,即X為U的一個子集。在函數依賴集F下被X函數決定的所有屬性為F+下屬性集X的閉包,記作X+。即X+={ A| X→A } 。
 (2)計算屬性集閉包X+的算法如下:
  輸入:X,F
  輸出: X+
  迭代算法的步驟:
  ① 選取X+的初始值為X ,即X+={X};
  ② 計算X+, X+={X,Z} ,其中Z要滿足如下條件:
     Y是X+的真子集,且F中存在一函數依賴Y→Z。實際上就是以X+中的屬性子集作為函數依賴的決定因素,在F中搜索函數依賴集,找到函數依賴的被決定屬性Z放到X+中。
  ③ 判斷:如果X+沒有變化?或X+等於U?則X+就是所求的結果,算法終止。否則轉②。
   因為U是有窮的,所以上述迭代過程經過有限步驟之后就會終止。


 例如,已知關系模式R(U,F),U={A,B,C,D,E,G},F={AB→C,D→EG,C→A,BE→C,BC→D,AC→B,CE→AG},求(BD)+
   解:
   ① (BD)+ = {BD};
   ② 計算(BD)+ ,在F中掃描函數依賴,其左邊為B,D或BD的函數依賴,得到一個D→EG。所以,(BD)+= {BDEG}。
   ③ 計算(BD)+,在F中查找左部為BDEG的所有函數依賴,有兩個:D→EG和BE→C。所以(BD)+={(BD)∪EGC}={BCDEG}。
   ④ 計算(BD)+,在F中查找左部為BCDEG子集的函數依賴,除去已經找過的以外,還有三個新的函數依賴:C→A,BC→D,CE→AG。得到(BD)+={(BD)∪ADG}={ABCDEG}。
   ⑤ 判斷(BD)+=U,算法結束。得到(BD)+={ABCDEG}。
  說明:上面說明(B,D)是該關系模式的一個候選碼。


5. Armstrong公理系統的有效性和完備性
  ①Armstrong公理系統的有效性指的是:由F出發根據Armstrong公理系統推導出來的每一個函數依賴一定是F所邏輯蘊含的函數依賴。
  ②Armstrong公理系統的完備性指的是:對於F所邏輯蘊含的每一函數依賴,必定可以由F出發根據Armstrong公理系統推導出來。

6. 極小函數依賴集(最小函數依賴集)

  概念:對於函數集 F ,稱函數集Fmin 為F 的最小函數依賴集,如果 Fmin滿足一下條件:

 

  1)Fmin與 F等價:Fmin+=F+

 

  2)Fmin中每個函數依賴 X→Y 的依賴因素為單元素集,即Y中只含有一個屬性集合。

 

  3)Fmin中每個函數依賴 X→Y的決定因素不存在冗余,即既要刪除X中任何一個屬性,就會改變Fmin的閉包。

 

  4)Fmin中每個函數毒不是冗余的,即刪除 Fmin 中任意一個函數依賴,就會改變Fmin 的閉包。

 

  定義:如果函數依賴集F滿足下列條件,則稱F為最小函數依賴集或最小覆蓋。   
   ① F中的任何一個函數依賴的右部僅含有一個屬性;   
   ② F中不存在這樣一個函數依賴X→A,使得F與F-{X→A}等價;
   ③ F中不存在這樣一個函數依賴X→A,X有真子集Z使得F-{X→A}∪{Z→A}與F等價。   
  求最小函數依賴集分三步:
   1.將F中的所有依賴右邊化為單一元素
   此題fd={abd->e,ab->g,b->f,c->j,cj->i,g->h};已經滿足
   2.左邊的冗余屬性.
   作法是屬性中去掉其中的一個,看看是否依然可以推導
   此題:abd->e,去掉a,則(bd)+不含e,故不能去掉,同理b,d都不是冗余屬性
   ab->g,也沒有
   cj->i,因為c+={c,j,i}其中包含i所以j是冗余的.cj->i將成為c->i
   F={abd->e,ab->g,b->f,c->j,c->i,g->h};

   3.去掉F中所有冗余依賴關系.
   做法為從F中去掉某關系,如去掉(X->Y),然后在F中求X+,如果Y在X+中,則表明x->是多余的.需要去掉.

  此題如果F去掉abd->e,F將等於{ab->g,b->f,c->j,c->i,g->h},而(abd)+={a,d,b,f,g,h},其中不包含e.所有不是多余的.

   同理(ab)+={a,b,f}也不包含g,故不是多余的.
   b+={b}不多余,c+={c,i}不多余
   c->i,g->h多不能去掉.
   所以所求最小函數依賴集為 F={abd->e,ab->g,b->f,c->j,c->i,g->h};

 

多值依賴

1、定義

設R(U)是屬性集U上的一個關系模式。X,Y,Z是U的子集,並且Z=U-X-Y。關系模式R(U)中多值依賴X→→Y成立,當且僅當對R(U)的任一關系r,給定的一對(x,z)值有一組Y的值,這組值僅僅決定於x值而與z值無關。

若X→→Y,而Z=,則稱X→→Y為平凡的多值依賴。否則稱X→→Y為非平凡的多值依賴

多值依賴也可以形式化地定義如下: 在關系模式R(U)的任一關系r中,如果對於任意兩個元組t,s,有t[X]=s[X],就必存在元組w,v∈r(w和v可以與s和t相同),使得 w[X]=v[X]=t[X],而w[Y]=t[Y],w[Z]=s[Z],v[Y]=t[Z],即交換s,t元組的Y值所得的兩個新元組必在r中,則稱Y多值依賴於X,記為X→→Y。其中,X和Y是U的子集,Z=U-X-Y。

多值依賴屬4nf的定義范圍,比函數依賴要復雜得多,很多書上都沒有講清楚。

2、說得簡單點就是

在關系模式中,函數依賴不能表示屬性值之間的一對多聯系,這些屬性之間有些雖然沒有直接關系,但存在間接的關系,把沒有直接聯系、但有間接的聯系稱為多值依賴的數據依賴。例如,教師和學生之間沒有直接聯系,但教師和學生可通過系名,或任課把教師和學生聯系起來。

3、舉例如下

【例1】有這樣一個關系 <倉庫管理員,倉庫號,庫存產品號> ,假設一個一個產品只能放到一個倉庫中,但是一個倉庫可以由若干管理員,那么對應於一個 <倉庫管理員,庫存產品〉有一個倉庫號,而實際上,這個倉庫號只與庫存產品號有關,與管理員無關,就說這是多值依賴。

【例2】(C,B) 上的一個值(物理,光學原理)對應一組T值(李平,王強,劉明),這組值僅僅決定於課程C上的值,也就是說對於(C,B)上的另一個值(物理,普通物理 學),它對應的一組T值仍是(李平,王強,劉明),盡管這時參考書B的值已經改變了。因此T多值依賴於C,即C→→T。

4、多值依賴具有下列性質

●多值依賴具有對稱性。即若X→→Y,則X→→Z,其中Z=U-X-Y。

●多值依賴具有傳遞性。即若X→→Y,Y→→Z,則X→→Z-Y。

●函數依賴可以看作是多值依賴的特殊情況。

●若X→→Y,X→→Z,則X→→YZ。

●若X→→Y,X→→Z,則X→→Y∩Z。

●若X→→Y,X→→Z,則X→→Y-Z,X→→Z-Y。

●多值依賴的有效性與屬性集的范圍有關。

●若多值依賴X→→Y在R(U)上成立,對於Y'Y,並不一定有X→→Y’成立。但是如果函數依賴X→Y在R上成立,則對於任何Y'Y均有X→Y’成立。

范式

無重復的列

• 如果關系模式R為第一范式,並且R中每一個非主屬性完全函數依賴於R的某個候選鍵,則稱為第二范式模式。【消去非主屬性對鍵的部分函數依賴
缺點:刪除異常,插入異常,修改復雜
消去非主屬性對鍵的部分和傳遞函數依賴】
部分和傳遞函數依賴】

X),X都含有碼,則稱R∈4NF。【消除非平凡且非函數依賴的多值依賴

http://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A7%84%E8%8C%83%E5%8C%96以下的論述都基於這樣一個前提:
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的超碼。
·通過檢驗是否β∈α+,來驗證函數依賴是否成立。也就是說,用屬性閉包計算α+,看它是否包含β。

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

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

● 給定關系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∪A3=A1A2A3A4
由於A3→A2,A3∈result,所以result=result∪A2=A1A2A3A4

通過計算我們看到,A1+ =result={A1A2A3A4},所以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的所有依賴都被保持。


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

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

先做無損鏈接的判斷。R1∩R2={C},計算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。


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

●給定關系模式R<U, F>,U={A, B, C, D, E},F={B→A,D→A,A→E,AC→B},其候選關鍵字為
(40) ,則分解ρ={R1(ABCE),R2(CD)}滿足 (41) 。
(40) A.ABD
              B.ABE
              C.ACD
              D.CD
(41) 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,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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM