天天看點

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

範式是符合某一種級别的關系模式的集合。關系資料庫中的關系必須滿足一定的要求,滿足不同程度要求的為不同範式。

不同範式之間的包含關系為:

第一範式 第二範式 第三範式 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範式。

繼續閱讀