第二範式
第二範式
第二範式(Second Normal Form,2nd NF)是指每個表必須有且僅有一個數據元素為主關鍵字(Primary key),其他數據元素與主關鍵字一一對應。通常稱這種關係為函數依賴(Functional dependence)關係,即表中其他數據元素都依賴於主關鍵字,或稱該數據元素惟一地被主關鍵字所標識。第二範式是資料庫規範化中所使用的一種正規形式。它的規則是要求數據表裡的所有非主屬性都要和該數據表的主鍵有完全依賴關係;如果有哪些非主屬性只和主鍵的一部份有關的話,它就不符合第二範式。同時可以得出:如果一個數據表的主鍵只有單一一個欄位的話,它就一定符合第二範式(前提是該數據表符合第一範式)。
例如:若關係模式R∈1NF(即R符合第一範式),並且每一個非主屬性都完全依賴於R的主碼,則R∈2NF(即R符合第二範式)。
所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,理解了完全依賴和部分依賴,就很容易理解第二範式,下面舉例說明一下。
例如以下實例中的關係模式,就是不符合2NF的一個典型例子。
不符合第二範式的例子
貨物類型 | 貨物ID | 貨物名稱 | 注意事項 |
瓷碗 | 1 | 白色瓷碗 | 易碎品 |
瓷碗 | 2 | 青花瓷碗 | 易碎品 |
瓷碗 | 3 | 雕花瓷碗 | 易碎品 |
三合板 | 1 | 普通三合板 | 易燃物品,注意防火 |
在該表中主鍵為(貨物類型,貨物ID),貨物名稱欄位完全依賴於這個主鍵,換句話說,貨物的名稱完全是取決於這個主鍵的值的。但“注意事項”這一列,僅依賴於一個主鍵中”貨物類型“這一個屬性。簡單地說,第二範式要求每個非主屬性完全依賴於主鍵,而不是僅依賴於其中一部分屬性。
那麼,既然表中存在一個對主鍵不是完全依賴的欄位,那麼我們就可以確定,該表不符合第二範式。
符合第二範式的例子
貨物類型 | 貨物ID | 貨物名稱 |
瓷碗 | 1 | 白色瓷碗 |
瓷碗 | 2 | 青花瓷碗 |
瓷碗 | 3 | 雕花瓷碗 |
三合板 | 1 | 普通三合板 |
在該表中的主鍵依然是(貨物類型、貨物ID),非主鍵欄位“貨物名稱”,完全依賴於這兩個主鍵,那麼我們就可以說,該表是符合資料庫第二範式的。
採用投影分解法將一個1NF的關係分解為多個2NF的關係,可以在一定程度上減輕原1NF關係中存在的插入異常、刪除異常、數據冗餘度大、修改複雜等問題。
將一個1NF關係分解為多個2NF的關係,並不能完全消除關係模式中的各種異常情況和數據冗餘。
例:選課關係SCI(SNO,CNO,GRADE,CREDIT)其中SNO為學號,CNO為課程號,GRADE為成績,CREDIT為學分。由以上條件,關鍵字為組合關鍵字(SNO,CNO)
在應用中使用以上關係模式有以下問題:
a.數據冗餘,假設同一門課由40個學生選修,學分就重複40次。
b.更新異常,若調整了某課程的學分,相應的元組CREDIT值都要更新,有可能會出現同一門課學分不同。
c.插入異常,如計劃開新課,由於沒人選修,沒有學號關鍵字,只能等有人選修才能把課程和學分存入。
d.刪除異常,若學生已經結業,從當前資料庫刪除選修記錄。某些門課程新生尚未選修,則此門課程及學分記錄無法保存。
原因:非關鍵字屬性CREDIT僅函數依賴於CNO,也就是CREDIT部分依賴組合關鍵字(SNO,CNO)而不是完全依賴。
解決方法:分成兩個關係模式SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新關係包括兩個關係模式,它們之間通過SC1中的外關鍵字CNO相聯繫,需要時再進行自然聯接,恢復了原來的關係。