關系數據庫中的函數依賴


 關系模式中的各屬性之間的相互依賴,相互制約的聯系稱為數據依賴。

數據依賴一般分為函數依賴,多值依賴,連接依賴,最重要的是函數依賴。

 

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直接函數依賴。

比如:學號->班級,班級->講師,但是講師不能決定班級,所以講師對學號是傳遞函數依賴。假設學生不重名,學號決定學生名,學生名決定學號,學生名決定了班級,這時候班級對學號是直接函數依賴。

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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