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