第一範式 第二範式 第三範式 BCNF範式

範式是符合某一種級別的關係模式的集合。關係數據庫中的關係必須滿足一定的要求,滿足不同程度要求的爲不同範式。

不同範式之間的包含關係爲:
在這裏插入圖片描述

第一範式(1NF)

數據庫表中的字段都是單一屬性的,不可再分。

例子:
錄入學生信息表:【學生】(姓名,學號,性別,住址)在實際註冊信息登記時,經常會有家庭住址和現住址,那麼這種表結構設計是不符合1NF的。要達到滿足1NF的設計,就需要把住址拆分爲兩列,即:【學生】(姓名,學號,性別,家庭住址,現住址)。

第二範式(2NF)

首先是1NF,所有非主屬性必須依賴於整個主碼而不能依賴於主碼的部分屬性。

例子:
考慮學生成績表:【成績表】(學號,姓名,性別,課程,課程編號,課程學分,分數)在實際生活中,是可能出現重名的情況,所以姓名不能作爲主鍵。由於學號的唯一性,所以學號是可以作爲主鍵的。而一個學生修讀多門課程,每一門課程對應一個分數,僅僅一個學號是不足於獲得完整成績表的。顯而易見,要獲得整個成績表,還需要課程。那麼學號只能算是主鍵的一部分,主鍵應該是(學號,課程)。其中,只有成績這一列是完全依賴取決於主鍵(學號,課程),姓名和性別只依賴於學號,而課程編號和課程學分只依賴於課程。所以這個學生成績表是不符合2NF的設計結構的。不符合2NF的設計結構會產生冗餘數據。可以將表拆分爲三個表:【成績表】(學號,課程,成績),【學生】(姓名,性別),【課程信息】(課程編號,課程學分)以達到消除冗餘重複數據的目的。

第三範式

首先是2NF,另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴,非主鍵屬性之間無依賴關係。(即不能存在:非主鍵列A依賴於非主鍵列B,非主鍵列B依賴於主鍵的情況)

例子:
學生信息表:【學生】(學號,姓名,性別,電話,住址)主鍵是(學號),其它非主鍵(姓名,性別,電話,住址)完全依賴於主鍵(學號),那麼首先這個表是符合2NF的。但是,這些非主鍵(性別,電話,住址)直接依賴的是非主鍵(姓名),通過傳遞依賴才依賴的主鍵(學號),是不符合3NF的結構設計的。拆分表爲【學生】(學號,姓名)和【學生信息】(姓名,性別,電話,住址)滿足3NF設計要求。

BCNF

數據庫表中不存在任何字段對任一候選關鍵字段的傳遞函數依賴。

例子:
假設倉庫管理關係表爲StorehouseManage(倉庫ID, 存儲物品ID, 管理員ID, 數量),且有一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品。

這個數據庫表中存在如下決定關係:
(倉庫ID, 存儲物品ID) →(管理員ID,
數量)
(管理員ID, 存儲物品ID) → (倉庫ID,
數量)

我們可以知道(倉庫ID, 存儲物品ID)和(管理員ID, 存儲物品ID)都是StorehouseManage的候選關鍵字,表中的唯一非關鍵字段爲數量,它是符合第三範式的。但是,由於存在如下決定關係:
(倉庫ID) → (管理員ID)
(管理員ID) → (倉庫ID)
即存在關鍵字段決定關鍵字段的情況,所以其不符合BCNF範式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章