首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

資料庫設計範式深入淺出:1NF/2NF/3NF/BCNF 完整圖解與實務權衡

     編輯:MySQL 資料庫相關知識

關聯式資料庫設計必遵循範式規範。本文系統介紹 1NF~BCNF 定義、違反後果、分解方法與實務取捨。

第一范式 (1NF):屬性不可再分

每個屬性值為最小資料單位。例:員工一筆記錄含「公司電話、住宅電話」違反 1NF。

修正三法

  1. 重複儲存員工號/姓名 (主鍵變電話) — 最差
  2. 主鍵員工號,電話拆「公司電話、住宅電話」兩欄
  3. 主鍵員工號,強制單一電話欄位

實務採 2 或 3。

第二范式 (2NF):非主屬性完全依賴候選鍵

例:選課關係 SC(SNO, CNO, GRADE, CREDIT),鍵 (SNO, CNO)。
CREDIT 僅依賴 CNO (部分依賴) → 違反 2NF。

弊端

  • 資料冗餘:同課程學分重複 40 次
  • 更新異常:調整學分需改 40 筆,易不一致
  • 插入異常:新課程無學生無法存入
  • 刪除異常:學生畢業刪記錄,新課程學分跟著消失

解法

分解:SC1(SNO, CNO, GRADE)、C2(CNO, CREDIT),外鍵 CNO 關聯。

第三范式 (3NF):非主屬性不傳遞依賴候選鍵

例:S1(SNO, SNAME, DNO, DNAME, LOCATION),鍵 SNO。
SNO → DNO → LOCATION 存在傳遞依賴 → 違反 3NF。

解法

分解:S(SNO, SNAME, DNO)、D(DNO, DNAME, LOCATION),保留外鍵 DNO 維持關聯。

BCNF:所有屬性 (含主屬性) 不傳遞依賴候選鍵

例:配件管理 WPE(WNO, PNO, ENO, QNT)。
條件:ENO → WNO、(WNO, PNO) → ENO、(ENO, PNO) → QNT。
候選鍵:(WNO, PNO)、(ENO, PNO)。主屬性 ENO, WNO, PNO。
雖符合 3NF,但 ENO → WNO 導致主屬性傳遞依賴候選鍵 (ENO, PNO) → 違反 BCNF。

弊端

  • 新員工無配件負責 (缺 PNO) 無法插入
  • 員工轉職刪配件記錄,員工資料跟著消失

解法

分解:EP(ENO, PNO, QNT) 鍵 (ENO, PNO)、EW(ENO, WNO) 鍵 ENO。

代價

函數依賴 (WNO, PNO) → ENO 丟失,語義「每倉庫每配件專人負責」無法由結構約束,需觸發器補足。

範式包含關係與實務原則

BCNF ⊃ 3NF ⊃ 2NF ⊃ 1NF

  • 目的:結構合理、消除異常、冗餘最小、易維護
  • 原則:概念單一化「一事一地」
  • 方法:投影分解
  • 要求:無損連接 + 保持函數依賴 (有時須權衡)
  • 實務:不必全達 BCNF。高查詢低更新系統,適度保留冗餘換查詢效能

高階 4NF/5NF 處理多值/連接依賴,俟後續介紹。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved