函數依賴:
定義:R(U)是在屬性集U上的關系模式,X,Y是U的子集。若對R(U)的任意1個可能關系r,r中的不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱X函數肯定Y,或Y函數依賴X,記作X--->Y。
單純的概念有點難以理解,通過例子1:屬性集U,關系模式R(U),子集X,Y,可能關系r1。
可以理解為X能唯1肯定Y,則X--->Y。經常使用為主鍵------>其他屬性
函數依賴和3范式
函數依賴的分類:完全依賴,部份依賴,傳遞依賴。
完全依賴和1范式
完全依賴:X--->Y。Y只能有X推到出來
例子2:選課關系(學號,課程號,成績)
(學號,課程號)--->成績
1范式:主要肯定屬性的原子性,每一個屬性不可再分。
例子3:職工號,姓名,電話號碼組成1個表(電話號碼有包括手機號,家庭號碼)
修改方法:1、新建1個表,職工號為主鍵,添加手機號和家庭號碼兩個屬性。
2、強迫只能選擇1個號碼屬性。
2范式消除部份依賴
部份依賴:X--->Y Y除能有X推到出來外還可以有其他屬性推到出來。
例子4:選課關系(學號,課程號,成績,課程名)
(學號,課程號)--->課程名, 課程號--->課程名
2范式:非主鍵屬性完全依賴主鍵,2范式的作用主要是消除部份依賴。
例子4可以改成兩個關系模式:選課關系(學號,課程號,成績,課程名)
課程關系(課程號,課程名)
主鍵是組合屬性的時候容易出現部份依賴,主鍵是單個屬性的時候只要符合第1范式就會符合第2范式。
3范式消除傳遞依賴
傳遞依賴:X--->Y 、Y--->Z 則X--->Z
例子5:選課關系(學號,姓名,專業號,專業名,所屬學院號)
學號--->專業號,專業號--->專業名。
3范式:在符合2范式的基礎上,沒有非主屬性傳遞依賴函數。
例子5解決方法:轉換成兩個關系模式,消除傳遞依賴。
選課關系(學號,姓名,成績)
專業關系(專業號,專業名,所屬學院號)
3范式作為數據庫設計的1個標準,確保非主鍵屬性都完全依賴主鍵屬性。
上一篇 【淺談DOM事件的優化】
下一篇 讓c++程序優雅的崩潰