模式分解
模式S-C-M (S 學號,C 班級,M 班主任)
該模式設計不好,存在數據冗餘、插入異常、刪除異常和更新異常
p1 = {S-C(學號,班級),C-M(班級,班主任)}
p2 = {S-C(學號,班級),C-M(學號,班主任)}
p3 = {S-C(學號,班主任),C-M(班級,班主任)}
規範化理論:
- 檢測是否在一個表中聚集了過多的屬性的過程
- 模式分解來消除違反範式規則而帶來的影響(插入、更新、刪除異常,冗餘大),構造合適的(更好的)數據模式
- 概念建模過程中規範化用於檢驗卻總是很有幫助
數據依賴
- 一個關係內部屬性與屬性之間的一種約束關係(屬性值時候相同)
- 現實世界屬性間相互聯繫的抽象
- 數據內在性質
- 語義的體現
函數依賴FD
Sno | Sname | Ssex | Sage |
---|---|---|---|
a value | b1 value | c value | d value |
a2 value | b2 value | c2 value | d2 value |
… | … | … | … |
an value | bn value | cn value | dn value |
定義: 設 R(U) 是一個屬性集 U 上的關係模式, X 和 Y 是 U 的子集。若對於 R(U) 的任意一個可能的關係 r , r 中不可能存在兩個元組在 X 上的屬性值相等, 而在 Y 上的屬性值不等, 則稱“ X 函數確定 Y ”或“ Y 函數依賴於 X ”,記作 X → Y
若 Y 不函數依賴於 X ,則記作 X ↛ YFor example:
Sno → Ssex, Sno → Sage
假設不允許重名 Sno ←→ Sname
- 非平凡函數依賴
X → Y ,但 Y ⊈ X 則稱 X → Y 爲非平凡函數依賴
Y ⊈ X 換爲 Y ⊆ X ,則 X → Y 爲平凡函數依賴 (對於任一關係模式,必然成立) - 完全函數依賴
如果 X → Y ,並且對於 X 的任何一個真子集 X’ , 都有 X’ ↛ Y , 則稱 Y 對 X 完全函數依賴,
- 部分函數依賴
- 傳遞函數依賴
多值依賴MVD
關係模式
五元組 :
- R:符號化的元組語義
- U:一組屬性
- F:屬性組U中屬性所來自的域
- DOM:屬性到域的映射
- F:屬性組U上的一組數據依賴
把關係模式看作一個三元組:
U ={Sno, Sdept, Mname, Cno, Grade}// 數據冗餘、更新異常、插入異常、刪除異常
// 分解
S(Sno,Sdept,Sno → Sdept);
SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
DEPT(Sdept,Mname,Sdept → Mname)
範式
範式: 是符合某種基本的關係模式的集合
- 1NF:每個分量必須是不可分開的數據項
- 2NF:符合1NF,每一個非主屬性都完全函數依賴於任何一個候選碼
- 3NF:符合2NF,消除非主屬性對於碼傳遞函數依賴
- BCNF:符合3NF,消除主屬性對於碼的部分與傳遞函數依賴
4NF:設R是一個關係模型,D是R上的多值依賴集合。如果D中存在凡多值依賴 X->Y時,X必是R的超碼,那麼稱R是第四範式的模式
滿足BCNF:
- 實現了模式的徹底分解
- 最高的規範化程度
- 消除了插入異常和刪除異常。
規範化: 低級範式的關係模式通過模式分解,可以轉換爲若干個高一級範式的關係模式集合的過程。
3NF 和 BCNF的區別
BCNF:如果關係模式R(U,F)的所有屬性(包括主屬性和非主屬性)都不傳遞依賴於R的任何候選關鍵字,那麼稱關係R是屬於BCNF的。或是關係模式R,如果每個決定因素都包含關鍵字(而不是被關鍵字所包含),則BCNF的關係模式。
例:配件管理關係模式 WPE(WNO,PNO,ENO,QNT)分別表倉庫號,配件號,職工號,數量。有以下條件
a.一個倉庫有多個職工。
b.一個職工僅在一個倉庫工作。
c.每個倉庫裏一種型號的配件由專人負責,但一個人可以管理幾種配件。
d.同一種型號的配件可以分放在幾個倉庫中。分析:由以上得 PNO 不能確定QNT,由組合屬性(WNO,PNO)來決定,存在函數依賴(WNO,PNO) -> ENO。由於每個倉庫裏的一種配件由專人負責,而一個人可以管理幾種配件,所以有組合屬性(WNO,PNO)才能確定負責人,有(WNO,PNO)-> ENO。因爲 一個職工僅在一個倉庫工作,有ENO -> WNO。由於每個倉庫裏的一種配件由專人負責,而一個職工僅在一個倉庫工作,有 (ENO,PNO)-> QNT。
找一下候選關鍵字,因爲(WNO,PNO) -> QNT,(WNO,PNO)-> ENO ,因此(WNO,PNO)
可以決定整個元組,是一個候選關鍵字。根據ENO->WNO,(ENO,PNO)->QNT,故(ENO,PNO)
也能決定整個元組,爲另一個候選關鍵字。屬性ENO,WNO,PNO 均爲主屬性
,只有一個非主屬性QNT
。它對任何一個候選關鍵字都是完全函數依賴的,並且是直接依賴,所以該關係模式是3NF。分析一下主屬性。因爲ENO->WNO,主屬性ENO是WNO的決定因素,但是它本身不是關鍵字,只是組合關鍵字的一部分。這就造成主屬性WNO對另外一個候選關鍵字(ENO,PNO)的部 分依賴,因爲(ENO,PNO)-> ENO但反過來不成立,而P->WNO,故(ENO,PNO)-> WNO 也是傳遞依賴。
雖然沒有非主屬性對候選關鍵遼的傳遞依賴,但存在主屬性對候選關鍵字的傳遞依賴,同樣也會帶來麻煩。如一個新職工分配到倉庫工作,但暫時處於實習階段,沒有獨立負責對某些配件的管理任務。由於缺少關鍵字的一部分PNO而無法插入到該關係中去。又如某個人改成不管配件了去負責安全,則在刪除配件的同時該職工也會被刪除。
解決辦法:分成管理
EP(ENO,PNO,QNT)
,關鍵字是(ENO,PNO)工作EW(ENO,WNO)
其關鍵字是ENO。
缺點: 分解後函數依賴的保持性較差。如此例中,由於分解,函數依賴(WNO,PNO)-> ENO 丟失了, 因而對原來的語義有所破壞。沒有體現出每個倉庫裏一種部件由專人負責。有可能出現 一部件由兩個人或兩個以上的人來同時管理。因此,分解之後的關係模式降低了部分完整性約束。
模式分解實例
函數依賴理論
- 函數依賴集的閉包
- 用於發現所有蘊含的函數依賴
- 屬性集的閉包
- 用於判斷某屬性集能夠函數確定的其他因素
- 最小函數依賴集
- 用於尋找等價( 閉包相同) 的最小集,便於降低檢測開銷
- 無損分解
- 能夠通過自然連接恢復原關係的分解策略
- 保持依賴
- 分解後的各子關係函數依賴集並集的閉包與分解前某關係函數依賴集的閉包相同
- 分解後的各子關係函數依賴集並集的閉包與分解前某關係函數依賴集的閉包相同
相關計算
實例:求解函數依賴集的閉包
算法:求屬性集X 關於函數依賴集F 的閉包
實例: