資料庫三大正規化與五大約束

2021-09-12 06:49:30 字數 1239 閱讀 7694

正規化

英文名稱是 normal form,是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前共有8種正規化,依次是:1nf,2nf,3nf,bcnf,4nf,5nf,dknf,6nf。但通常用到的只是前三種正規化,即:第一正規化(1nf),第二正規化(2nf),第三正規化(3nf)。

第一正規化(1nf):強調的是列的原子性,即列不能分割(已經是最精確的描述)。

例:有這樣乙個表,【聯絡人】(姓名,性別,**)。在實際使用中乙個聯絡人有家庭**和私人手機號。那麼這中表就不符合第一正規化(**這列不具有原子性)。可改為【聯絡人】(姓名,性別,家庭**,手機號)

第二正規化(2nf):在第一正規化的基礎上,還要遵循兩個條件。一,表必須有乙個主鍵。二,其它列必完全依賴與主鍵。

例:有乙個訂單明細表:【orderidetail】(orderid,productid,unitprice,discount,quantity,productname),因為乙個訂單可以有多個商品,所以在這個表中乙個orderid是不足以成為主鍵的,顯而易見discount,quantity是完全依賴於主鍵orderid,但unitprice,productname只是依賴於productid,所以不符合第二正規化。

要符合第二正規化可以拆為:【orderdetail】(orderid,productid,discount,quantity)和【product】(productid,unitprice,productname)。

第三正規化(3nf):在第二正規化的基礎上,非主鍵列必須直接依賴於主鍵,不能傳遞依賴。

例:還是乙個訂單列表【order】(orderid,orderdate,customerid,customername,customeraddr,customercity)主鍵是(orderid)。其中 orderdate,customerid,customername,customeraddr,customercity 等非主鍵列都完全依賴於主鍵(orderid),所以符合 2nf。不過問題是 customername,customeraddr,customercity 直接依賴的是 customerid(非主鍵列),而不是直接依賴於主鍵,它是通過傳遞才依賴於主鍵,所以不符合 3nf。

總結:一般而言正規化越高分的越精確。

資料庫五大約束:

注意:

資料庫的三大正規化以及五大約束

實體 表 屬性 表中的資料 字段 關係 表與表之間的關係 資料庫設計三大正規化 重點 第一正規化 1nf 資料表中的每一列 每個字段 必須是不可拆分的最小單元,也就是確保每一列的原子性 例如 userinfo 山東省煙台市 131777368781 userads 山東0省煙台市 usertel 1...

資料庫的三大正規化以及五大約束

數 據 庫 實體 表 屬性 表中的資料 字段 關係 表與表之間的關係 資料庫設計三大正規化 重點 第一正規化 1nf 資料表中的每一列 每個字段 必須是不可拆分的最小單元,也就是確保每一列的原子性 例如 userinfo 山東省煙台市 131777368781 userads 山東0省煙台市 use...

資料庫的三大正規化以及五大約束

實體 表 屬性 表中的資料 字段 關係 表與表之間的關係 資料庫設計三大正規化 重點 第一正規化 1nf 資料表中的每一列 每個字段 必須是不可拆分的最小單元,也就是確保每一列的原子性 例如 userinfo 山東省煙台市 131777368781 userads 山東0省煙台市 usertel 1...