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

資料庫三大範式通俗易懂:從 1NF 到 3NF 的實戰理解

     編輯:PHP 相關知識

前言:拒絕千篇一律的複製貼上

網路上關於範式的文章多為照本宣科,連範例都如出一轍。本文基於個人理解重新闡述三大範式,若有疏漏歡迎指正(聯繫:279537592@qq.com)。

第一範式(1NF):原子性不可再分

官方定義:資料表每個欄位都是單一屬性,不可再分。
個人理解:只要是關聯式資料庫,預設就滿足 1NF。每個欄位只存單一值,不包含陣列、集合等複合結構。

第二範式(2NF):消除部分函數相依

官方定義:不存在非鍵欄位對任一候選鍵的部分函數相依。
個人理解:針對複合主鍵(AB),A 或 B 單獨不應能決定其他非鍵欄位。解決方案通常是引入單一代理鍵(如自增 ID)作為主鍵。

違反 2NF 範例:複合主鍵導致的資料冗餘

PKPK欄位 C
ABC
ADC
AEC

此處 (A,B) 為複合主鍵,但 A → C 存在部分相依,導致 C 隨 A 重複儲存。

符合 2NF(但未達 3NF)的改造:引入代理鍵

PK欄位 A欄位 B欄位 C
1ABC
2ADC
3AEC

雖滿足 2NF,但 A 與 C 仍有組合重複,違反 3NF。

第三範式(3NF):消除傳遞函數相依

官方定義:在 2NF 基礎上,不存在非鍵欄位對候選鍵的傳遞函數相依。
個人理解:非鍵欄位之間不應有相依關係,即 A → B → C 這種傳遞相依不應存在。

違反 3NF 範例

PKABCF
1ABCF
2ADCG
3AECK

此處 A 決定 C,C 再決定 F/G/K,產生傳遞相依。

符合 3NF 的拆分:分表消除傳遞相依

表 1:主實體

PKAB
1AB
2AD
3AE

表 2:屬性延伸

PKCF
1CF

透過外鍵關聯,徹底消除冗餘與異常。

實務提醒

  • 範式是指導原則,非鐵律。實際專案常因效能考量適度反正規化
  • 理解核心在於「一個事實在一個地方」,而非死記定義
  • BCNF、4NF、5NF 解決更複雜的相依,視業務複雜度決定是否應用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved