1. 程式人生 > 實用技巧 >資料庫三大正規化

資料庫三大正規化

(1)1NF

定義:所有的屬性均為原子屬性,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。

弊端:如果僅僅符合第一正規化的設計,仍然會存在資料冗餘過大,插入異常,刪除異常,修改異常的問題,例如:

1.表中學生的學號、姓名、系名、系主任等資料重複出現--------資料冗餘過大。

2.假如學校3月份新建立了一個系,等到9月份的時候才能招收學生,那麼無法將該系名與系主任單獨新增到資料表中----插入

異常。

3. 假如將某個系的所有學生相關資料都刪除,那麼該系與系主任的資料也就隨之消失了-----刪除異常。

4. 如果將學生李小明轉到法律系,則需要修改3行表資料-----修改異常。

(2)2NF

定義:表中的所有屬性都必須完全依賴於所有主鍵(主鍵可能由多個屬性構成),不能存在依賴部分主鍵的情況。

滿足第二正規化後上表就成為:

進行第一正規化上表中的操作:

1. 學生的姓名、學號、系名、系主任不沒有重複出現-------有改進。

2.新增一個尚無學生的新系,因為學生表的碼是學號,不能為空,所以新增失敗-------無改進。

3.刪除某個系中所有學生的記錄,該系的資訊仍然全部丟失-------無改進。

4.將學生李小明轉移到法律系,只需要修改一次李小明對應的系的值即可-------有改進。

(3)3NF

定義:一張表中的非主屬性不能與非主屬性之間存在依賴關係,如第2NF學生表存在學號->系名,系名->系主任,而系名和系主任都是非主屬性,不滿足3NF。

滿足第三正規化後上表就成為:

進行第二正規化上表中的操作:

1.刪除某個系中的所有學生相關記錄,該系的資訊不會丟失------有改進。

2.插入一個尚無學生的新系的資訊,因為系表與學生表是兩張獨立的表,所以不影響------有改進。