在了解范式問題之前狱庇,需要明確的概念
(1)鍵和碼在數(shù)據(jù)庫中真是傻傻分不清楚
候選碼:不含多余屬性的超碼,即對于候選碼,若要多刪除一個屬性偎痛,就不是超碼
超碼:在關系中,能唯一標識元組的屬性集
主鍵:用戶選作元組標識的一個候選鍵稱為主鍵
一個實體集可以有多個候選碼独郎,但是只能有一個主鍵
主屬性:候選碼中的屬性
非主屬性:與主屬性相對的屬性即為非主屬性
已知關系模式R踩麦,R中屬性A以及R上的函數(shù)依賴集F枚赡,如果A包含在R的某個候選鍵中,則稱A為主屬性靖榕,否則為非主屬性
如何求關系模式的候選鍵标锄?
可以從函數(shù)依賴的角度進行求解
(2)函數(shù)依賴問題
U{A1,A2茁计,…料皇,An}是屬性集合,R(U)是U上的一個關系星压,x践剂、y是U的子集。若對于R(U)下的任何一個可能的關系娜膘,均有x的一個值對應于y的唯一具體值逊脯,稱y函數(shù)依賴于x,記作x→y竣贪。?? 其中x稱為決定因素
部分函數(shù)依賴:設X,Y是關系R的兩個屬性集合军洼,存在X->Y,若存在集合Xˊ是X的真子集演怎,存在Xˊ->Y匕争,則Y部分依賴于X
完全函數(shù)依賴:設X,Y是關系R的兩個屬性集合,存在X->Y爷耀,集合Xˊ是X的真子集甘桑,但對于任意一個Xˊ!->Y,則Y完全函數(shù)依賴于X
傳遞函數(shù)依賴:設關系模式R歹叮,X,Y,Z是R的屬性子集跑杭,若存在X->Y,Y!->X咆耿,Y->Z德谅,則有X->Z,即Z傳遞依賴于X
平凡函數(shù)依賴:如果X->Y萨螺,且Y屬于X女阀,即Y是X的子集,則X->Y是平凡的函數(shù)依賴
非平凡函數(shù)依賴:與非平凡函數(shù)依賴對應的就是非平凡函數(shù)依賴
e.g. R(A,B,C)? 其中函數(shù)依賴集為F={B->C, B->A, A->BC}屑迂,判斷R是幾范式:
R是BCNF,主鍵是A(或者B)冯键,非主屬性為BC(或者AC)惹盼,不存在傳遞依賴和 部分依賴,所以為BCNF惫确。注意??:雖然A ->B->C手报,但是B->A蚯舱,違背了傳遞函數(shù)依賴的定義,所以A->B->C 不是傳遞函數(shù)依賴
回到開始提到的那個問題掩蛤,如何求得關系模式的候選鍵枉昏?
從函數(shù)依賴集的角度出發(fā),可以將屬性(組)分成以下幾類:
(1)L類:全部出現(xiàn)在函數(shù)依賴的左半部
(2)R類:全部出現(xiàn)在函數(shù)依賴的右半部
(3)LR類:出現(xiàn)在函數(shù)依賴的左右兩邊
(4)N類:不出現(xiàn)在函數(shù)依賴中
其中揍鸟,可能成為候選鍵的有L類兄裂,LR類和N類,
對于L類:求出它的閉包阳藻,如果閉包包含所有屬性晰奖,則其成為唯一的候選鍵
對于LR類:求出其閉包,如果包含所有屬性腥泥,則為候選鍵
對于N類:直接成為候選鍵
INF:如果一個關系模式R中的每個屬性A的域值都是原子的匾南,即屬性值是不可再分的,則關系模式R屬性第一范式
2NF:設關系模式R(U,F)蛔外,U是屬性集合蛆楞,F(xiàn)是函數(shù)依賴集合,如果R是INF且所有非主屬性完全依賴于R的每個鍵夹厌,則R是第二范式
3NF:設關系模式R(U,F)豹爹,如果R是第二范式,且在R中沒有非主屬性傳遞依賴于R的鍵尊流,則R是第三范式
BCNF:設關系模式R(U,F)帅戒,如果R是第三范式,且R中沒有任何屬性傳遞依賴于R的鍵崖技,則R是BCNF