先了解以下幾個概念:
完全函數依賴:X->Y,並且對於X的任何一個真子集X`,都有X`不能推出Y
部分函數依賴:X->Y,並且存在X的一個真子集X`,有X`->Y
碼:能夠確定出其他屬性 的 屬性或者屬性組合
主屬性:碼中的屬性
非主屬性:不存在於任何碼中的屬性
範式分爲四種:
- 第一範式 (1NF)
- 第二範式 (2NF)
- 第三範式 (3NF)
- BCNF (通常認爲是第三範式的修正)
範式判斷:
- 第一範式
如果一個關係模式R的所有屬性都是不可分的基本數據項,則R∈1NF。簡單的說,就是每一個列(屬性),不能再分割成多個列(屬性)。 - 第二範式
在滿足第一範式的基礎上,非主屬性完全函數依賴於任何一個候選碼,則爲第二範式
舉例:有一個關係模式S-L-C(Sno,Dept,Sloc,Cno,Grade),其中Sno 是學號,Dept是學院,Sloc是住所,Cno是班級,Grade是成績
其中的函數依賴有
(Sno,Cno)->Grade (此關係是完全函數依賴)
Sno->Sdept,(Sno,Cno)->Sdept(此關係是部分函數依賴)
Sno->Sloc,(Sno,Cno)->Sloc,
Sdept->Sloc
以上的函數依賴關係中,存在部分函數依賴,所以此關係模式不是第二範式 - 在滿足第二範式的基礎上,每一個非主屬性既不傳遞依賴於碼,也不部分依賴於碼
舉例:有一個關係模式S-L(Sno,Sdept,Sloc)
其中的函數依賴有:
Sno->Sdept,
Sdept->Sloc,
Sno->Sloc,
以上的函數依賴關係可以看出,Sdept完全依賴於Sno,Sloc完全依賴於Sdept,Sloc完全依賴於Sno,而Sno不依賴於Sdept,從而判斷出Sno和Sloc存在傳遞依賴關係.所以此關係模式不是第三範式 - 在滿足第三範式的基礎上
1.所有非主屬性對每一個碼都是完全函數依賴
2.所有主屬性對每一個不包含它的碼也是完全函數依賴
3.沒有任何屬性完全函數依賴於非碼的任何一組屬性
判斷訣竅:
第一步:根據關係模式,寫出所有的函數依賴關係,碼,主屬性,非主屬性
第二步:在所有的函數依賴關係中,判斷是否存在部分依賴和傳遞依賴
第三部:所有主屬性對每一個不包含它的碼也是完全函數依賴
第四步:沒有任何屬性完全函數依賴於非碼的任何一組屬性