作者 : Dolphin
原文地址: http://blog.csdn.net/qingdujun/article/details/27365979
一、第一范式 1NF
要求:每一個分量必須是不可分的數據項。
特點:
1)有主鍵,且主鍵不能為空。
2)字段不能再分。
示例:(以下例子 不滿足 第一范式)
/*學號 年齡 信息*/ Sno Sage Sinfo 1001 19 陝西省西安市,電話:10086 1001 20 陝西,寶雞
主鍵:Sno
不滿足原因:1)主鍵重復。2)Sinfo字段可以再分。
二、第二范式 2NF
要求:在范式一的基礎上,且每一個非主屬性完全函數依賴於碼。
特點:
1)滿足第一范式。
2)表中的每一個非主屬性,必須完全依賴於本表碼。
3)只有當一個表中,主碼由兩個或以上的屬性組成的時候,才會出現不符合第二范式的情況。
示例:(以下例子 不符合 第二范式)
/*學號 課程號 得分 課程名*/ Sno Cno Score Sname 1001 001 99 數據庫
主鍵: Sno,Cno
不滿足原因:Sname不完全依賴於碼,課程名部分依賴於碼Cno。
三、第三范式 3NF
要求:在滿足第二范式的基礎上,且每一個非主屬性既不部分依賴於碼也不傳遞依賴於碼。
特點:
1)滿足第二范式。
2)非主屬性不能傳遞依賴於碼。
示例:(以下例子 不符合 第三范式)
/*學號 系別 系主任*/ Sno Sdept Shead 1001 計算機系 張三
主鍵:Sno
不滿足原因:Shead傳遞依賴於碼,Sno->Sdept->Shead,可得Sno->Shead。
四、BCNF
要求:在滿足第三范式的基礎上,且不允許主鍵的一部分被另一部分或其它部分決定。
特定:
1)滿足第三范式。
2)所有非主屬性對每一個碼都是完全函數依賴。
3)所有的主屬性對每一個不包含它的碼,也是完全函數依賴。
4)沒有任何屬性完全函數依賴於飛碼的任何一組屬性。
示例:(以下例子 不符合 第BCNF范式)
/*學生 老師 課程*/ Stu Teacher Course 張三 李開復 數據庫
假設:每個老師只教一門課。
候選碼:
(Stu,Teacher)->Course
(Stu,Course)->Teacher
這兩個碼由兩個屬性組成,而且它們是相互交叉的,所以不存在傳遞依賴,所以為3NF。
但是由於:Teacher->Course,(主鍵的一部分被另一部分決定),所以不符合BCNF。
參考文獻:王珊,薩師煊.數據庫系統概論(第4版) [M].北京:高等教育出版社,2006.170-178.
GISerYang博客園.第一范式,第二范式,第三范式[CP/OL].http://www.cnblogs.com/GISerYang/archive/2012/05/09/2491996.html ,2012-05-09/2014-05-28.
Ruthless博客園.數據庫設計三大范式[CP/OL].http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html ,2012-04-01/2014-05-28.
AllenLSY 孤而無寂的CSDN博客.第一范式,第二范式,第三范式,BCNF[CP/OL].http://blog.csdn.net/allenlsy/article/details/5356899 ,2010-03-08/2014-05-28