函數(shù)依賴
1.函數(shù)依賴定義
A-> B,即?
“
A函數(shù)決定B
”
? ,A稱為決定因素。
2.關(guān)系的鍵碼、超鍵碼
屬性函數(shù)決定關(guān)系R的所有其它屬性,并且該屬性的任何真子集都不能函數(shù)決定R的所有其它屬性,則屬性是鍵碼。 鍵碼必須是最小的。
包含鍵碼的屬性集稱為
“
超鍵碼
”
。每個(gè)鍵碼都是超鍵碼。
例題:
已知關(guān)系R包含屬性{A,B,C,D},R的鍵碼為{A,B},則下面的選項(xiàng)哪1個(gè)是R
的超鍵碼(? )。
? A.{A}??? B.{C,D}?? C.{A,B,C,D}? D.{B,C,D}
答案:C
?
3.幾個(gè)概念
平凡依賴:如果B是A的子集,則稱該依賴為平凡的。
非平凡依賴:如果B中至少有一個(gè)屬性不在A中,則稱該依賴為非平凡的。
完全非平凡依賴:如果B中沒(méi)有一個(gè)屬性在A中,則稱該依賴為完全非平凡的。
平凡依賴規(guī)則:函數(shù)依賴A1A2
…
An
→
B1B2
…
Bm等價(jià)于A1A2
…
An
→
C1C2
…
Ck,其中?? C是B的子集,但不在A中出現(xiàn)。稱這個(gè)規(guī)則為
“
平凡依賴規(guī)則
”
。
?
4.傳遞規(guī)則
??? 如果A1A2
…
An
→
B1B2
…
Bm和B1B2
…
Bm
→
C1C2
…
Ck,在關(guān)系R中成立,則A1A2
…
An
→
C1C2
…
Ck在R中也成立。這個(gè)規(guī)則就稱為傳遞規(guī)則。
?
例題:
現(xiàn)給定一個(gè)關(guān)系R的實(shí)例如下表,則可能是函數(shù)依賴的是( B ).
??? Fl
|
??? F2
|
??? R
|
??? F。
|
??? F5
|
??? 李華
|
??? 20020330
|
??? H
|
??? 1
|
??? lO
|
??? 金謙
|
??? 20020330
|
??? 0
|
??? 1
|
??? 5
|
??? 李華
|
??? 20020218
|
??? O? ·
|
??? 3
|
??? 15
|
??? 呂宋
|
??? 200201]5
|
??? H
|
?
?? 2
|
??? 5
|
??? 顧小華
|
??? 20020218
|
??? O
|
??? 1
|
??? 20
|
A.F1
→F2??????????? B.F1F2→F5
C.F3 F4→F5??????? D.F2F3→F4
?
學(xué)習(xí)要點(diǎn)二
1. 函數(shù)依賴集:假設(shè){A1,A2,
…
,An}是屬性集,記為A,S是函數(shù)依賴集。
屬性集A在依賴集S下的封閉集是這樣的屬性集X,它使得滿足依賴集S中的所有依賴的每個(gè)關(guān)系也都滿足A
→
X。
A1A2
…
An
→
X是蘊(yùn)含于S中的函數(shù)依賴。
2.封閉集:
對(duì)于給定的函數(shù)依賴集S,屬性集A函數(shù)決定的屬性的集合就是屬性集A在依賴集S下的封閉集。
學(xué)會(huì)計(jì)算某屬性集的封閉集,可以根據(jù)給定的函數(shù)依賴集推導(dǎo)蘊(yùn)含于該依賴集的其他函數(shù)依賴。
?
例題:
假設(shè)關(guān)系模式為R(A,B,C,D),函數(shù)依賴為A→B,B→C和B→D。
??? (1)求蘊(yùn)含于給定函數(shù)依賴的所有非平凡函數(shù)依賴;
??? (2)求R的所有鍵碼;
??? (3)求R的所有超碼(不包括鍵碼)。
??? 參考答案:
??? (1)先求各種屬性組合的封閉集,再?gòu)闹姓页鲂碌暮瘮?shù)依賴。
??? A+=ABCD??????? ?B+=BCD? ?C+=C ??D+=D
??? A→C,A→D??? (2)
??? AB+==ABCD? AC+==ABCD ???AD+=ABCD ?BC+=BCD? ?BD+=BCD
CD+=CD
??? AB→C,AB→D AC→B,AC→D? AD→B,AD→C? BC→D? BD→C
??? ABC+=ABCD ?ABD+=ABCD ??BCD+=BCD
??? ABC→D? ABD→C???
??? ABCD+=ABCD
??? 蘊(yùn)含于給定函數(shù)依賴的非平凡函數(shù)依賴共12個(gè)。
??? (2)A為鍵碼。
??? (3)AB,AC,AD,ABC,ABD,ABCD為超鍵碼。
???
學(xué)習(xí)要點(diǎn)三
?
1. 幾個(gè)概念
l????????
主屬性:鍵碼所在的屬性稱為主屬性。
l????????
主屬性:鍵碼所在的屬性稱為主屬性。
l????????
非主屬性:鍵碼屬性以外的屬性稱為非主屬性。
l????????
非主屬性:鍵碼屬性以外的屬性稱為非主屬性。
l????????
完全依賴:對(duì)于函數(shù)依賴W
→
A,如果存在V是W的真子集而函數(shù)依賴
?
??V
→
A成立,則稱A部分依賴于W;若不存在這種V,則稱A完全依賴于W。
l????????
傳遞依賴
??? 對(duì)于函數(shù)依賴X
→
Y,如果X不函數(shù)依賴于Y,而函數(shù)依賴Y
→
Z成立,則稱Z對(duì)X傳遞依賴。
?
學(xué)習(xí)要點(diǎn)四
1.第一范式(1NF)
如果一個(gè)關(guān)系模式R的所有屬性都是不可分的基本數(shù)據(jù)項(xiàng),則這個(gè)關(guān)系屬于第一范式。
2.第二范式(2NF)
若關(guān)系模式R屬于第一范式,且每個(gè)非主屬性都完全函數(shù)依賴于鍵碼,則R屬于第二范式。
例題:學(xué)生關(guān)系模式Student(Sno,Sname,Sdept,Mname,Cname,Grade)。
?該關(guān)系模式存在如下部分依賴:
?? Sno,Cname
→
Sname,Sdept,Mname
??? 不滿足
“
每個(gè)非主屬性都完全函數(shù)依賴于鍵碼
”
的條件。學(xué)生關(guān)系模式不屬于第二范式。
3.第三范式(3NF)
若關(guān)系模式R屬于第一范式,且每個(gè)非主屬性都不傳遞依賴于鍵碼,則R屬于第三范式。
4.BC范式(BCNF)
若關(guān)系模式R屬于第一范式,且每個(gè)屬性都不傳遞依賴于鍵碼,則R屬于BC范式。
BC范式的條件表述:
l????????
每個(gè)非平凡依賴的左邊必須包含鍵碼;每個(gè)決定因素必須包含鍵碼。
l????????
BC范式既檢查非主屬性,又檢查主屬性。
例題:
寫(xiě)出3個(gè)關(guān)系模式分別滿足:
? (1)是1NF,不是2NF;
? (2)是2NF,不是3NF;
? (3)是3NF,也是BCNF。
? 各用兩句話分別說(shuō)明所寫(xiě)的關(guān)系模式是前者,不是(或也是)后者。
? 答:(1)學(xué)生選課(學(xué)號(hào),姓名,課程號(hào),成績(jī))
? 屬性不可分,是1NF;存在非主屬性對(duì)鍵碼的部分依賴(學(xué)號(hào),課程號(hào)→姓名),不
? 是2NF。
??? (2)學(xué)生(學(xué)號(hào),姓名,系別,系主任)
??? 鍵碼為單屬性,不存在部分依賴,是2NF;存在非主屬性對(duì)鍵碼的傳遞依賴(學(xué)號(hào)→
姓名,系別;系別≯學(xué)號(hào);系別→系主任;學(xué)號(hào)傳遞→系主任),不是3NF。
??? (3)學(xué)生(學(xué)號(hào),姓名,年齡)
??? 非主屬性(姓名,年齡)對(duì)鍵碼不存在部分依賴和傳遞依賴,是3NF;
??? 主屬性(學(xué)號(hào))對(duì)鍵碼也不存在部分依賴和傳遞依賴,是BCNF。
?
學(xué)習(xí)要點(diǎn)五
1.模式分解的三種方法
1)部分依賴歸子集;完全依賴隨鍵碼。
??? 關(guān)系模式
“
升級(jí)
”
第二范式:消除非主屬性對(duì)鍵碼的部分依賴。
解決的辦法:對(duì)原有模式進(jìn)行分解。
分解的關(guān)鍵:找出對(duì)鍵碼部分依賴的非主屬性所依賴的鍵碼的真子集,把這個(gè)真子集與所有相應(yīng)的非主屬性組合成一個(gè)新的模式;對(duì)鍵碼完全依賴的所有非主屬性則與鍵碼組合成另一個(gè)新模式。
?2)基本依賴為基礎(chǔ),中間屬性作橋梁
關(guān)系模式
“
升級(jí)
”
第三范式:消除非主屬性對(duì)鍵碼的傳遞依賴。
解決的辦法:以構(gòu)成傳遞鏈的兩個(gè)基本依賴為基礎(chǔ)形成兩個(gè)新的模式,切斷傳遞鏈,保持兩個(gè)基本依賴,有中間屬性作為橋梁,跨接兩個(gè)新的模式,實(shí)現(xiàn)無(wú)損的自然連接。
3)找違例自成一體,舍其右全集歸一
??? 關(guān)系模式
“
升級(jí)
”
BC范式:消除非主屬性對(duì)鍵碼的部分依賴和傳遞依賴,消除? 主屬性對(duì)鍵碼的部分依賴和傳遞依賴。
解決的辦法:對(duì)關(guān)系R(A,B,C),若存在BCNF的違例A
→
B ,則R分解為
R1(A,B)? R2(A,C), R1,R2則為BCNF.
?
例題:
關(guān)系模式為R(A,B,C,D),函數(shù)依賴為AB→C,C→D和D→A。
??? (1)找出所有違背BCNF的函數(shù)依賴。提示:應(yīng)該考慮不在給定的依賴集但蘊(yùn)含于
其中的依賴;
??? (2)關(guān)系模式R分解成屬于BCNF的關(guān)系模式的集合。
??? 參考答案:
(1)參看主教材P.122例6.1,共有14個(gè)非平凡函數(shù)依賴(包括已知的和導(dǎo)出的)
C→A,C→D,D→A
AB→C,AB→D,AC→D,BC→A,BC→D,BD→A,BD→C,CD→A
ABC→D,ABD→C,BCD→A
??? 共有3個(gè)鍵碼:AB,BC,BD
??? 其決定因素不包含鍵碼的函數(shù)依賴即為BC范式的違例,如下所示:
??? C→A,C→D,D→A,AC→D,CD→A
??? (2)以違例C→D為基礎(chǔ)進(jìn)行分解:
??? Rl(C,D),R2(A,B,C)
??? R1屬于BC范式。
??? R2有函數(shù)依賴C→A,AB→C,BC→A
??? AB+=ABC.BC+=ABC
??? AB,BC均為鍵碼。
??? 函數(shù)依賴C→A為BC范式違例。于是R2又可分解為:
??? R3(A,C),R4(B,C)
??? 至此,R分解為R1,R3,R4,均屬于BC范式。