關系模式中的各屬性之間的相互依賴,相互制約的聯系稱為數據依賴。
數據依賴一般分為函數依賴,多值依賴,連接依賴,最重要的是函數依賴。
1.函數依賴是關系模式中屬性之間的一種邏輯依賴關系。
下面是展示的3個關系示例:
學生關系:S(SNO,SN,AGE,DEPT);
選課關系:SC(SNO,CNO,SCORE);
系關系:D(DEPT,MN);
由於一個SNO對應一個學生,而一個學生只屬於一個系,所以當SNO確定之后,SN,AGE,DEPT的值也唯一確定了,可以說SNO決定函數(SN,AGE,DEPT),或者是(SN,AGE,DEPT)函數依賴於SNO。或者表示為:SN0->(SN,AGE,DEPT);可以抽象成:X->Y(Y依賴於X,X決定Y)。
平凡依賴與非平凡依賴
非平凡函數依賴和部分函數依賴的區別就在於X包不包含Y,也就是Y是不是X的子集的區別。
比如:非平凡:SN0->(SN,AGE,DEPT)
平凡:(SNO,CNO)->CNO
函數依賴反應了一種語義完整性約束,比如SN->AGE,這種必須是在學生沒有重名的條件下才能成立。
2.函數依賴與屬性之間的聯系類型有關
在一個關系模式中,如果屬性X與Y有1:1聯系,則存在X<->Y,比如如果學生不存在重名,SNO<->SN
如果X與Y有1:m關系,比如SNO與AGE之間為1:m聯系,SNO->AGE,SNO->DEPT(班級)
如果是m:n,則不存在任何函數依賴,比如一個學生可以選擇多門課程,這個課程可以由多個學生選擇
3.函數依賴的存在與否與時間無關
因為函數依賴是指關系中的所有元組應該滿足的約束條件,而不是關系中的某個或某些元組所滿足的約束條件。關系中的元組的增刪改都不能破壞這種函數依賴,
所以必須根據語義來確定屬性之間的函數依賴,不是根據某一時刻關系中的實際數據來判斷
4.函數依賴的定義
設關系模式R(U),U是屬性全集,X和Y是U的子集,如果X->Y,並且對於X的任何一個真子集X',都有X'不決定Y,則稱Y對完全函數依賴。否則稱為部分函數依賴。
注意:只有當決定因素是組合屬性的時候,討論部分依賴才有意義,當決定因素是單屬性的時候,只能是完全函數依賴。
比如:SNO->(SN,AGE,DEPT),決定因素是SNO,不存在部分函數依賴。
設關系模式R(U),U是屬性全集,X和Y是U的子集,X,Y,Z是U的子集。若X->Y,Y->Z,但Y不決定X,則稱Z對X傳遞函數依賴,但是如果X<->Y,則稱Z對X直接函數依賴。
比如:學號->班級,班級->講師,但是講師不能決定班級,所以講師對學號是傳遞函數依賴。假設學生不重名,學號決定學生名,學生名決定學號,學生名決定了班級,這時候班級對學號是直接函數依賴。