1NF 2NF 3NF BCNF

1NF

  • 定義:
    • 確保每列的原子性.
    • 如果每列(或者每個屬性)都是不可再分的最小數據單元(也稱爲最小的原子單元),則滿足第一範式.
  • 舉例:
    • 顧客表(姓名、編號、地址、……)其中”地址”列還可以細分爲國家、省、市、區等。

2NF

  • 定義:
    • 在第一範式的基礎上更進一層,目標是確保表中的每列都和主鍵相關.
    • 如果一個關係滿足第一範式,並且除了主鍵以外的其它列,都依賴(直接和間接)於該主鍵,則滿足第二範式.
  • 舉例:
    • (訂單編號,商品編號,商品名稱,數量,單位,價格,客戶,所屬單位,聯繫方式)
    • 這個表中是以訂單編號和商品編號作爲聯合主鍵。這樣在該表中商品名稱、單位、商品價格等信息不與該表的主鍵相關,而僅僅是與商品編號相關。所以在這裏違反了第二範式的設計原則。
    • 所以應該將這個表拆成3個,把商品信息分離到另一個表中,把訂單項目表也分離到另一個表中。如下所示:
      • (訂單編號,客戶,所屬單位,聯繫方式)
      • (訂單編號,商品編號,數量)
      • (商品編號,商品名稱,單位,價格)

3NF

  • 定義:
    • 在第二範式的基礎上更進一層,目標是確保每列都和主鍵列直接相關,而不是間接相關.
    • 如果一個關係滿足第二範式,並且除了主鍵以外的其它列都不依賴於主鍵外的列,則滿足第三範式.
  • 舉例:
    • (訂單編號,訂單項目,負責人,客戶名稱,所屬單位,聯繫方式)
    • 這個表中是以訂單編號作爲主鍵。而所屬單位,聯繫方式這些是客戶的屬性,依賴於客戶,與主鍵間接相關,所以不滿足3NF.
    • 所以應該將這個表拆成2個,把客戶信息分離到另一個表中。如下所示:
      • (訂單編號,訂單項目,負責人,客戶編號)
      • (客戶編號,客戶名稱,所屬單位,聯繫方式)

BCNF 鮑依斯-科得範式

  • 定義:
    • 在第三範式的基礎上,數據庫表中如果不存在任何字段對任一候選關鍵字段的傳遞函數依賴則符合第三範式。
  • 舉例:
    • 假設倉庫管理關係表爲StorehouseManage(倉庫ID, 存儲物品ID, 管理員ID, 數量),且有一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品。這個數據庫表中存在如下決定關係:
      • (倉庫ID, 存儲物品ID) →(管理員ID, 數量)
      • (管理員ID, 存儲物品ID) → (倉庫ID, 數量)
    • 所以,(倉庫ID, 存儲物品ID)和(管理員ID, 存儲物品ID)都是StorehouseManage的候選關鍵字,表中的唯一非關鍵字段爲數量,它是符合第三範式的。但是,由於存在如下決定關係:
      • (倉庫ID) → (管理員ID)
      • (管理員ID) → (倉庫ID)
    • 即存在關鍵字段決定關鍵字段的情況,所以其不符合BCNF範式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章