數據依賴、四種範式、投影分解法、關係模式規範化 | 關係數據庫

目錄

一、什麼是數據依賴?

完全函數依賴

部分函數依賴

二、碼

三、範式

        1.第一範式(1NF)

        2.第二範式(2NF)

        3.第三範式(3NF)

        4.BC範式(BCNF)-- 也叫作修正的第三範式

四、關係模式規範化總結


什麼是數據依賴?

如下左圖,這樣的一張關係表如果一個系八百個人,同一個系主任名字可能被重複八百遍!所以爲了避免冗餘,我們可以使用右圖的關係依賴:

學號確定了所在系,所在的系對應其系主任。學號和課程序號加起來就確定了某人的成績啦(右圖:函數依賴)

什麼是規範化理論?

找出關係模式中不合適的數據依賴,消除它們,可以在不同程度上解決插入異常,刪除異常、更新異常和數據冗餘問題。就是設計合適的數據庫邏輯模式。
 

函數依賴

  • 平凡函數依賴
  • 非平凡函數依賴

完全函數依賴

在一個關係中,若某個非主屬性數據項依賴於全部關鍵字稱之爲完全函數依賴。

:成績表(學號,課程號,成績)關係中,

完全函數依賴:(學號,課程號)→ 成績,學號 -\→ 成績,課程號 -\→ 成績,所以(學號,課程號)→ 成績 是完全函數依賴

部分函數依賴

例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屬性是主屬性還是非主屬性,反正就是不存在 “部分函數依賴和傳遞函數依賴” ,這就是

 

關係模式規範化總結

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章