1. 程式人生 > >關係型資料庫設計三大正規化

關係型資料庫設計三大正規化

1.何為資料庫正規化?

設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同
規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。

目前關係資料庫有六種正規化:第一正規化(1NF)、第二正規化(2NF)、第三正規化(3NF)、巴斯-科德正規化(BCNF)、第四正規化(4NF)和第五正規化(5NF,又稱完美正規化)。

簡單來講,就是資料庫設計的一系列規範,每一級正規化都是基於前一正規化的基礎上,正規化層級越高,資料庫質量越高。(本文指涉及前三大正規化)

2.第一正規化

定義:資料表中所有欄位都是單一屬性,不可再分。即第一正規化要求資料庫的表都是二維表。

例如:妹子表

姓名 身高 體重 住址 美醜 聯絡方式
翠花 1.7 48 中國 很美 手機、微信
姓名 身高 體重 住址 美醜 手機 微信
翠花 1.7 48 中國 很美 123 9887

兩張表記錄的資訊都是一樣的,然而表一中的聯絡方式可細分為手機號和微訊號來儲存。表二則將兩個相關資訊分開儲存,保證了最小單元不可再分,滿足了第一正規化。

3.第二正規化

定義:每個非主屬性由整個主鍵函式決定,不能由主鍵的部分決定。非關鍵欄位對主鍵完全依賴,消除部分函式依賴。即存在組合關鍵字中的欄位決定非關鍵字的情況。

例如:商品表

名稱 供應商名稱 價格 重量 供應商電話 有效期 分類
奶茶 娃哈哈 4.0 300ml 666 一年 飲料

存在依賴關係:(名稱)——>(價格,重量,有效期)
(供應商)——>(供應商電話)

ID 名稱 價格 重量 有效期 分類
1 奶茶 4.0 300ml 一年
供應商ID 商品ID
1 1
ID 供應商名稱 電話
1 奶茶 666

4.第三正規化

定義:表中所有非主屬性對任何候選關鍵字都不存在傳遞依賴,則滿足第三正規化。
講人話就是:除了主鍵,其他任何欄位都不對其他的欄位造成依賴關係。看看例子就明白了。

例如:商品表

名稱 價格 重量 有效期 分類 分類描述
奶茶 4.0 300ml 一年 飲料 很好喝

存在依賴關係:(名稱)——>(分類)——>(分類描述)
再資料量大的時候,如果很多商品式一個分類的話,那麼分類和分類描述就會出現大量的資料冗餘。同時野會存在資料的插入更新及刪除異常。

商品ID 名稱 價格 重量 有效期
1 奶茶 4.0 300ml 一年
分類ID 分類 分類描述
1 飲料 很好喝
分類ID 商品ID
1 1