三大範式+BCNF

1NF

  就是最基本的關係數據庫

你現在能用數據庫系統做出來的數據庫最低都是1NF

注意,1NF範式沒有主鍵(碼)

1NF是滿足 無重複列,每列都不可分隔

無重複列就是說,不能有兩個一樣的列名,就是不像這樣的:

字段1

字段1

字段2

字段3

 

每列不可分隔就是不象這樣的:

字段1

字段2

字段3

字段4

 

字段2.1

字段3.1

 

 

字段2.2

 

 

這樣的就是1NF

字段1

字段2

字段3

字段4

 

例子:

學生:Student(姓名, 年齡,所在學院, 學院地點, 學院電話);

選課關係:SelectCourse(姓名, 年齡,所在學院, 學院地點, 學院電話, 課程名稱, 成績)。

 因爲沒有主鍵,每門課程都要列出姓名,年齡等這些數據,這就是數據冗餘,更新或刪除操作都可能會出現異常,因爲你要更新或刪除一個學生,就需要對選課關係進行相關操作。
2NF

 

簡單的說 2NF就是在1NF上加上主鍵

下面這個就是2NF

簡單的說,就是每個字段都可以由主鍵來確定。

字段1(PK)

字段2

字段3

字段4

 

例子:

學生:Student(學號PK, 姓名, 年齡所在學院, 學院地點, 學院電話);

課程:Course(課程名稱PK, 學分);

選課關係:SelectCourse(學號PK, 課程名稱, 成績)。

這樣的數據庫表是符合第二範式的, 消除了數據冗餘、大部分,不是全部,但是1NF到2NF不是爲了消除數據冗餘,簡單的說就是爲了給了個主鍵,所以消除了部分數據冗餘更新異常、插入異常和刪除異常。

 


3NF

 

學生關係表爲Student(學號(PK), 姓名, 年齡, 所在學院, 學院地點, 學院電話)

關鍵字爲單一關鍵字"學號",因爲存在如下決定關係:(學號) → (姓名, 年齡, 所在學院, 學院地點, 學院電話)

這個數據庫是符合2NF的,但是不符合3NF,因爲存在如下決定關係:

(學號) → (所在學院) → (學院地點, 學院電話)

即存在非關鍵字段"學院地點"、"學院電話"對關鍵字段"學號"的傳遞函數依賴。

它也會存在數據冗餘、更新異常、插入異常和刪除異常的情況

把學生關係表分爲如下兩個表:

 

學生:(學號PK, 姓名, 年齡, 所在學院FK);

學院:(學院PK, 地點, 電話)。

 

這樣的數據庫表是符合第三範式的,消除了數據冗餘、更新異常、插入異常和刪除異常簡單的說,就是把會重複的東西另外放在一張表裏

BCNF

BCNF其實就是3NF的改進版。

假設倉庫管理關係表

StorehouseManage(倉庫ID(PK), 存儲ID(FK), 管理員ID(FK), 數量)

且有一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品這個數據庫表中存在如下決定關係:

(倉庫ID, 存儲物品ID) →(管理員ID, 數量)

(管理員ID, 存儲物品ID) → (倉庫ID, 數量)

 

這個表中唯一一個非關鍵字(非主鍵或非主碼):數量”。倉庫ID、存儲物品ID、管理員ID三個作爲關鍵字,決定了非關鍵字“數量”,所以滿足了3NF。但是,倉庫ID決定了管理員ID,管理員ID也決定了倉庫ID,所以存在了關鍵字決定了關鍵字,所以不符合BCNF

StorehouseMange關係表分解成下面:

 

倉庫管理:StorehouseManage(倉庫ID(FK), 管理員ID(FK));

倉庫:Storehouse(倉庫ID(PK), 存儲物品ID, 數量)。

 

這兩張滿足3NF並且不存在關鍵字決定關鍵字,所以滿足了BCNF。

發佈了41 篇原創文章 · 獲贊 53 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章