關聯式資料庫設計必須遵循正規化規則。正規化是符合特定級別的關聯模式集合,共六級:1NF~6NF。實務上達到 3NF 通常即足夠,更高階用於特殊場景。
定義:資料表每欄位皆為不可再分割的基本資料項,同一欄位不得有多值、無重複屬性。
違反範例:員工資訊表中「技能」欄位存「Java, SQL, Python」→ 應拆分為獨立技能表,與員工表建立 1:N 關係。
口訣:無重複欄位,每列單一值。
前提:滿足 1NF。
定義:每個實例可被唯一區分(需主鍵),非主鍵屬性完全函數相依於主鍵(不部分相依)。
違反範例:複合主鍵 (學號, 課程) →「學生姓名」只相依「學號」→ 應拆出學生基本資料表。
口訣:非主屬性不部分相依主鍵。
前提:滿足 2NF。
定義:資料表不包含已在其他表存在的非主鍵資訊,即非主屬性不傳遞相依於主鍵(不相依於其他非主屬性)。
違反範例:員工表含「部門編號、部門名稱、部門簡介」→ 部門資訊應獨立為部門表,員工表只留部門編號 FK。
口訣:屬性不相依於其他非主屬性。
| 正規化 | 核心要求 | 應用場景 |
|---|---|---|
| 4NF | 滿足 3NF + 表不包含一個實體的兩個或多個相互獨立的多值相依 | 處理多值相依異常 |
| 5NF | 滿足 4NF + 表可分解為更小表(除非邏輯上擁有相同主鍵) | 連接相依異常極罕見 |
| BCNF | 3NF 加強版:多個候選鍵、複合候選鍵、候選鍵重疊時無異常 | 嚴格學術/關鍵系統 |
正規化不是教條,而是消除資料異常、保證一致性的系統化方法論。理解其背後邏輯,比死記定義更重要。