首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

資料庫正規化(Normal Form)核心概念與六大範式詳解

     編輯:DB2 教學

什麼是正規化?

正規化是關聯式資料庫設計中,為了減少資料冗餘、避免異常(插入、更新、刪除異常),依照一系列規範(範式)將關聯結構逐步分解的過程。範式之間呈遞進關係:滿足高階範式必然滿足所有低階範式。

六大常見範式速覽

範式核心要求解決的問題
1NF(第一範式)每個屬性不可再分(原子性)消除重複群、多值屬性
2NF(第二範式)非主鍵屬性完全函數依賴於整個主鍵(針對複合主鍵)消除部分函數依賴
3NF(第三範式)非主鍵屬性不傳遞依賴於主鍵(即:非主鍵不依賴其他非主鍵)消除傳遞函數依賴
BCNF(巴斯-科德範式)在 3NF 基礎上,每個決定因素都是候選鍵(無多餘候選鍵)處理主鍵屬性間的依賴異常
4NF(第四範式)消除非平凡多值依賴(MVD)處理獨立的多值屬性
5NF(第五範式/完美範式)所有連接依賴皆由候選鍵推導極少數極複雜場景

關鍵概念釐清

完全函數依賴 vs 部分函數依賴

若主鍵為 (A, B),屬性 C 由 A 單獨決定,則稱 C 部分依賴於主鍵,違反 2NF。必須拆分為 (A, C) 與 (A, B, ...) 兩表。

傳遞函數依賴

A → B 且 B → C(B 非主鍵),則 C 傳遞依賴於 A,違反 3NF。拆分為 (A, B) 與 (B, C)。

BCNF 的嚴格性

3NF 允許主鍵屬性依賴非主鍵,BCNF 禁止。例如 (學生, 科目, 教師),若一位教師只教一科,則 教師 → 科目,教師 成為決定因素但非候選鍵,違反 BCNF,需拆分。

實務取捨:正規化到哪一層?

  • 3NF 是工程甜點:多數業務系統達到 3NF 即可平衡「低冗餘」與「查詢效能」。
  • 過度正規化(4NF/5NF)會導致表數量激增、Join 成本高、查詢複雜度上升,通常只在數據倉儲或特定領域模型中出現。
  • 必要時可反正規化(如加入冗餘欄位、建立物化視圖)以換取讀取效能。

一個完整範例:從 1NF 到 3NF

原始表(不滿足 1NF)

訂單表
OrderID | Customer | Products(多值)          | Address
1001    | 張三     | 筆記本, 滑鼠              | 台北市
1002    | 李四     | 手機                      | 新北市

1NF:拆分多值屬性

訂單主檔          訂單明細
OrderID Customer  OrderID Product
1001    張三      1001    筆記本
1002    李四      1001    滑鼠
                  1002    手機

2NF:移除部分依賴(假設明細主鍵為 OrderID+Product)
若 Customer 僅依賴 OrderID,則屬部分依賴,已在上步拆分解決。

3NF:移除傳遞依賴
若 Address 依賴 Customer,而 Customer 非主鍵,則再拆分:

客戶表
Customer | Address
張三     | 台北市
李四     | 新北市

總結

正規化是資料庫設計的基石。掌握 1NF~3NF 的判斷與拆分技巧,能讓你設計出結構清晰、易維護、擴展性強的資料模型。記住:理論為實務服務,適度即可。

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