天天看點

邊學邊思考——資料庫中函數依賴與多值依賴的辨析

我們先複習下什麼是函數:函數是發生在集合之間的一種對應關系(我喜歡用圖了解)

邊學邊思考——資料庫中函數依賴與多值依賴的辨析

圖中表示的是函數中的單射、滿射和雙射。簡而言之就是集合的對應關系,而集合中的值一般滿足一對一和多對一的關系,不能存在一對多的關系。

基于上述對函數的了解,我們給出函數依賴的定義:

設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. 資料庫設計者根據現實規定做強制要求。例如規定不允許同名人出現,函數依賴“姓名→年齡”成立。所插入的元組必須滿足規定

的函數依賴,若發現有同名人存在, 則拒絕裝入該元組。