1. 程式人生 > >資料庫設計一二三四正規化有何區別

資料庫設計一二三四正規化有何區別

範化是在識別資料庫中的資料元素、關係、以及定義所需的表和各表中的專案這些初始化工作之後的一個細化的過程。常見的正規化有1NF 2NF 3NF BCNF以及4NF。

1NF,第一正規化。第一正規化是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,即可能需要定義一個新的實體。新的實體由重複的屬性構成,新的實體和原來的實體之間為一對多的關係。第一正規化的模式要求屬性值不可再分裂成更小部分,即屬性項不能是屬性組合或由組屬性組成。簡而言之,第一正規化就是無重複的列。例如,由“職工號”、“姓名”、“電話號碼”組成的表(一個人即可能有一個辦公電話和一個行動電話),這時將其範化化為1NF可以將電話號碼分為“辦公電話”和行動電話兩個屬性,即職工(職工號,姓名,辦公電話,行動電話)。

2NF,第二正規化。第二正規化是在第一正規化的基礎上建立起來的,即滿足第二正規化必須先滿足第一正規化。第二正規化要求資料庫表中的每一個例項或行必須可以被唯一的區分。為實現區分通常需要為表加上一個列,以儲存各個例項的唯一標識。如果關係模式R為第一正規化,並且R中每一個非主屬性完全依賴於R的某個候選鍵,則稱R為第二正規化模式。例如,在選課關係表(學號、課程號、成績,學分)中,關鍵字為組合關鍵字(學號,課程號),但由於非主屬性學分僅依賴於課程號,對關鍵字(學號,課程號)只是部分依賴,而不是全部依賴,所以此中方式會導致資料冗餘以及更新異常等問題,解決辦法是將其分為兩個關係模式:學生表(學號,課程號,分數)和課程表(課程號,學分)。新關係通過學生表的外關鍵字課程號關聯,在需要時進行連線。

3NF,第三正規化。如果關係模式R是第二正規化,且每個非主屬性都不依賴於R的候選鍵,則稱R是第三正規化的模式。例如,學生表(學號,姓名,課程號,成績),其中學生姓名無重名,所以該表有兩個候選碼(學號,課程號)和(姓名,課程號),則存在函式依賴:學號->姓名,(學號,課程號)->成績,(姓名,課程號)->成績,唯一的非主屬性成績對碼不在部分依賴,也不存在傳遞依賴,屬於第三正規化。

4NF,第四正規化。一個表中只有一個多值事實。