SQL 第一范式、第二范式、第三范式、BCNF


作者 : 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM