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

資料庫正規化完全指南:1NF、2NF、3NF 到 BCNF 圖解與實務判斷

     編輯:關於SqlServer

正規化基本概念

關聯式資料庫設計必須遵循正規化規則。正規化是符合特定級別的關聯模式集合,共六級:1NF~6NF。實務上達到 3NF 通常即足夠,更高階用於特殊場景。

前三階正規化詳細解析

第一正規化(1NF)— 原子性

定義:資料表每欄位皆為不可再分割的基本資料項,同一欄位不得有多值、無重複屬性。

違反範例:員工資訊表中「技能」欄位存「Java, SQL, Python」→ 應拆分為獨立技能表,與員工表建立 1:N 關係。

口訣:無重複欄位,每列單一值。

第二正規化(2NF)— 完全函數相依

前提:滿足 1NF。

定義:每個實例可被唯一區分(需主鍵),非主鍵屬性完全函數相依於主鍵(不部分相依)。

違反範例:複合主鍵 (學號, 課程) →「學生姓名」只相依「學號」→ 應拆出學生基本資料表。

口訣:非主屬性不部分相依主鍵。

第三正規化(3NF)— 無傳遞相依

前提:滿足 2NF。

定義:資料表不包含已在其他表存在的非主鍵資訊,即非主屬性不傳遞相依於主鍵(不相依於其他非主屬性)。

違反範例:員工表含「部門編號、部門名稱、部門簡介」→ 部門資訊應獨立為部門表,員工表只留部門編號 FK。

口訣:屬性不相依於其他非主屬性。

高階正規化速覽

正規化核心要求應用場景
4NF滿足 3NF + 表不包含一個實體的兩個或多個相互獨立的多值相依處理多值相依異常
5NF滿足 4NF + 表可分解為更小表(除非邏輯上擁有相同主鍵)連接相依異常極罕見
BCNF3NF 加強版:多個候選鍵、複合候選鍵、候選鍵重疊時無異常嚴格學術/關鍵系統

快速判斷備忘錄

  • 1NF:同筆記錄欄位數相同、每欄單一值、無重複欄位
  • 2NF:符合 1NF + 無「與部分主鍵相關」的欄位
  • 3NF:符合 2NF + 無「與主鍵無關」的欄位
  • 4NF:符合 3NF + 無獨立多值事實混在同表
  • 5NF:符合 4NF + 可無損分解為更小表
  • BCNF:多候選鍵/複合/重疊時仍無異常

實務建議

  1. 先識別業務實體與關係,繪製 ER 圖
  2. 依 1NF→2NF→3NF 逐級檢查調整
  3. 3NF 通常為產品級系統最佳平衡點
  4. 效能考量下可適度反正規化(加冗餘欄位、物化視圖),但需文件化與觸發器維護一致性
  5. 使用命名慣例:PK、FK、IX 明確標示

正規化不是教條,而是消除資料異常、保證一致性的系統化方法論。理解其背後邏輯,比死記定義更重要。

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