290 likes | 865 Views
第五章 關聯資料庫設計. 課前指引 前章我們已對資料庫最重要的兩個概念 --- 正規化與功能支配關係,作了詳盡的探討,本章將延伸其觀點,實際嘗試資料庫的設計。資料庫在設計之初,必須對其欄位架構 (Schema) 作周詳考量之安排,否則一定會發生資料遺失、累贅儲存、或障礙存取等類似憾事。本章將非常技術性地探討,如何對關聯表之欄位架構作最適當的設計。資料庫之正規化是設計的重要依據,本章將就各級正規化之定義、演算法、以實例作詳盡的敘述 。. 章節大綱. 5-1 簡介. 5-6 多值支配關係. 5-2 第一正規化. 5-7 第四正規化.
E N D
第五章 關聯資料庫設計 課前指引 前章我們已對資料庫最重要的兩個概念---正規化與功能支配關係,作了詳盡的探討,本章將延伸其觀點,實際嘗試資料庫的設計。資料庫在設計之初,必須對其欄位架構(Schema) 作周詳考量之安排,否則一定會發生資料遺失、累贅儲存、或障礙存取等類似憾事。本章將非常技術性地探討,如何對關聯表之欄位架構作最適當的設計。資料庫之正規化是設計的重要依據,本章將就各級正規化之定義、演算法、以實例作詳盡的敘述。
章節大綱 5-1 簡介 5-6 多值支配關係 5-2 第一正規化 5-7 第四正規化 5-3 第二正規化 5-8 其他正規化 5-4 Boyce-Codd正規化 5-9 資料庫設計考量重點 5-5 第三正規化 備註:可依進度點選小節
5-1 簡介 • 前章我們已對資料庫最重要的兩個概念---正規化與功能支配關係,作了詳盡的探討,本章將延伸其觀點,實際嘗試資料庫的設計。資料庫在設計之初,必須對其欄位架構(Schema) 作周詳考量之安排,否則一定會發生資料遺失、累贅儲存、或障礙存取等類似憾事。
5-1 簡介 • 本章將非常技術性地探討,如何對關聯表之欄位架構作最適當的設計。資料庫之正規化是設計的重要依據,本章將就各級正規化之定義、演算法、以實例作詳盡的敘述。
5-2 第一正規化 • 將每一欄格內的資料單一化(Atomic),要使資料如原子般的不容再分解,如此建立的關聯表是謂 “第一正規化關聯表(First Normal Form Relation)”。
5-2 第一正規化 • 第一正規化(Normalizing) 關聯表,並不能保證是一個優良的設計,可能面對三項嚴重的問題: • (1) 資料重複(Repetition of Information),浪費儲存空間,浪費存取時間; • (2) 資料缺乏代表意義(Inability to represent certain Information),讀取之資料與要求不符,資料與資料之間缺乏連貫性; • (3) 資料失真(Loss of Information),不當的儲存造成資料無法順利讀取,甚至遺失不見。 • 如範例106~範例107
5-3 第二正規化 • 設有一關聯架構(Relation Schema)R,功能支配關係(Functional Dependencies)F,α→β 為F+之任意關係式,當此關聯架構R可常理滿足下列之一條件時,R是第二正規化(2NF)型式: • (1) α是候選索引鍵(Candidate Key) 且R = (α, β)。 • (2) R或α → β 均無 “部份功能支配關係(Partial Functional Dependencies)”。 • 如範例108~範例109
5-3 第二正規化 • 2NF分解演算法(Algorithm-5-3-2) • 設有一個第一正規化(1NF) 關聯表r,其架構為R,將R分解成2NF關聯架構之步驟為: • 1、如4-3-1節,求取欄位間之功能支配關係(Functional Dependency): • α、β為任意欄位,t1、t2為任意資料組(Tuples),當: if t1[α] = t2[α] then t1[β] = t2[β] 為真時,則有: α → β (即α對β之功能支配關係)。
5-3 第二正規化 • 2NF分解演算法(Algorithm-5-3-2) • 2、於任意關係式αi→βi、αj→βj中,如果有αi = αj,則建立關聯架構Ri-schema: • Ri-schema = (αi, βi, βj) 將R分解成Ri與R’ 兩組關聯架構(schemas),且有: R’-schema = R – (βi, βj ) Ri∩R’ = αi 再檢視R’ 繼續分解,R ← R’,直至R’= (αi , Null) 為止。 • 如範例110~範例112
5-3 第二正規化 • 2NF功能支配關係之維護 • 功能支配關係維護測試演算法(Algorithm-5-3-4): 設有關聯架構R,有功能支配關係F且均為常理功能支配關係式。R分解成R1, R2, …, Rn,其功能支配關係分別為F1、F2、…、Fn: • 如範例113~範例114 compute F+; for each Ri do begin Fi ← F+ 內對Ri有關的功能支配關係式; end F’ ← Null; for each Fi begin F’ ← F’∪Fi; end comput F’+; if (F’+ = F+) then return(true) else return(false);
5-4 Boyce-Codd正規化 • 設有一關聯架構(Relation Schema) R,功能支配關係(Functional Dependencies) F,α → β 為F+之任意關係式,其中 α R 且 β R,當此關聯架構R可常理滿足下列之一條件時,R是Boyce-Codd正規化(BCNF) 型式: • (1) α → β 其中β α (如4-3-1節Trivial Functional Dependency) • (2) α是R之單元超級索引鍵(Super Key) (如1-4-1節) • 如範例115~範例116
5-4 Boyce-Codd正規化 • BCNF分解演算法(Algorithm5-4-2) • 設有一個非BCNF關聯表r,其架構為R,將R分解成BCNF之R1、R2、…、Rn,α → β為F+內合於BCNF定義之任意功能支配關係式: • 如範例117 while (R≠(α, Null ) or (R is not in Trivial Functional Dependencies)) do if (R is not in BCNF) then begin 於F+ 內找出合於BCNF定義之α → β 且 α∩β = Ø; Ri = (α, β); R ← R – β; end if end while
5-4 Boyce-Codd正規化 • BCNF功能支配關係之維護(Dependency Preservation) • 雖然範例117分解之各次關聯架構均可滿足:(1) BCNF定義,(2) 不失真聯結(Lossless Join),(3) 通過功能支配關係維護測試(Dependency Preservation)。但並非所有的BCNF次關聯表都可滿足此三項要求,本節將進一步探討之。 • 如範例118~範例120
5-5 第三正規化 • 設有一關聯架構(Relation Schema) R,功能支配關係(Functional Dependencies) F,α → β 為F+之任意關係式,其中 α R 且 β R,當此關聯架構R可常理滿足下列之一條件時,R是第三正規化型式: • (1) α → β 其中β α。(如4-3-1節Trivial Functional Dependency) • (2) α 是R之超級索引鍵(Super Key)。(如1-4-1節) • (3) β – α 之任一欄位A,均被R之候選索引鍵(Candidate Key) 支配。 • 如範例121
5-5 第三正規化 • 3NF分解演算法(Algorithm5-5-2) • 設有一個非BCNF關聯表r,其架構為R,α → β為Fc內(如4-3-4節) 合於3NF定義之任意功能支配關係式,將R分解成3NF之R1、R2、…、Rn步驟為:如範例122 i ← 0; for each α → β in Fc if Rj無αβ (其中 1 j i ) then begin i ← (i + 1); Ri = (αβ); end if Rj無R之任一個candidate Key (其中 1 j i ) then begin i ← (i + 1); Ri ← R之任一個candidate Key; end return (R1, R2, …, Rn)
5-5 第三正規化 • 3NF功能支配關係之維護(Dependency Preservation) • BCNF因要求嚴格,將R分解時,次關聯架構Ri往往無法通過功能支配關係維護之測試,而3NF因要求不嚴格,將R分解之次關聯架構Ri均可通過功能支配關係維護測試。 • 一般來言,需要將關聯架構R分解時,先以BCNF為分解目標,如果無法通過功能支配關係維護測試,則改以3NF為分解目標。 • 如範例123
5-5 第三正規化 • 3NF之缺點(Disadvantage of 3NF) • 一般來言,資料庫設計到第三正規化型式(3NF) 即已達到靈活流暢的存取要求,但還隱藏著一點憂慮來自重複值或Null值。此與5-2-1節所述不同,是來自“多值支配關係”。 • 在觀念認識上,我們曾於4-2-4節述及第三正規化型式(3NF) 的重要意義,是消除“遞移功能支配關係”。在3NF分解演算法(Algorithm5-5-2) 分解過程中,幾乎已將 “遞移功能支配關係”消除。但遇到“多值支配關係”時,將可能無法完全消除“遞移功能支配關係”,此時將造成重複值或Null值。如範例124~範例126
5-6 多值支配關係 • 設有一關聯表(Relation) r,關聯架構(Relation Schema) 為R,有多值支配關係(Multivalued Dependency) α ↠ β,其中 α R、β R,t1、t2、t3、t4為任意資料組(Tuples),如果有t1[α] = t2[α],則有(如圖): • t1[α] = t2[α] = t3[α] = t4[α] • t1[β] = t3[β] • t2[R−α−β] = t3[R−α−β] • t2[β] = t4[β] • t1[R−α−β] = t4[R−α−β]
5-6 多值支配關係 • 如果α ↠ β滿足R之所有欄位,則α ↠ β是R之 “當然多值支配關係(Trivial Multivalued Dependency)”,亦即: • α ↠ β is trivialif β α or β∪α = R • 如範例127~範例128
5-6 多值支配關係 • 多值支配關係法則 • 設有一關聯表(Relation) r,關聯架構(Relation Schema) 為R,其功能支配關係和多值支配關係為D,且α R、β R、γ R,則有: • (1) 複製法則(Replication Rule):如果有常理(Hold) 關係α → β,則有α ↠ β。 • (2) 互補法則(Complementation Rule):如果有常理關係α ↠ β,則有α ↠ R − α − β。 • (3) 多值擴充法則(Multivalued Augmentation Rule):如果有常理關係α ↠ β and wR and vR,則有wα ↠ vβ。 • (4) 多值遞移法則(Multivalued Transitivity Rule):如果有常理關係α ↠ β and β ↠ γ,則有α ↠ γ− β。
5-6 多值支配關係 • 多值支配關係法則 • (5)結合法則(Coalescence Rule):如果有常理關係α ↠ β and γβ and wR and w∩β = Ø and w → γ,則有α → γ。 • (6)多值聯集法則(Multivalued Union Rule):如果有常理關係α ↠ β and α ↠ γ,則有α ↠ βγ。 • (7)多值交集法則(Multivalued Intersection Rule):如果有常理關係α ↠ β and α ↠ γ,則有α ↠ β∩γ。 • (8) 多值差集法則(Multivalued Difference Rule):如果有常理關係α ↠ β and α ↠ γ,則有α ↠ β−γ and α ↠ γ−β。 • 如範例129
5-7 第四正規化 • 設有一關聯架構(Relation Schema) R,功能支配關係(Functional Dependencies) 與多值支配關係(Multivalued Dependencies) D,α ↠ β 為D+之任意關係式,其中 α R 且 β R,當此關聯架構R可常理滿足下列之一條件時,R是第四正規化(4NF) 型式: • (1) α ↠ β 是當然多值支配關係(Trivial Multivalued Dependency),如5-6-1節。 • (2) α 是R之單元超級索引鍵(如1-4-1節) • 比較BCNF定義,BCNF與4NF相似,差異在前者有α → β、後者有α ↠ β。如果R是4NF則必是BCNF;如果R不是BCNF則必不是4NF。
5-7 第四正規化 • 4NF分解演算法(Algorithm-5-7-2) • 設有一個非第四正規化關聯表r,其架構為R,將R分解成4NF之R1、R2、…、Rn,α ↠ β為D+內合於4NF定義之任意多值支配關係式或功能支配關係式: • 如範例130~範例133 while (R≠(α, Null ) or (R有Multivalued Dependencies)) do if (R is not in 4NF) then begin 於D+ 內找出合於4NF定義之α ↠ β 且 α∩β = Ø; Ri = (α, β); R ← R – β; end if end while
5-7 第四正規化 • 多值支配關係之維護 • 多值支配關係維護測試演算法(Algorithm-5-7-4):設有關聯架構R,有多值支配關係與功能支配關係D。R分解成R1, R2, …, Rn,且支配關係分別為D1、D2、…、Dn: compute D+; for each Ri do begin Di ← D+ 內對Ri有關的支配關係式; end D’ ← Null; for each Di begin D’ ← D’∪Di; end comput D’+; if (D’+ = D+ ) then return(true) else return(false);
5-8 其他正規化 • 在資料庫設計上,第四正規化型式(4NF) 已可謂是 “超強(Ultimate) 正規化型式”,因其已將我們不易了解的多值支配關係(Multivalued Dependency) 納入其中,我們一般遇到的問題,以本章述及的各類正規化型式已可充分解決。
5-8 其他正規化 • 除此之外,尚有以多值聯結支配關係(Join Dependency) 設計之投影聯結正規化(Project-Join Normal Form簡稱PJNF),有些書稱其為第五正規化型式(5NF)。 • 另尚有以定義域支配關係(Domain Dependency) 設計之定義域索引鍵正規化型式(Domain-Key Normal Form簡稱DKNF)。
本章結束 Q&A討論時間