第一范式(1NF):
列1唯一確定列2, 列3, 列4, ...,即列2, 列3, 列4, ...不能再分裂出其它列。
假設有關系模式列1: 訂單名; 列2: 商品。一個訂單下可以有多個商品,即列2: 商品可以分裂成商品A, 商品B, 商品C, ...,所以列1: 訂單名; 列2: 商品這樣的關系模式不符合第一范式。
第二范式(2NF):
滿足2NF的前提是必須滿足1NF。
此外,關系模式需要包含兩部分內容。一是必須有一個(及以上)主鍵;二是沒有包含在主鍵中的列必須全部依賴於全部主鍵,而不能只依賴於主鍵的一部分而不依賴全部主鍵。
定義聽起來有點繞,不慌,直接看圖,只有全部的非主鍵列依賴於全部主鍵,才滿足第二范式。
第三范式(3NF):
滿足3NF的前提是必須滿足2NF。
另外關系模式的非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。即不能存在:非主鍵列m既依賴於全部主鍵,又依賴於非主鍵列n的情況。
定義聽起來還是有點繞,不慌,直接看圖,只要非主鍵內部存在傳遞依賴,就不滿足第三范式。
假設存在關系模式主鍵1: 課程編號; 列1: 教師名; 列2: 教師家庭地址。顯然滿足第一范式和第二范式,但是教師家庭地址傳遞依賴於教師名,所以不滿足第三范式。
示例:
設有課程關系模式如下:R(C#, Cn, T, Ta)(其中C#為課程號,Cn為課程名,T為教師名,Ta為教師地址),並且假定不同的課程號可以有相同的課程名,每門課程只有一位任課教師,但每名教師可以有多門課程。關系R范式最高達到()。
A)1NF
B)2NF
C)3NF
D)BCNF
【正確答案】B
【解析】
一個“課程號”確定一個“課程名”,確定一個“教師名”,確定一個“教師地址”,所以符合第一范式;
“課程號”是無重復的,所以“課程號”是主鍵,“課程名”、“教師名”、“教師地址”均是可重復的,所以它們都是非主鍵列並完全依賴於主鍵“課程號”,所以符合第二范式;
非主鍵列“教師地址”傳遞依賴於非主鍵列“教師名”,所以不符合第三范式,故選B。
原文鏈接:https://blog.csdn.net/weixin_43971764/article/details/88677688