第六章关系数据理论
第六章關系數據理論
- 6.1_問題的提出(略)
- 6.2_規范化
- 6.2.1_函數依賴
- 6.2.2_碼
- 6.2.3_范式
- 6.2.4_2NF
- 6.2.5_3NF
- 6.2.6_BCNF
- 6.2.7_多值依賴
- 6.2.8_4NF
- 6.2.9_規范化小結
- 6.3_Armstrong公理系統
- 6.3.1_函數依賴閉包
- 6.3.2_最小依賴集
- 6.3.3_轉換為3NF的保持函數依賴的分解
6.1_問題的提出(略)
6.2_規范化
6.2.1_函數依賴
1.函數依賴
設R(U)是一個屬性集U上的關系模式,X和Y是U的子集。
若對于R(U)的任意一個可能的關系r,r中不可能存在兩個元組在X上的屬性值相等, 而在Y上的屬性值不等, 則稱 “X函數確定Y” 或 “Y函數依賴于X”,記作X→Y
2.平凡函數依賴與非平凡函數依賴
- 非平凡的函數依賴:如果X→Y,但Y? X,則稱X→Y是非平凡的函數依賴
- 平凡的函數依賴:若X→Y,但Y ? X, 則稱X→Y是平凡的函數依賴
3.完全函數依賴與部分函數依賴
- 在R(U)中,如果X→Y,并且對于X的任何一個真子集X’,都有X’推不出Y, 則稱Y對X完全函數依賴,記作X -F-> Y(即缺了屬性集合X中的任何一個屬性都不能唯一確定Y)
- 若X→Y,但Y不完全函數依賴于X,則稱Y對X部分函數依賴,記作X-P-> Y。
4.傳遞函數依賴
6.2.2_碼
6.2.3_范式
關系數據庫中的關系必須滿足一定的要求。滿足不同程度要求的為不同范式
第一范式(1NF):如果一個關系模式R的所有屬性都是不可分的基本數據項,則R∈1NF
6.2.4_2NF
第二范式(2NF):若R∈1NF,且每一個非主屬性完全函數依賴于碼,則R∈2NF。
6.2.5_3NF
第三范式(3NF):關系模式R<U,F> 中若不存在這樣的碼X、屬性組Y及非主屬性Z(Z ? Y), 使得X→Y,Y→Z成立, Y → X,則稱R<U,F> ∈ 3NF。(若R∈3NF,則每一個非主屬性既不部分依賴于碼也不傳遞依賴于碼)
6.2.6_BCNF
6.2.7_多值依賴
6.2.8_4NF
6.2.9_規范化小結
6.3_Armstrong公理系統
6.3.1_函數依賴閉包
與編譯原理的閉包思想一樣
6.3.2_最小依賴集
定義:
(1) F中任一函數依賴的右部僅含有一個屬性。
(2) F中不存在這樣的函數依賴X→A,使得F與F-{X→A}等價。(函數依賴冗余)
(3) F中不存在這樣的函數依賴X→A, X有真子集Z使得F-{X→A}∪{Z→A}與F等價。 (左部屬性冗余)
求解方法:(分別對應定義中的三個條件)
(1)逐一檢查F中各函數依賴FDi:X→Y,若Y=A1A2 …Ak,k > 2,則用 { X→Aj |j=1,2,…, k} 來取代X→Y。
(2)逐一檢查F中各函數依賴FDi:X→A,令G=F-{X→A}, 若A∈XG+, 則從F中去掉此函數依賴。
(3)逐一取出F中各函數依賴FDi:X→A,設X=B1B2…Bm,逐一考查Bi (i=l,2,…,m),若A ∈(X-Bi )F+ , 則以X-Bi 取代X。
6.3.3_轉換為3NF的保持函數依賴的分解
【例】 關系模型R<U,F>,U={A,B,C,D,E},F={A→BC,ABD→CE,E→D}
算法一:將關系R轉化3NF的保持函數依賴的分解
第一步:首先計算處F的最小函數依賴集,得到F‘={A→BC,AD→E,E→D}。
第二步:觀察U中是否有屬性不再F’中的出現,如果有,則這個屬性組成一對關系R,并在原來的U中刪除這些屬性。而例子中U的屬性都出現在F中,則可以跳過這一步。
第三步:對F‘中的函數依賴,把左邊的相同分為一組,一組中出現的所有屬性為一個關系。如F={A→B,A→C,……},左邊都為A的分為一組,得出項的所有屬性組為也給關系R{A,B,C,…}例題中左邊都不相同,所以一個函數依賴組為一個關系得到轉化為3NF的保持依賴分解1{A,B,C},R2{A,D,E},R3{E,D}。
算法二:將關系R轉化為3NF的既有無損連接有保持函數依賴的分解
第一步:先將R轉化為3NF的保持函數依賴的分解,由算法一的出R1{A,B,C},R2{A,D,E},R3{E,D}。
第二步:求出F的候選碼(候選碼求解算法)得出候選碼X為AD和AE。
第三步:將候選碼單獨組成關系得R4{A,D}和R5{A,E},然后與保持函數依賴后得分解取并集。得R1{A,B,C},R2{A,D,E},R3{E,D},R4{A,D},R5{A,E}。。、
第四步:觀察新組成得分解模式中,是否存在包含關系,有責去掉被包含得。如R3{E,D},R4{A,D},R5{A,E}都包含于R2{A,D,E},則刪除,最終得到轉化為3NF的既有無損鏈接有保持函數依賴的分解R1{A,B,C},R2{A,D,E}。
總結
- 上一篇: 带头节点循环链表实现队列
- 下一篇: C语言实现AES加密解密