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

資料庫設計範式完全指南:1NF 到 BCNF 逐層解析

     編輯:關於SqlServer

關聯式資料庫設計需遵循範式以消除異常、減少冗余。本文系統整理 1NF、2NF、3NF、BCNF 定義、違反情形、分解方法與權衡原則。

第一範式 (1NF):原子性

每個屬性值皆為不可再分割的最小單位。

違反例:員工(工號, 姓名, 電話) -- 一人有多支電話
解法:
1. 重複工號姓名 (電話為主鍵) -- 不推薦
2. 電話拆分為 公司電話、住宅電話
3. 強制單一電話 (視業務而定)

第二範式 (2NF):完全函數相依

所有非主屬性完全相依於任一候選鍵 (無部分相依)。

違反例:選課(學號, 課號, 成績, 學分) -- 鍵(學號,課號),學分僅相依課號
解法:分解為 選課(學號,課號,成績) + 課程(課號,學分)

第三範式 (3NF):無傳遞相依

非主屬性不傳遞相依於任何候選鍵。

違反例:學生(學號, 姓名, 系號, 系名, 系址) -- 學號→系號→系名/系址
解法:分解為 學生(學號,姓名,系號) + 系(系號,系名,系址)

BCNF:強化 3NF,主屬性亦不傳遞相依

每個決定因素皆包含候選鍵。

違反例:倉管(倉庫, 配件, 員工, 數量)
條件:(倉庫,配件)→員工,員工→倉庫,(員工,配件)→數量
候選鍵:(倉庫,配件)、(員工,配件)
主屬性員工決定倉庫,但員工非超鍵 → 違反 BCNF
解法:分解為 管理(員工,配件,數量) + 所屬(員工,倉庫)
代價:函數相依 (倉庫,配件)→員工 遺失,需靠觸發器維護

範式階層關係

BCNF ⊃ 3NF ⊃ 2NF ⊃ 1NF

設計原則與權衡

  • 目標:結構合理、消除異常、冗紅最小、操作高效。
  • 原則:概念單一化「一事一地」,一個關聯描述一個實體或關係。
  • 方法:投影分解為多個關聯,自然聯接可無損還原。
  • 現實妥協:高查詢低更新系統可保留受控冗余 (如維度表非正規化) 提升查詢速度;不必強求全達 BCNF。

進階範式預告

4NF 處理多值相依,5NF 處理連接相依,適用於極複雜語義建模,實務較少見。

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