自己在家搗鼓了很久還是沒弄明白什么是多值依賴,今天網課老師留了題“舉出三個多值依賴的例子”,最后看了老師的例子,聽了講解,終於弄明白了怎么判斷,怎么舉例,什么是多值依賴。
先放上多值依賴的定義:
設R(U)是屬性集U上的一個關系模式。X,Y,Z是U的子集,並且Z=U-X-Y。關系R(U)中多值依賴X→→Y成立,當且僅當對R(U)的任一關系r,給定的一對(x,z)值,有一組Y的值,這組值僅僅決定於x的值而與z值無關。
看概念是很抽象生硬,不便於理解的,通過幾個例子來讓我們進行最通俗的講解。
例1:
MSC(M,S,C)中,M表示專業,S表示學生,C表示該專業必修課,假設每個專業有多個學生,有一組必修課,設同專業內所有學生選修的必修課相同。
實例如下,按照語義對於M的每一個值M,S有一個完整的集合對應,而不問C取何值,所以M→→S,由於C與S的完全對稱性,必然有M→→C成立。
M S C
M1 S1 C1
M1 S1 C2
M1 S2 C1
M1 S2 C2
··· ··· ···
也就是說,一個專業對應若干個學生,他們之間的關系是一對多(1:n),是多值依賴M→→S;一個學生對應多個必修課,而一個必修課也對應多個學生,他們之間的關系是多對多(n:m);其實M與C沒有直接關系,有的只是間接關系(借助C),只是因為C與S完全對稱,所以可以推出專業和必修課也是多值依賴M→→C(一對多1:m)。
例2:
關系模式ISA(I,S,A)中,I表示學生興趣小組,S表示學生,A表示某興趣小組的活動項目。假設每個興趣小組有多個學生,有若干活動項目,每個學生必須參加所在興趣小組的所有活動項目,每個活動項目要求該興趣小組的所有學生參加。
實例關系如下,按照語義對於I的每一個值I,S有一個完整的集合對應,而不問A取值如何,所以I→→S,由於S與A的完全對稱性,必然有I→→A成立。
I S A
I1 S1 A1
I1 S1 A2
I1 S2 A1
I1 S2 A2
··· ··· ···
也就是說,一個興趣小組I對應若干個學生S,他們是一對多的關系(1:n),是多值依賴I→→S;一個學生參加多個活動項目A,而一個活動項目又對應多個學生,他們之間的關系是多對多(n:m);其實I與A沒有直接關系,有的只是間接關系(借助S),只是因為S與A完全對稱,所以可以推出專業和必修課也是多值依賴I→→A(一對多1:m)。
例3:
關系模式RDP(R,D,P)中,R表示醫院的病房,D表示護士,P表示病人。假設每個病房有若干護士看管,有若干病人,每個護士必須看管所在病房的所有病人,每個病人要求是要被所在病房的所有護士看管的。
實例關系如下,按照語義對於R的每一個值R,D有一個完整的集合對應,而不問P取值如何,所以R→→D,由於D與P的完全對稱性,必然有R→→P成立。
R D P
R1 D1 P1
R1 D1 P2
R1 D2 P1
R1 D2 P2
··· ··· ···
也就是說,一個病房R對應若干個護士D,他們是一對多的關系(1:n),是多值依賴R→→D;一個護士看護多個病人,而一個病人需要多個護士看護,他們之間的關系是多對多(n:m);其實R與P沒有直接關系,有的只是間接關系(借助D),只是因為D與P完全對稱,所以可以推出病房和病人之間也是多值依賴R→→P(一對多1:m)。
例4(課本上的經典例題):
關系模式WSC(W,S,C)中,W表示倉庫,S表示保管員,C表示商品,假設每個倉庫又若干名保管員,若干個商品,每個保管員保管所在倉庫的所有商品,每種商品被所有保管員保管。
實例如下,按照語義對於W的每一個值W,S有一個完整的集合對應,而不問C取何值,所以W→→S,由於C與S的完全對稱性,必然有W→→C成立。
W S C
W1 S1 C1
W1 S1 C2
W1 S2 C1
W1 S2 C2
··· ··· ···
也就是說,一個專業對應若干個學生,他們之間的關系是一對多(1:n),是多值依賴W→→S;一個學生對應多個必修課,而一個必修課也對應多個學生,他們之間的關系是多對多(n:m);其實M與C沒有直接關系,有的只是間接關系(借助C),只是因為C與S完全對稱,所以可以推出專業和必修課也是多值依賴W→→C(一對多1:m)。
其實還有一種方法可以判斷是否該關系模式存在多值依賴:
以例3為例,找到屬性W相同值和屬性S不同值的任意兩個元組,交換他們的S值,重新組成的新元組如果都可以在這個表內找到,那么就存在多值依賴。比如取第一行和第四行,將這兩行的S1和S2互換,得到新元組(W1,S2,C1)和(W1,S1,C2),我們發現這兩個元組在原表內都存在(在第二行和第三行),其他的也是這樣,那么該關系模式就存在多值依賴。