摘要:多值依賴對學習關系規范化理論方面有著重要的作用。本文就多值依賴的產生、定義、性質及如何消除由此引起的冗余等方面進行了簡單的歸納總結。
關鍵詞:多值依賴 冗余 關系規范化
一、多值依賴的產生
在學習數據庫的相關知識時,我們會接觸到關系數據庫設計規范化的內容。在構造關系時,經常會發現數據冗余和更新異常等現象,這是由關系中各屬性之間的相互依賴性和獨立性造成的,也就是關系中的函數依賴和多值依賴。其中在函數依賴的范疇中,如果一個關系數據庫中的所有關系模式都滿足于BC范式,它就實現了模式的徹底分解,達到最高的規范化程度。下面給出其關系模式規范化流程圖:
1NF
↓ 消除非主屬性對鍵碼的部分依賴
2NF
↓ 消除非主屬性對鍵碼的傳遞依賴
3NF
↓ 消除主屬性對鍵碼的部分和傳遞依賴
BCNF
但是我們有時會遇到這樣的情況,設計一個關系模式滿足BC范式,但該關系依然有和函數依賴無關的某種冗余。請看如下一個例題:
設學校中某一門課程由多個教師講授,他們使用相同的一套參考書。用關系模式Teaching(C,T,B)來表示課程C、教師T和參考書B之間的關系。
用二維表表示如下:
經過分析得出該關系模式主屬性為(C,T,B),屬于BC范式;但是它存在以下問題:
1. 數據冗余度大,有多少名任課教師,參考書就要存儲多少次;
2. 增加操作復雜,當某一課程增加一名任課教師時,該課程有多少本參考書,就必須插入多少個元組;
3. 刪除操作復雜,某一門課程要去掉一門參考書,該課程有多少名教師,就必須刪除多少個元組;
4. 修改操作復雜,某一門課程要修改一門參考書,該課程有多少名教師,就必須修改多少個元組。
產生這些問題的原因是參考書和教師的取值彼此獨立,它們都只取決于課程名,也就是存在多值依賴。
二、多值依賴的定義
假設關系模式為R(A,B,C),其中A,B,C均為屬性(集)。如果在A上取特定值,而在B上取值的集合與在C上取值的集合無關,則稱多值依賴A→B在R中成立。多值依賴A→B可稱為A多值決定B或B多值依賴于A。
三、多值依賴的性質
1. 對稱性:若A→B,則A→C,其中C=R-X-Y;
2. 函數依賴是多值依賴的特殊形式,即若A→B,則A→B。
四、多值依賴與函數依賴的區別
多值依賴A→B的有效性與屬性集的范圍有關,不僅涉及到A和B,還涉及到C;而函數依賴A→B的有效性只涉及到A和B。
五、消除多值依賴引起的冗余
如果把多值依賴用于新的關系分解算法中,那么由多值依賴引起的冗余是可以消除的,成為第四范式。我們來了解一下第四范式的定義。
若關系模式R屬于第一范式,且每個非平凡多值依賴的決定因素都包含鍵碼,則R就屬于第四范式。
在本文例題中,Teaching(C,T,B)存在非平凡的多值依賴C→T,且C不是主碼,則不屬于第四范式,這也正是它存在數據冗余和操作復雜的原因。我們可以用投影分解法將關系模式Teaching分解得到:
Teaching(C,T,B)CB(C,B)CT(C,T)
我們利用第四范式的定義分析得到CB、CT均屬于第四范式,即消除了非平凡的多值依賴,這樣開始的幾個問題也得到了解決。
參考文獻:
[1]史嘉權等.數據庫系統概論.清華大學出版社.
“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”