標籤:資料庫 多值依賴 函數依賴
我們先複習下什麼是函數:函數是發生在集合之間的一種對應關係(我喜歡用圖理解)
圖中表示的是函數中的單射、滿射和雙射。簡而言之就是集合的對應關係,而集合中的值一般滿足一對一和多對一的關係,不能存在一對多的關係。
基於上述對函數的理解,我們給出函數依賴的定義:
設R(U)是屬性集U上的關係模式,X,Y是U的子集,若對R(U)的任意一個可能的關係r,r中不可能存在兩個元祖在X上的屬性值相等,而在Y中的屬性值不等,則記為X→Y。簡而言之,函數依賴是某個屬性集決定另一個屬性集時,稱另一屬性集依賴於該屬性集。(事實上就是不能出現一對多的關係)
我們先區分函數依賴與屬性集中屬性的三種關係
設R(U)是屬性集U上的關係模式,X、Y是U的子集:
● 如果X和Y之間是1:1關係(一對一關聯性),如學校和校長之間就是1:1關係,則存在函數依賴X → Y和Y →X。
● 如果X和Y之間是1:n關係(一對多關聯性),如年齡和姓名之間就是1:n關係,則存在函數依賴Y → X。
●如果X和Y之間是m:n關係(多對多關係),如學生和課程之間就是m:n關係,則X和
用數學上的映射關係來理解,比如f(x)=2x;f(x,y)=x^+2y;f(x,y,z)=x+y-z等等,函數中變數元對應U中的X,所有X中的確定值經過函數關係的運算後組成Y。
其次,函數依賴包括以下幾種
1.平凡函數依賴
當關係中屬性集合Y是屬性集合X的子集時,存在函數依賴X→Y,即一組屬性函數決定它的所有子集,這種函數依賴稱為平凡函數依賴。
2.非平凡函數依賴
當關係中屬性集合Y不是屬性集合X的子集時,存在函數依賴X→Y,則稱這種函數依賴為非平凡函數依賴。
3.完全函數依賴
設X,Y是關係R的兩個屬性集合,X’是X的真子集,存在X→Y,但對每一個X’都有X’!→Y,則稱Y完全函數依賴於X。
4.部分函數依賴
設X,Y是關係R的兩個屬性集合,存在X→Y,若X’是X的真子集,存在X’→Y,則稱Y部分函數依賴於X。
5.傳遞函數依賴
設X,Y,Z是關係R中互不相同的屬性集合,存在X→Y(Y !→X),Y→Z,則稱Z傳遞函數依賴於X。(如果Y→X,則X→Z成立了)
用一個例子來理解上述的定義(A—\ →B表示A 不函數依賴於 B)
表1——學生(學號, 姓名, 性別, 年齡, 學院)
假設我們做表不允許重名
學號→ 性別, 學號 → 年齡, 學號→ 學院,學號←→ 姓名,,姓名→ 性別, 姓名→ 年齡,姓名→ 學院,但性別—\ →Sage
-----------------------------------------------------------------------------------------------------------------
表2——學生課程(學號,課程,成績)
學號→課程,(學號,課程)→成績
-----------------------------------------------------------------------------------------------------------------
表3——學院系(學號,系名,系主任)
學號 → 系名,系名 → 系主任
在上述例子中:
平凡函數依賴: (學號,課程)→學號,(學號,課程)→課程。
因為學號和課程都是(學號,課程)的子集。
非平凡函數依賴: (學號,課程)→成績(資料庫中討論得比較多是非平凡函數依賴,而平凡意義不大)
因為成績不是(學號,課程)的子集。
部分函數依賴:(學號,姓名)→ 性別
因為(學號,姓名)→ 性別 且 學號 → 性別
完全函數依賴:(學號,課程號)→ 成績
因為(學號,課程號)→ 成績,學號 —\→ 成績,課程號 —\→ 成績。
傳遞函數依賴: 學號 → 系主任
因為學號 → 系名,系名 → 系主任 且 系名 —\→ 學號。
而多值依賴呢?給出定義
多值依賴的定義:
設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為非平凡的多值依賴。
依然用函數的映射關係來理解,引入f(x,y),假設f(x,y)=+-(x^),若z=f(x,y),則一個x值可以得出兩個互為相反數的z。在這個二元函數關係中,y的取值事實上是不影響結果的。類比到關係模式上,即x為X集的屬性值,y為Y集的屬性值,z為Z集的屬性值。
看看一個例子
(課程C) ——(教師T)—(參考書B)
資料庫機率 —顧國生老師——數學分析
資料庫機率 —顧國生老師——高等代數
資料庫機率 —顧國生老師——微分方程
上述例子U{C,T,B},其中課程C和教師T唯一確定一組B,卻與T無關,經由C決定,然而T並不是空集,所以是非平凡的多值依賴。
事實上,當T為空白的時候,如果C中的每一個值c對應B中的一個確定的值,則變為函數依賴,所以函數依賴是多值依賴的一種特殊情況。
總計下:
1. 函數依賴不是指關係模式R的某個或某些關係執行個體滿足的約束條件,而是指R的所有關係執行個體均要滿足的約束條件。
2. 函數依賴是語義範疇的概念。只能根據資料的語義來確定函數依賴。(例如“姓名→年齡”這個函數依賴只有在不允許有同名人的條件下成立)
3. 函數依賴通常以集合抽閑出來討論。
4. 資料庫設計者根據需求對函數關係進行制定。例如認為“姓名→年齡”在特定表中可行。
5. 資料庫設計者根據現實規定做強制要求。例如規定不允許同名人出現,函數依賴“姓名→年齡”成立。所插入的元組必須滿足規定
的函數依賴,若發現有同名人存在, 則拒絕裝入該元組。
邊學邊思考——資料庫中函數依賴與多值依賴的辨析