資料庫設計範式是關聯式資料庫結構設計的規範標準。符合範式的資料表結構清晰、無冗余,能避免插入、刪除、更新異常。本文詳細說明第一、第二、第三範式的定義、判斷標準、違反後果與修正範例。
定義: 資料表每一欄位皆為不可分割的基本資料項,同一欄位不得包含多個值,亦不得有重複屬性欄位。
判斷標準: 無巢狀表格、無多值欄位、每列僅儲存單一值。
| 學號 | 姓名 | 課程 | 成績 |
|---|---|---|---|
| 001 | 王小明 | 數學 | 90 |
| 001 | 王小明 | 英文 | 85 |
| 學號 | 姓名 | 課程1 | 成績1 | 課程2 | 成績2 |
|---|---|---|---|---|---|
| 001 | 王小明 | 數學 | 90 | 英文 | 85 |
現代關聯式 DBMS 均強制符合 1NF,無法建立多值欄位,故實務上極少違反。
前提: 必須先符合 1NF。
定義: 每個非主鍵屬性完全函數依賴於候選鍵(不存在部分依賴)。若主鍵為複合鍵,非主鍵屬性不得僅依賴主鍵的一部分。
| 學號 (PK一部分) | 課程名稱 (PK一部分) | 姓名 | 年齡 | 學分 | 成績 |
|---|---|---|---|---|---|
| 001 | 數學 | 王小明 | 20 | 3 | 90 |
| 001 | 英文 | 王小明 | 20 | 2 | 85 |
| 002 | 數學 | 李小美 | 19 | 3 | 88 |
部分依賴關係:
課程名稱 → 學分(學分僅依賴課程,非完整複合鍵)學號 → 姓名, 年齡(姓名、年齡僅依賴學號)單一主鍵的資料表自動符合 2NF(不存在複合鍵部分依賴問題)。
前提: 必須先符合 2NF。
定義: 非主鍵屬性不得傳遞函數依賴於候選鍵。即不存在:主鍵 → 非主鍵A → 非主鍵B 的鏈式依賴。
| 學號 (PK) | 姓名 | 年齡 | 所在學院 | 學院地點 | 學院電話 |
|---|---|---|---|---|---|
| 001 | 王小明 | 20 | 資工系 | 工程大樓3樓 | 02-1234567 |
| 002 | 李小美 | 19 | 資工系 | 工程大樓3樓 | 02-1234567 |
傳遞依賴: 學號 → 所在學院 → 學院地點, 學院電話
| 範式 | 核心要求 | 解決問題 | 關鍵詞 |
|---|---|---|---|
| 1NF | 屬性原子性,無重複欄位 | 結構合法性 | 無重複列 |
| 2NF | 非主鍵完全依賴主鍵(消除部分依賴) | 複合鍵資料冗余與異常 | 完全依賴 |
| 3NF | 非主鍵不傳遞依賴主鍵(消除傳遞依賴) | 非主鍵間依賴導致的異常 | 無傳遞依賴 |
實務設計中,通常以 3NF 為標準。特定場景(如數據倉庫、報表查詢)為效能考量可適度反正規化,但需清楚權衡利弊並文件化。