什麼是資料庫正規化?為什麼需要正規化?

2023年2月4日

💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

何謂資料庫正規化?

Database Normalization
Database Normalization

正規化是為了讓資料庫中重複的欄位資料減到最少,並且能快速的找到資料,提高關聯性資料庫的效能,因此其兩大目標為:

  1. 降低資料的重複性
  2. 避免資料更新異常

而正規化中有不同的規則,而實務上,BCNF 被視為最高階正規形式,如下圖所示:

Normalization
Normalization

1NF 規則

  • 每一個欄位只能有一個基元值(Atomic Value)即單一值

  • 沒有任何兩筆以上的資料是完全重複

  • 資料表中有 Primary Key,而其他所有的欄位都相依於 Primary Key

    Database normalization 1NF
    Database normalization 1NF

2NF 規則與 3NF 規則

2NF

- 符合 1NF - 非鍵值屬性皆完全功能相依於主鍵

3NF

  • 符合 2NF

  • 不存在非鍵值屬性遞移相依於主鍵

兩者解法類似,通常都是將關聯性拆解,拆成多張表,並且決定 Foreign Key,如下圖所示:

Database Normalization 2NF 3NF
Database Normalization 2NF 3NF

BCNF (Boyce-Codd Normal Form) 規則

  • 比 3NF 再更嚴格

  • 如果 Primary Key 為單一欄位組成,則符合 3NF 亦符合 BCNF

  • 如果 Primary Key 為多個欄位組成,則須滿足:

    • 滿足 3NF
    • Primary Key 中的各欄位不可以相依於其他非主鍵的欄位
Database Normalization BCNF
Database Normalization BCNF

上圖所示,每一個屬性皆無法獨自成為 Primary Key,而其無法滿足 BCNF 是因為 Consultant 此欄位不為候選鍵,而遇到此問題也通常可以透過拆表來解決。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們