關係型數據的關係模式是一個五元組: 數據庫
R(U,D,DOM,F)
R —— 關係名;
U —— 屬性名的集合,即屬性組;
D —— U中屬性所來自的域(相同類型的值的集合);
DOM —— 屬性(U)到域(D)的映射;
F —— 屬性組U上的一組數據依賴。
因爲D和DOM對模式設計關係不大,本文把關係模式化簡成爲一個三元組,即:R(U, F)。函數
設R(U)是屬性集U上的關係模式,X、Y是U的子集。
1. 函數依賴:
若對R(U)上的任意一個可能的關係r,r中不存在兩個元組在X子集上的屬性相等而Y子集上的屬性不等,即Y函數依賴於X,記做X→Y。(人話就是:Y=f(X),f是一個單值函數)。
2. 非平凡函數依賴:
若是X→Y且Y⊈X,則稱X→Y是非平凡函數依賴。
平凡函數依賴
若是X→Y且Y⊆X,則稱X→Y是平凡函數依賴。
3. 徹底函數依賴
若是X→Y且對於X的任何一個真子集X’,都有X’不能決定Y,則稱Y對X徹底依賴,記做X□(→┴f )Y。(例子:(X’, X’’) →Y,對於X’或者X’’都不能決定Y,即(X’, X’’)□(→┴f )Y)
4. 部分依賴
若是X→Y且Y對X不徹底依賴,記做X□(→┴p )Y。
5. 傳遞依賴
若是X→Y,Y⊈X且Y→Z,則Z對X傳遞依賴。設計
(一)第一範式(1NF)
若關係模式R中的每個份量是不可再分的數據項,則關係模式R屬於第一範式。(理解:對屬性的原子操做,要求屬性具備原子性,不可再分解)
對於一張二維表來講,最起碼的要求是知足1NF,即:每一個份量都是必須是一個不可分的數據項。這是最基本的範式,若只是知足1NF,則該關係模式可能存在下面的問題:教程
例1:記關係模式R(U, F),U={A, B, C, D, E};,F={A→C, C→D, (A, B) →E};it
- 數據冗餘: 屬性C, D, E等信息在表中可能會重複出現,浪費大量存儲空間。(即函數依賴致使了大量的冗餘)
- 更新異常: 因爲屬性C, D, E等信息在表中可能會重複出現,所以若是它們須要修改須要重複修改對應的每一項,不然可能致使數據不一致。(即數據冗餘致使了更新異常)
- 插入異常: 若是屬性A, B, E中有新添的元素暫時沒有對應的C,D,那麼就沒法將這個新添元素插入該表。(即函數依賴致使了插入異常)
- 刪除異常:若須要刪除屬性B,E的元素,則該元素對應的元組全部元素也將被刪除。(即函數依賴致使了刪除異常)
(二)第二範式(2NF)
若關係模式R∈1NF,且每個非主屬性徹底依賴於碼(屬性的組合,能惟一標識實體的屬性),則關係模式R屬於第二範式,即當1NF消除了非主屬性對碼的部分函數依賴,則稱2NF。(理解:2NF是對記錄的惟一性約束,要求記錄具備惟一標識,即實體的惟一性)軟件
由例1能夠看出依賴每每致使了數據冗餘、更新異常、插入異常、刪除異常等問題,對屬性間依賴狀況進行規範能夠必定程度上減小少這些問題。屬性間的依賴程度就是區分不一樣範式的依據。由例1能夠看出:例1中的碼是屬性A,B,其中A→C,即屬性C是對碼的部分函數依賴,則2NF對例1的處理就是是消除非主屬性對碼的部分函數依賴。以下:im
例2:記關係模式R1(U, F),U={A, B, E};,F={ (A, B) →E};記關係模式R2(U, F),U={A, C,D,};,F={A→C, C→D };數據
例2中經過把例1的表分割成了兩個表,下面仍是從上面的幾方面分析:圖表
- 數據冗餘:屬性C, D,等信息在表中依舊可能會重複出現,浪費大量存儲空間,但對比例1的屬性E,例2中的屬性E則消除了冗餘。
- 更新異常:除了屬性E消除了更新異常其它的和例1中的分析同樣。
- 插入異常:解決了例1中的問題,但也會存在其它問題,如屬性C,D有了新添元素而沒有對應的屬性A。
- 刪除異常:解決了例1中的問題,能保留對應屬性A,C,D的元素,但也會存在其它問題,如須要刪除屬性A,C的一個元素,則對應的D屬性的元素也要被刪除。
例2中看來2NF對例1確實可以進行改進,但依然會有一些問題存在,這些問題主要是傳遞依賴形成的,例2中對例1最大的改進就是使得例2中每個表都的記錄都有了惟一的標識。
(三)第三範式(3NF)
若關係模式R(U, F)中不存在這樣的碼X,屬性組Y及非主屬性組Z(Z⊆Y)使得X→Y(Y↛X),Y→Z成立,則關係模式R屬於第三範式。(理解:對字段的冗餘性的約束(消除了非主屬性對碼的傳遞函數依賴),即任何字段不能由其它字段派生出來,它要求字段沒有冗餘)規範化
例3:記關係模式R1(U, F),U={A, B, E};,F={ (A, B)→E};記關係模式R2(U, F),U={A, C};,F={A→C };記關係模式R3(U, F),U={ A, D,};,F={ A→D};
例3中把例2的傳遞依賴部分又分紅了兩個表即R二、R3,如今再次簡單檢查一下發現上面的冗餘和異常解決了(在我目前的水平看來應該解決了)。
(四)其它範式
還存在其它的範式,如BCNF、4NF。其它的範式我還不是很清楚如何理解表達和應用,下面只是給出我查資料時看到的圖表。之後的內容之後有時間再深刻研究和補充。
參考文獻: 王珊,薩師煊,數據庫系統概論[M],第4版,北京:高等教育出版社,2006,5. 胡聖明,軟件設計師教程[M],第3版修訂版,北京:清華大學出版社,2013,3.