關系數據庫邏輯設計
針對具體問題,如何構造一個適合於它的數據模式
數據庫邏輯設計的工具──關系數據庫的規范化理論
關系模式由五部分組成,即它是一個五元組:
R(U, D, DOM, F)
R: 關系名
U: 組成該關系的屬性名集合
D: 屬性組U中屬性所來自的域
DOM: 屬性向域的映象集合
F: 屬性間數據的依賴關系集合
一個關系內部屬性與屬性之間的約束關系
現實世界屬性間相互聯系的抽象
數據內在的性質
語義的體現
2. 數據依賴的類型
函數依賴(Functional Dependency,簡記為FD)
多值依賴(Multivalued Dependency,簡記為MVD)
其他
關系模式R(U, D, DOM, F)
簡化為一個三元組:
R(U, F)
當且僅當U上的一個關系r滿足F時,r稱為關系模式 R(U, F)的一個關系
[例1]建立一個描述學校教務的數據庫:
學生的學號(Sno)、所在系(Sdept)
系主任姓名(Mname)、課程名(Cname)
成績(Grade)
單一的關系模式 : Student <U、F>
U ={ Sno, Sdept, Mname, Cname, Grade }
屬性組U上的一組函數依賴F:
F ={ Sno → Sdept, Sdept → Mname,
(Sno, Cname) → Grade }
關系模式Student(U, F)中存在的問題
1. 數據冗余太大
2. 更新異常(Update Anomalies)
3. 插入異常(Insertion Anomalies)
4. 刪除異常(Deletion Anomalies)
結論:
Student關系模式不是一個好的模式。
“好”的模式:
不會發生插入異常、刪除異常、更新異常,
數據冗余應盡可能少
原因:由存在於模式中的某些數據依賴引起的(這也是對關系
模式進行分解的根本理由)
解決方法:通過分解關系模式來消除其中不合適的數據依賴
把這個單一模式分成3個關系模式:
S(Sno,Sdept,Sno → Sdept);
SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
DEPT(Sdept,Mname,Sdept→ Mname)
規范化理論正是用來改造關系模式,通過分解關系模式來消除其中不合適的數據依賴,以解決插入異常、刪除異常、更新異常和數據冗余問題。最終使各關系模式達到某種程度的分離,即“一事一地”的模式設計原則
函數依賴(Functional Dependency,FD)
平凡函數依賴與非平凡函數依賴
完全函數依賴與部分函數依賴
傳遞函數依賴
設R(U)是一個屬性集U上的關系模式,X和Y是U的子集。
若對於R(U)的任意一個可能的關系r,r中不可能存在兩個元組在X上的屬性值相等, 而在Y上的屬性值不等, 則稱 “X函數確定Y” 或 “Y函數依賴於X”,記作X→Y。
設有關系模式R(U),X和Y是屬性集U的子集,函數依賴(functional dependency,簡記為FD)是形為X→Y的一個命題,若對於R(U)的任意一個可能的關系r ,對r中任意兩個元組t和s,都有t[X]=s[X]蘊涵
t[Y]=s[Y],那麼稱FD X→Y在關系模式R(U)中成立。
所有關系實例均要滿足
語義范疇的概念
例如:姓名→年齡這個函數依賴只有在該部門沒有
同名人的條件下成立
在關系模式R(U)中,對於U的子集X和Y,
如果X→Y,但Y ? X,則稱X→Y是非平凡的函數依賴
若X→Y,但Y ? X, 則稱X→Y是平凡的函數依賴
例:在關系SC(Sno, Cno, Grade)中,
非平凡函數依賴: (Sno, Cno) → Grade
平凡函數依賴: (Sno, Cno) → Sno
(Sno, Cno) → Cno
若X→Y,則X稱為這個函數依賴的決定屬性組,也稱為決定因素(Determinant)。
若X→Y,Y→X,則記作X←→Y。
若Y不函數依賴於X,則記作X→Y。
在R(U)中,如果X→Y,並且對於X的任何一個真子集X’,都有X’ Y, 則稱Y對X完全函數依賴,記作
X F Y。
若X→Y,但Y不完全函數依賴於X,則稱Y對X部分函數依賴,記作X P Y。
[例1] 中(Sno,Cno)→Grade是完全函數依賴,
(Sno,Cno)→Sdept是部分函數依賴
因為Sno →Sdept成立,且Sno是(Sno,Cno)的真子集
在R(U)中,如果X→Y,(Y ?X) ,Y→X Y→Z,Z ∈Y, 則稱Z對X傳遞函數依賴。
記為:X → Z
注: 如果Y→X, 即X←→Y,則Z直接依賴於X。
例: 在關系Std(Sno, Sdept, Mname)中,有:
Sno → Sdept,Sdept → Mname
Mname傳遞函數依賴於Sno