6.關系資料理論
6.1問題的提出
關系資料庫邏輯設計
a.針對具體問題,如何構造一個适合的資料模式
b.資料庫邏輯設計的工具—關系資料庫的規範化理論
概念回顧:
關系:符合一定語義規則的一組二維表還有某些元組和屬性列組成
關系模式:一類具有共同特征的關系的抽象的集合
關系資料庫:基于關鍵模式建構
關系資料庫的模式:
關系模式的形式化定義
五部分:R(U,D,DOM,F)
R:關系名
U:組成該關系的屬性名集合(性别-年齡…)
D:屬性組U中的屬性所來自的域(屬性範圍)
DOM:屬性向域的映像集合
F:屬性間資料的依賴關系集合
簡化:R(U,F) 當且僅當U上的一個關系r滿足F時候,r稱為關系模式R(U,F)的一個關系
資料依賴
1.完整性限制的表現形式
a.限定屬性取值範圍:例如成績在0-100之間
b.定義屬性值間的互相關聯(主要展現于值是否相等),這就是資料依賴,他是資料庫模式設計的關鍵
2.資料依賴
a.一個關系内部屬性與屬性之間的限制
b.現實世界屬性間互相聯系的抽象
c.資料内在的性質
d.語義的展現
資料依賴類型
函數依賴FD
多值依賴MVD
其他
資料依賴對關系模式的影響
可能存在的問題:
1.資料備援
2.更新異常
3.插入異常
4.删除異常
解決方法:
通過分解關系模式來消除其中不合适的資料依賴
6.2規範化
6.2.1函數依賴
定義: 設R(U)是一個屬性集U上的關系模式,X和Y是U的子集。若對于R(U)的任意一個可能的關系r,r 中不可能存在兩個元組在X上的屬性值相等, 而在Y上的屬性值不等, 則稱“X函數确定Y”或“Y函數依賴于X”,記作X→Y。
函數依賴不是指關系模式R的某個或某些關系執行個體滿足的限制條件,而是指R的所有關系執行個體均要滿足的限制條件
6.2.1.2平凡函數依賴與非平凡函數依賴
X→Y,但Y⊈X則稱X→Y是非平凡的函數依賴。
X→Y,但Y⊆X 則稱X→Y是平凡的函數依賴。
對于任一關系模式,平凡函數依賴都是必然成立的,它不反映新的語義。
若不特别聲明, 我們總是讨論非平凡函數依賴。
若X→Y,則X稱為這個函數依賴的決定因素(Determinant)。
若X→Y,Y→X,則記作X←→Y。
若Y不函數依賴于X,則記作X↛Y。
6.2.1.3完全函數依賴與部分函數依賴
定義在R(U)中,如果X→Y,并且對于X的任何一個真子集X’, 都有 X’ ↛ Y, 則稱Y對X完全函數依賴,記作X → F Y。
若X→Y,但Y不完全函數依賴于X,則稱Y對X部分函數依賴,記作xP → Y
[例] 在關系SC(Sno, Cno, Grade)中,有:
由于:Sno ↛Grade,Cno ↛ Grade,
是以:(Sno, Cno) → Grade
(Sno, Cno)→Sno
(Sno, Cno) →Cno
6.2.1.4傳遞函數依賴
定義6.3 在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 則稱Z對X傳遞函數依賴(transitive functional dependency)。記為:X → Z。
注: 如果Y→X, 即X←→Y,則Z直接依賴于X,而不是傳遞函數依賴。
6.2.2碼
定義6.4 設K為R<U,F>中的屬性或屬性組合。若K → U,則K稱為R的一個候選碼(Candidate Key)。
如果U部分函數依賴于K,即K → U,則K稱為超碼 (Surpkey)。候選碼是最小的超碼,即K的任意一個真子集都不是候選碼。
若關系模式R有多個候選碼,則標明其中的一個做為主碼(Primary key)。
主屬性與非主屬性
包含在任何一個候選碼中的屬性 ,稱為主屬性 (Prime attribute)
不包含在任何碼中的屬性稱為非主屬性(Nonprime attribute)或非碼屬性(Non-key attribute)
全碼:整個屬性組是碼,稱為全碼(All-key)
定義6.5 關系模式 R中屬性或屬性組X 并非 R的碼,但 X 是另一個關系模式的碼,則稱 X 是R 的外部碼(Foreign key)也稱外碼。
SC(Sno,Cno,Grade)中,Sno不是碼
Sno是 S(Sno,Sdept,Sage)的碼,則Sno是SC的外碼
主碼與外部碼一起提供了表示關系間聯系的手段
6.2.3範式
範式是符合某一種級别的關系模式的集合。
關系資料庫中的關系必須滿足一定的要求。滿足 不同程度要求的為不同範式。
各種範式之間存在聯系:
某一關系模式R為第n範式,可簡記為R∈nNF。
一個低一級範式的關系模式,通過模式分解(schema decomposition)可以轉換為若幹個高一級範式的關系模式的集合,這種過程就叫規範化(normalization)。
6.2.4 2NF
定義:若關系模式R∈1NF,并且每一個非主屬性都完全函數依賴于任何一個候選碼,則R∈2NF
[例6.4] S-L-C(Sno,Sdept,Sloc,Cno,Grade), Sloc為學生的住處,并且每個系的學生住在同一個地方。S-L-C的碼為(Sno,Cno)。
函數依賴有
(Sno,Cno)→Grade
Sno→Sdept, (Sno,Cno)→Sdept
Sno→Sloc, (Sno,Cno)→Sloc
Sdept→Sloc
非主屬性Sdept、Sloc并不完全依賴于碼
關系模式S-L-C不屬于2NF
一個關系模式不屬于2NF,會産生以下問題:
插入異常
如果插入一個新學生,但該生未選課,即該生無Cno,由于插入元組時,必須給定碼值,是以插入失敗。
删除異常
如果S4隻選了一門課C3,現在他不再選這門課,則删除C3後,整個元組的其他資訊也被删除了。
修改複雜
如果一個學生選了多門課,則Sdept,Sloc被存儲了多次。如果該生轉系,則需要修改所有相關的Sdept和Sloc,造成修改的複雜化。
出現這種問題的原因
例子中有兩類非主屬性:
一類如Grade,它對碼完全函數依賴
另一類如Sdept、Sloc,它們對碼不是完全函數依賴
解決方法:
用投影分解把關系模式S-L-C分解成兩個關系模式
SC(Sno,Cno,Grade)
S-L(Sno,Sdept,Sloc)
SC的碼為(Sno,Cno),SL的碼為Sno,這樣使得非主屬性對碼都是完全函數依賴了
6.2.5 3NF
(無傳遞依賴和部分依賴)
定義 設關系模式R<U,F>∈1NF,若R中不存在這樣的碼X、屬性組Y及非主屬性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,則稱R<U,F> ∈ 3NF。
SC沒有傳遞依賴,是以SC ∈ 3NF
S-L中Sno →Sdept( Sdept ↛ Sno), Sdept→Sloc,可得Sno → Sloc。
解決的辦法是将S-L分解成
S-D(Sno,Sdept)∈ 3NF
D-L(Sdept,Sloc)∈ 3NF
6.2.6 BCNF
定義 設關系模式R<U,F>∈1NF,若X →Y且Y ⊆ X時X必含有碼,則R<U,F>∈BCNF。
換言之,在關系模式R<U,F>中,如果每一個決定屬性集都包含候選碼,則R∈BCNF。
BCNF的關系模式所具有的性質
所有非主屬性都完全函數依賴于每個候選碼
所有主屬性都完全函數依賴于每個不包含它的候選碼
沒有任何屬性完全函數依賴于非碼的任何一組屬性
如果一個關系資料庫中的所有關系模式都屬于BCNF,那麼在函數依賴範疇内,它已實作了模式的徹底分解,達到了最高的規範化程度,消除了插入異常和删除異常。
[例6.5]考察關系模式C(Cno,Cname,Pcno)
它隻有一個碼Cno,沒有任何屬性對Cno部分依賴或傳遞依賴,是以C∈3NF。
同時C中Cno是唯一的決定因素,是以C∈BCNF。
對于關系模式SC(Sno,Cno,Grade)可作同樣分析。
[例6.6] 關系模式S(Sno,Sname,Sdept,Sage),
假定Sname也具有唯一性,那麼S就有兩個碼,這兩個碼都由單個屬性組成,彼此不相交。
其他屬性不存在對碼的傳遞依賴與部分依賴,是以S∈3NF。
同時S中除Sno,Sname外沒有其他決定因素,是以S也屬于BCNF。
[例6.7] 關系模式SJP(S,J,P)中,S是學生,J表示
課程,P表示名次。每一個學生選修每門課程的
成績有一定的名次,每門課程中每一名次隻有一
個學生(即沒有并列名次)。
由語義可得到函數依賴: (S,J)→P;(J,P)→S
(S,J)與(J,P)都可以作為候選碼。
關系模式中沒有屬性對碼傳遞依賴或部分依賴,是以
SJP∈3NF。
除(S,J)與(J,P)以外沒有其他決定因素,是以
SJP∈BCNF。
[例6.8] 關系模式STJ(S,T,J)中,S表示學生,T表
示教師,J表示課程。每一教師隻教一門課。每
門課有若幹教師,某一學生標明某門課,就對應
一個固定的教師。
由語義可得到函數依賴:(S,J)→T;(S,T)→J;T→J
因為沒有任何非主屬性對碼傳遞依賴或部分依賴,
STJ ∈ 3NF。
因為T是決定因素,而T不包含碼,是以STJ ∈ BCNF
關系。
3NF和BCNF是在函數依賴的條件下對模式分解所能達到的分離程度的測度。
一個模式中的關系模式如果都屬于BCNF,那麼在函數依賴範疇内,它已實作了徹底的分離,已消除了插入和删除的異常。
3NF的“不徹底”性表現在可能存在主屬性對碼的部分依賴和傳遞依賴。
6.2.7 多值依賴
定義 設R(U)是屬性集U上的一個關系模式。X,Y,Z是U的子集,并且Z=U-X-Y。關系模式R(U)中多值依賴X→→Y成立,當且僅當對R(U)的任一關系r,給定的一對(x,z)值,有一組Y的值,這組值僅僅決定于x值而與z值無關。
多值依賴的另一個等價的定義
在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]=s[Y],v[Z]=t[Z](即交換s,t元組的Y值所得的兩
個新元組必在r中則Y多值依賴于X,記為X→→Y。這裡
X,Y是U的子集,Z=U-X-Y。
平凡多值依賴和非平凡的多值依賴
若X→→Y,而Z=Ф,即Z為空,則稱X→→Y為平凡的多值依賴。
否則稱X→→Y為非平凡的多值依賴。
多值依賴的性質
(1)多值依賴具有對稱性。
即若X→→Y,則X→→Z,其中Z=U-X-Y
多值依賴的對稱性可以用完全二分圖直覺地表示出來。
(2)多值依賴具有傳遞性。即若X→→Y,Y→→Z, 則 X→→Z -Y。
(3)函數依賴是多值依賴的特殊情況。即若X→Y,則
X→→Y。
(4)若X→→Y,X→→Z,則X→→YZ。
(5)若X→→Y,X→→Z,則X→→Y∩Z。
(6)若X→→Y,X→→Z,則X→→Y-Z,X→→Z -Y。
多值依賴與函數依賴的差別
(1)多值依賴的有效性與屬性集的範圍有關
若X→→Y在U上成立,則在W(XY W U)上一定成立;反之則不然,即X→→Y在W(W U)上成立,在U上并不一定成立。
原因:多值依賴的定義中不僅涉及屬性組X和Y,而且涉及U中其餘屬性Z。
多值依賴的有效性與屬性集的範圍有關(續)
一般地,在R(U)上若有X→→Y在W(W U)上成立,則稱X→→Y為R(U)的嵌入型多值依賴。
函數依賴X→Y的有效性僅決定于X、Y這兩個屬性集的值
隻要在R(U)的任何一個關系r中,元組在X和Y上的值滿足定義6.l,則函數依賴X→Y在任何屬性集W(XY W U)上成立。
(2)若函數依賴X→Y在R (U)上成立,則對于任何Y‘ Y均有X→Y’ 成立。多值依賴X→→Y若在R(U)上成立,不能斷言對于任何Y’ Y有X→→Y’ 成立。
6.2.8 4NF
定義 關系模式R<U,F>∈1NF,如果對于R的每個非平凡多值依賴X→→Y(Y ⊈ X),X都含有碼,則R<U,F>∈4NF。
4NF就是限制關系模式的屬性之間不允許有非平凡且非函數依賴的多值依賴。4NF所允許的非平凡多值依賴實際上是函數依賴。
如果一個關系模式是4NF, 則必為BCNF。
在[例6.10]的WSC中,W →→S,
W→→C,他們都是非平凡多值依賴。而W不是碼,關系模式WSC的碼是(W,S,C),即All-key,是以WSC ∈ 4NF。
可以把WSC分解成WS(W,S),WC(W,C), WS∈4NF,WC∈4NF。
6.2.9 規範化小結
在關系資料庫中,對關系模式的基本要求是滿足第一範式。
規範化程度過低的關系不一定能夠很好地描述現實世界
可能存在插入異常、删除異常、修改複雜、資料備援等問題
解決方法就是對其進行規範化,轉換成進階範式
一個低一級範式的關系模式,通過模式分解可以轉換為若幹個高一級範式的關系模式集合,這種過程就叫關系模式的規範化。
關系資料庫的規範化理論是資料庫邏輯設計的工具。
規範化的基本思想
是逐漸消除資料依賴中不合适的部分,使模式中的各關系模式達到某種程度的“分離”。
即采用“一事一地”的模式設計原則
讓一個關系描述一個概念、一個實體或者實體間的一種聯系。
若多于一個概念就把它“分離”出去。
是以 規範化實質上是概念的單一化。