多值依賴與部分函數依賴 轉
終於理解了多值依賴 轉自http://blog.csdn.net/smstong
"
多值依賴的定義:
設R(U)是一個屬性集合U上的一個關系模式,X, Y, 和Z是U的子集,並且Z=U-X-Y,多值依賴X->->Y成立當且僅當對R的任一個關系r,r在(X,Z)上的每個值對應一組Y的值,這組值僅僅決定於X值而與Z值無關。
若X->->Y,而Z=空集,則稱X->->Y為平凡的多值依賴。否則,稱X->->Y為非平凡的多值依賴。
可以看出,如果把上面的一組改為一個,那么多值依賴就變成了函數依賴。當然一個值組成的組也是組,所以說,函數依賴是多值依賴的特殊情況。
如下表:
課程C 教師T 參考書B
數學 鄧軍 數學分析
數學 鄧軍 高等代數
數學 鄧軍 微分方程
表中,U = C+T+B,(C,T)確定一組B,但是這組B其實與T無關,僅由C確定,所以(C,T)->->B。又因為T不是空集,所以(C,T)->->B為非平凡多值依賴。
要想消除多只依賴,可以分解為:(C,T), (C,B)及
表1:
課程C 教師T
數學 鄧軍
表2:
課程C 參考書B
數學 數學分析
數學 高等代數
數學 微分方程
對於R中的每個非平凡多值依賴X->->Y(Y不屬於X),X都含有候選碼,則R屬於4NF。
分析:對於每一個非平凡多值依賴X->->Y,X若含有候選碼,也就是X->Y,所以4NF所允許的非平凡多值依賴是函數依賴。
"
.
百度知道
"
函數依賴是唯一確定的關系,例如在一個表 授課(課程號,課程名,課程學分,教師號,教師姓名,參考書號,參考書名)。當然這個表的主鍵是(課程號,教師號,參考書號)
課程名和課程學分函數依賴課程號,也就是說課程號唯一確定名字和學分;
同理,教師姓名函數依賴教師號;參考書名函數依賴參考書號。
但是,教師號可能多值依賴課程號,因為給定一個(課程號,參考書號)的組合,可能有對應多個教師號。這是因為多個老師可以使用相同或不同的參考書上同一門課。
簡單點講,函數就是唯一確定的關系;多值依賴卻不能唯一確定。
"
.
我是看了百度知道才明白的, 標公式的都去使啊看都看不懂, 部分函數依賴是一種特殊的多值依賴, 多值依賴是有多個教師依賴到同一個(課程號,參考書號)組合里了, 而部分函數依賴只是一個教師依賴一個(課程號,參考書號), 就是單單老王依賴於(01,數據庫)中的01了, 這是部分函數依賴, 如果還有個老五也依賴於(01,數據庫)中的01的話, 就是多值依賴了, 有n個值部分函數依賴於一個東西上了
.
貼一個分解為4NF的步驟
"
一般情況求主鍵只看函數依賴,但一般也不是與多值依賴無關
你說的問題有點象將一個關系分解成4NF,分解成4NF的步驟
1.先將該關系模式分解成BCNF,消除了基於函數依賴的多值依賴不包含碼,因為各個子模式中的函數依賴的左部都包含碼(書上有分解成BCNF的方法)
2.再在各個分解成BCNF的關系模式中,看是否有不是基於函數依賴的非平凡的多值依賴,也就是說例如一個子模式存在X-->Y,X-->Z,Z=U-X-Y,Z非空集,此時必定X不->Y且X不->Z,
分解成(X,Y)和(X,Z)就將該子模式分解成4NF了,理論上是這樣,當然在一般的數工考試題目中不需要這樣,有時當分解成3NF和BCNF時,原有的多值依賴就破壞了.