函數依賴概念理解與判斷
函數依賴:
符號表示:X→Y
定義:6.1設R(U)是屬性集U.上的關系模式,X, Y是U的子集。若對於R(U)的任意
一個可能的關系r,r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,
則稱X函數確定Y或Y函數依賴於X,記作X→Y。
理解定義:設X,Y為兩個集合,對於集合X中的所有元素,在Y中都能得到對應。
①當X值不同時:X既可以對應Y的相同元素,也能對應不同元素。
②當X值相同時:X只能對應Y中的相同元素。
判斷是否是函數依賴:
當然,偶認認真真讀了幾遍概念還是一臉懵逼QAQ但總不能不會,畢竟要還要應用,所以下面結合了比較容易理解的屬性間的關系來使用它,也就是通過一對一、一對多、多對一、多對多的關系來判斷兩個集合是否存在依賴關系。
首先來死背下面3條關系:
1.X和Y是一對一的關系,則X→Y,Y→X
2.X和Y是多對一的關系,則X→Y
3.X和Y是多對多或是一對多的關系,則X與Y不存在依賴關系~
實例:對於表Student(sno,sname,ssex,cno,scourse,grade),先說明一個大前提,這里沒有任何規定,因此默認姓名、課程名、分數和性別在表中允許存在相同的值,學號和課程號都不允許存在相同的值。
判斷下列依賴關系是否正確:
①sno→sname ②sno→ssex ③(sno,sname)→scourse ④(sno,cno)→grade
①sno→sname:一個姓名可以決定多個學號,一個學號只能決定一個姓名,這里不要懵哇,想想,2個同名的人是不是有兩個學號!!因此學號和姓名是多對一的關系,所以有sno→sname
②sno→ssex:一個性別可以決定多個學號,一個學號只能決定一個性別,所以有sno→ssex
③(sno,sname)→scourse:一個姓名和一個學號可以決定多門課程,一門課程決定多個學號和姓名選修,因為一個學生能夠選修多門課程嘛,一門課程也能被多個學生選修,所以學號和姓名二者跟課程是多對多的關系,不存在函數依賴,不能得出(sno,sname)→scourse
④(sno,cno)→grade:一個姓名和一個課號可以決定一個分數,一個分數可以決定多個姓名和課號,因為一個學生選修一門課考完試當然只有一個成績啦,一個分數能夠有很多人考到,比如100分就特別多(干巴爹!你就是其中一個!),因此學號和課號二者跟分數是多對一的關系,因此可以得出,(sno,cno)→grade
so懂了叭還不懂偶也莫得了xddd
非平凡函數依賴:
符號表示:X→Y,Y⊊X
定義:當關系中屬性集合Y不是屬性集合X的子集時,存在函數依賴自X→Y,則稱這種函數依賴為非平凡函數依賴。
理解定義:理解了函數依賴就好理解這個了,X決定Y,而Y不是X的子集。
實例:選擇題:在關系SC(Sno,Cno,Grade)中,非平凡函數依賴包括()。
A.(Sno,Cno)→Sno
B.(Sno,Cno)→Cno
C.(Sno,Cno)→Grade
D.(Sno,Grade)→Cno
先看AB,雖然AB的依賴關系都是正確的,但是A中Sno作為Y,(Sno,Cno)作為X,Sno存在(Sno,Cno)中,也就是X→Y,Y⊆X,因此屬於平凡函數依賴,B同理~,C的依賴關系也是正確的,還不懂咋判斷依賴關系往上看哇233,Grade也不在(Sno,Cno)中,所以有X→Y,Y⊊X,故選C,再看D,一個學號和一個分數可以決定多個課號,一門課號可以決定多個學號和分數,比如偶的數據結構考了80分,會計學基礎考了80分(滑稽,好吧嚴肅點把會計學當然程序設計語言吧,畢竟偶只是計算機專業),數據結構可以有很多名學生的考試成績,因此,(Sno,Grade)與Cno是多對多的關系,不存在依賴關系,本身式子糾錯啦233
平凡函數依賴:
定義:X→Y,但Y⊆x,則稱X→Y是平凡的函數依賴。對於任一 關系模式,平凡函數依賴
都是必然成立的,它不反映新的語義。若不特別聲明,總是討論非平凡的函數依賴。
偷懶:這里就不一一理解啦,跟非平凡依賴差不多相反的啦der~~
完全函數依賴:
書上講得好哇哈哈哈哈哈
部分函數依賴:
講得好哇蛤蛤哈
完全函數依賴和部分函數依賴的判斷:
對於表Student(sno,cno,Grade,Sdept),默認分數和系別在表中允許存在相同的值,學號和課程號都不允許存在相同的值。
(字丑該挨打
傳遞函數依賴:
對於表Student(sno,cno,Grade,Sdept),默認分數和系別在表中允許存在相同的值,學號和課程號都不允許存在相同的值。