什麼是資料庫正規化?為什麼需要正規化?
2023年2月4日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
何謂資料庫正規化?
正規化是為了讓資料庫中重複的欄位資料減到最少,並且能快速的找到資料,提高關聯性資料庫的效能,因此其兩大目標為:
- 降低資料的重複性
- 避免資料更新異常
而正規化中有不同的規則,而實務上,BCNF 被視為最高階正規形式,如下圖所示:
1NF 規則
每一個欄位只能有一個基元值(Atomic Value)即單一值
沒有任何兩筆以上的資料是完全重複
資料表中有 Primary Key,而其他所有的欄位都相依於 Primary Key
2NF 規則與 3NF 規則
2NF
- 符合 1NF - 非鍵值屬性皆完全功能相依於主鍵
3NF
符合 2NF
不存在非鍵值屬性遞移相依於主鍵
兩者解法類似,通常都是將關聯性拆解,拆成多張表,並且決定 Foreign Key,如下圖所示:
BCNF (Boyce-Codd Normal Form) 規則
比 3NF 再更嚴格
如果 Primary Key 為單一欄位組成,則符合 3NF 亦符合 BCNF
如果 Primary Key 為多個欄位組成,則須滿足:
- 滿足 3NF
- Primary Key 中的各欄位不可以相依於其他非主鍵的欄位
上圖所示,每一個屬性皆無法獨自成為 Primary Key,而其無法滿足 BCNF 是因為 Consultant
此欄位不為候選鍵,而遇到此問題也通常可以透過拆表來解決。