目錄
什麼是數據依賴?
如下左圖,這樣的一張關係表如果一個系八百個人,同一個系主任名字可能被重複八百遍!所以爲了避免冗餘,我們可以使用右圖的關係依賴:
學號確定了所在系,所在的系對應其系主任。學號和課程序號加起來就確定了某人的成績啦(右圖:函數依賴)
什麼是規範化理論?
找出關係模式中不合適的數據依賴,消除它們,可以在不同程度上解決插入異常,刪除異常、更新異常和數據冗餘問題。就是設計合適的數據庫邏輯模式。
函數依賴
- 平凡函數依賴
- 非平凡函數依賴
完全函數依賴
在一個關係中,若某個非主屬性數據項依賴於全部關鍵字稱之爲完全函數依賴。
例:成績表(學號,課程號,成績)關係中,
完全函數依賴:(學號,課程號)→ 成績,學號 -\→ 成績,課程號 -\→ 成績,所以(學號,課程號)→ 成績 是完全函數依賴
部分函數依賴
例1 在關係模式Student中,因爲Sno不能函數決定Grade,Cno也不能函數決定Grade,但(Sno,Cno)可以唯一地函數決定Grade,所以(Sno,Cno)→Grade是完全函數依賴。因爲Sno可以函數決定Sage,所以(Sno,Cno)→Sage是部分函數依賴。
傳遞函數依賴:這樣嬸兒噠↓↓↓
碼
範式
符合某一種級別的關係模式的集合
第一範式(1NF)
一個關係所有屬性都是不可分的基本數據項
期初餘額 | 本期發生額 | 期末餘額 | |||
借方 | 貸方 | 借方 | 貸方 | 借方 | 貸方 |
12 | 23 | 55 | 35 | 56 | 35 |
134 | 435 | 534 | 35 | 35 | 566 |
245 | 245 | 35 | 56 | 53 | 53 |
如上圖就不是第一範式:期初餘額、本期發生額、期末餘額都可分
第一範式是對關係模式最起碼的要求,不滿足第一範式的數據庫模式不能稱爲關係數據模式。
第二範式(2NF)
若關係模式R∈1NF,並且每一個非主屬性都完全函數依賴於R的碼,則R∈2NF
-
不符合第二範式的例子
貨物類型 | 貨物ID | 貨物名稱 | 注意事項 |
瓷碗 | 1 | 白色瓷碗 | 易碎品 |
瓷碗 | 2 | 青花瓷碗 | 易碎品 |
瓷碗 | 3 | 雕花瓷碗 | 易碎品 |
三合板 | 1 | 普通三合板 | 易燃物品,注意防火 |
在該表中主鍵爲(貨物類型,貨物ID),貨物名稱字段完全依賴於這個主鍵,換句話說,貨物的名稱完全是取決於這個主鍵的值的。但“注意事項”這一列,僅依賴於一個主鍵中”貨物類型“這一個屬性。簡單地說,第二範式要求每個非主屬性完全依賴於主鍵,而不是僅依賴於其中一部分屬性。
那麼,既然表中存在一個對主鍵不是完全依賴的字段,那麼我們就可以確定,該表不符合第二範式。
-
符合第二範式的例子
貨物類型 | 貨物ID | 貨物名稱 |
瓷碗 | 1 | 白色瓷碗 |
瓷碗 | 2 | 青花瓷碗 |
瓷碗 | 3 | 雕花瓷碗 |
三合板 | 1 | 普通三合板 |
在該表中的主鍵依然是(貨物類型、貨物ID),非主鍵字段“貨物名稱”,完全依賴於這兩個主鍵,那麼我們就可以說,該表是符合數據庫第二範式的。
例:不符合第二範式的可以使用投影分解法,把關係模式分解爲兩個(或多個)關係模式,消除部分函數依賴:
第三範式(3NF)
在第二範式的基礎上消除傳遞依賴,就是第三範式。
- 不符合第三範式的例子
這樣的傳遞依賴使Sloc不能隨意修改,Sdept不能隨意刪除等等,存在衝突!
可以使用投影分解法修改爲第三範式,消除傳遞依賴,如下圖小方塊↓↓↓
這樣就不存在剛纔那些異常了,變成了這樣,解決了上述衝突:
- 符合第三範式的例子
下面正式介紹3NF:
BC範式(BCNF)-- 也叫作修正的第三範式
滿足BC範式的關係將消除任何屬性(主屬性和非主屬性)對關係鍵的部分函數依賴和傳遞函數依賴。在函數依賴的範疇內,它實現了模式的徹底分解,達到了最高的規範化程度,消除了操作異常諸多問題。
- 不符合第三範式的例子
這樣的傳遞使沒有學生的老師不能入數據庫等等問題。
可以使用投影分解法修改爲BC範式,消除傳遞依賴,如下圖小方塊↓↓↓
總之,如果不存在 –>C , B–>C 類似這樣的情況,也就是說部分函數依賴。 A–>B , B–>C 這種情況,也就是傳遞函數依賴,不管這些ABC屬性是主屬性還是非主屬性,反正就是不存在 “部分函數依賴和傳遞函數依賴” ,這就是
關係模式規範化總結