網路上關於範式的文章多為照本宣科,連範例都如出一轍。本文基於個人理解重新闡述三大範式,若有疏漏歡迎指正(聯繫:279537592@qq.com)。
官方定義:資料表每個欄位都是單一屬性,不可再分。
個人理解:只要是關聯式資料庫,預設就滿足 1NF。每個欄位只存單一值,不包含陣列、集合等複合結構。
官方定義:不存在非鍵欄位對任一候選鍵的部分函數相依。
個人理解:針對複合主鍵(AB),A 或 B 單獨不應能決定其他非鍵欄位。解決方案通常是引入單一代理鍵(如自增 ID)作為主鍵。
| PK | PK | 欄位 C |
|---|---|---|
| A | B | C |
| A | D | C |
| A | E | C |
此處 (A,B) 為複合主鍵,但 A → C 存在部分相依,導致 C 隨 A 重複儲存。
| PK | 欄位 A | 欄位 B | 欄位 C |
|---|---|---|---|
| 1 | A | B | C |
| 2 | A | D | C |
| 3 | A | E | C |
雖滿足 2NF,但 A 與 C 仍有組合重複,違反 3NF。
官方定義:在 2NF 基礎上,不存在非鍵欄位對候選鍵的傳遞函數相依。
個人理解:非鍵欄位之間不應有相依關係,即 A → B → C 這種傳遞相依不應存在。
| PK | A | B | C | F |
|---|---|---|---|---|
| 1 | A | B | C | F |
| 2 | A | D | C | G |
| 3 | A | E | C | K |
此處 A 決定 C,C 再決定 F/G/K,產生傳遞相依。
表 1:主實體
| PK | A | B |
|---|---|---|
| 1 | A | B |
| 2 | A | D |
| 3 | A | E |
表 2:屬性延伸
| PK | C | F |
|---|---|---|
| 1 | C | F |
透過外鍵關聯,徹底消除冗餘與異常。