函數依賴(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), A
Y(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的所有依賴都被保持。
●設關系模式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.不具有無損連接性、不保持函數依賴
由於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+。
因此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未被保持,該分解不是保持依賴的。