資料庫總結第6章
第六章 關係資料理論
6.1 問題的提出
關係資料庫邏輯設計
-
- 針對具體問題,如何構造一個適合於它的資料模式
- 資料庫邏輯設計的工具──關係資料庫的規範化理論
- 關係模式由五部分組成,是一個五元組:
R(U, D, DOM, F)- 關係名R是符號化的元組語義
- U為一組屬性
- D為屬性組U中的屬性所來自的域
- DOM為屬性到域的對映
- F為屬性組U上的一組資料依賴
- 由於D、DOM與模式設計關係不大,因此在本章中把關係模式看作一個三元組:R<U,F>
- 當且僅當U上的一個關係r滿足F時,r稱為關係模式R<U,F>的一個關係
- 作為二維表,關係要符合一個最基本的條件:每個分量必須是不可分開的資料項。滿足了這個條件的關係模式就屬於第一正規化(1NF)
- 一對一聯絡
- 設X,Y為關係中的屬性或屬性組,它們的所有可能取值組成兩個集合。如果對於X中的任一具體值Y中至多有一個值與之對應,稱X,Y這兩個屬性之間是一對一聯絡。
- 例:在讀者關係中,借書證號是唯一的,如果讀者沒有重名的,姓名與借書證號兩個屬性之間是1:1聯絡。姓名可以確定借書證號,借書證號也可以確定姓名。
- 如果屬性值集合X中的任一個具體值,至多與Y中的一個值相對應,而Y中的任一個具體值卻可以和X中的多個值相對應,則稱兩個屬性間從X到Y為m:1的聯絡或從Y到X是1:m的聯絡。
- 注意:這裡指的是屬性值個數的多少,而不是具有相同屬性值的有多少個元組,二者正好相反。
- 例:在圖書關係中,一本書有若干副本,它們有相同的書名、作者、分類號等,但每本書有唯一的總編號。書名與總編號之間是1:m,即同一個書名,有多個總編號與之對應。
- 在X,Y兩個屬性值集中,如果任一個值都可以至多和另一個屬性值集中多個值對應,反之亦然,則稱屬性X和Y是m:n關係。
- 例:在借閱關係中,一個讀者可以借多本書,即同一個借書證號有若干個圖書總編號與之對應。由總編號標識的一本書在不同日期可以被不同的讀者借閱。
- 資料依賴
- 是一個關係內部屬性與屬性之間的一種約束關係
- 通過屬性間值的相等與否體現出來的資料間相互聯絡
- 是現實世界屬性間相互聯絡的抽象
- 是資料內在的性質
- 是語義的體現
- 是一個關係內部屬性與屬性之間的一種約束關係
- 資料依賴的主要型別
- 函式依賴(Functional Dependency,簡記為FD)
- 多值依賴(Multi-Valued Dependency,簡記為MVD)
- 函式依賴普遍存在於現實生活中
- 描述一個學生關係,可以有學號、姓名、系名等屬性。
- 一個學號只對應一個學生,一個學生只在一個系中學習
- “學號”值確定後,學生的姓名及所在系的值就被唯一確定。
- Sname=f(Sno),Sdept=f(Sno)
- 即Sno函式決定Sname
- Sno函式決定Sdept
- 記作Sno→Sname,Sno→Sdept
- 描述一個學生關係,可以有學號、姓名、系名等屬性。
- [例6.1] 建立一個描述學校教務的資料庫。
涉及的物件包括:- 學生的學號(Sno)
- 所在系(Sdept)
- 系主任姓名(Mname)
- 課程號(Cno)
- 成績(Grade)
-
- 假設學校教務的資料庫模式用一個單一的關係模式Student來表示,則該關係模式的屬性集合為:
U ={Sno, Sdept, Mname, Cno, Grade}
-
- 現實世界的已知事實(語義):
- 一個繫有若干學生, 但一個學生只屬於一個系;
- 一個系只有一名(正職)負責人;
- 一個學生可以選修多門課程,每門課程有若干學生選修;
- 每個學生學習每一門課程有一個成績。
- 由此可得到屬性組U上的一組函式依賴F:
- 現實世界的已知事實(語義):
F={Sno→Sdept, Sdept→ Mname, (Sno, Cno)→ Grade}
關係模式Student<U, F>中存在的問題:
(1)資料冗餘
-
- 浪費大量的儲存空間
- 每一個系主任的姓名重複出現,重複次數與該系所有學生的所有課程成績出現次數相同。
- 浪費大量的儲存空間
(2)更新異常(Update Anomalies)
-
- 資料冗餘 ,更新資料時,維護資料完整性代價大。
- 某系更換系主任後,必須修改與該系學生有關的每一個元組。
- 資料冗餘 ,更新資料時,維護資料完整性代價大。
(3)插入異常(Insertion Anomalies)
-
- 如果一個系剛成立,尚無學生,則無法把這個系及其系主任的資訊存入資料庫。
(4)刪除異常(Deletion Anomalies)
-
- 如果某個系的學生全部畢業了, 則在刪除該系學生資訊的同時,把這個系及其系主任的資訊也丟掉了。
- 結論
- Student關係模式不是一個好的模式。
- 一個“好”的模式應當不會發生插入異常、刪除異常和更新異常,資料冗餘應儘可能少。
- 原因
- 由存在於模式中的某些資料依賴引起的。
- 解決方法
- 用規範化理論改造關係模式來消除其中不合適的資料依賴
- 把這個單一的模式分成三個關係模式:
- S(Sno,Sdept,Sno → Sdept);
- SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
- DEPT(Sdept,Mname,Sdept → Mname);
- 這三個模式都不會發生插入異常、刪除異常的問題,資料的冗餘也得到了控制。
- 問題:
- 插入異常:如果沒有職工具有8級工資,則8級工資的工資數額就難以插入。
- 刪除異常:如果僅有職工趙明具有4級工資,如果將趙明刪除,則有關4級工資的工資數額資訊也隨之刪除了。
- 資料冗餘:職工很多,工資級別有限,每一級別的工資數額反覆儲存多次。
- 更新異常:如果將5級工資的工資數額調為1620,則需要找到每個具有5級工資的職工,逐一修改。
6.2 規範化
規範化理論正是用來改造關係模式,通過分解關係模式來消除其中不合適的資料依賴,以解決插入異常、刪除異常、更新異常和資料冗餘問題。
6.2.1 函式依賴
1.函式依賴
2.平凡函式依賴與非平凡函式依賴
3.完全函式依賴與部分函式依賴
4.傳遞函式依賴
- 定義6.1 設R(U)是一個屬性集U上的關係模式,X和Y是U的子集。若對於R(U)的任意一個可能的關係r,r 中不可能存在兩個元組在X上的屬性值相等, 而在Y上的屬性值不等, 則稱“X函式確定Y”或“Y函式依賴於X”,記作X→Y。
- 函式依賴與屬性間的聯絡型別有關
- (1) 一對一聯絡:X←→Y
- (2) 多對一聯絡:X→Y
- (3) 多對多聯絡:不存在依賴關係
(4) 可從屬性間的聯絡型別來分析屬性間的函式依賴
1. 函式依賴不是指關係模式R的某個或某些關係例項滿足的約束條件,而是指R的所有關係例項均要滿足的約束條件。
2. 函式依賴是語義範疇的概念。只能根據資料的語義來確定函式依賴。
例如“姓名→年齡”這個函式依賴只有在不允許有同名人的條件下成立
3. 資料庫設計者可以對現實世界作強制的規定。例如規定不允許同名人出現,函式依賴“姓名→年齡”成立。所插入的元組必須滿足規定的函式依賴,若發現有同名人存在, 則拒絕裝入該元組。
- 由下面的關係表, 能否得出Sno → Sname
函式依賴不是指關係模式R的某個或某些關係例項滿足的約束條件,而是指R的所有關係例項均要滿足的約束條件
- 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 → Y。
- 若X→Y,但Y不完全函式依賴於X,則稱Y對X部分函式依賴,記作X → Y
- 在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 則稱Z對X傳遞函式依賴(transitive functional dependency)。記為:X → Z。
- 注: 如果Y→X, 即X←→Y,則Z直接依賴於X,而不是傳遞函式依賴。
- [例] 在關係Std(Sno, Sdept, Mname)中,有:
Sno → Sdept,Sdept → Mname,
Mname傳遞函式依賴於Sno
- 找出職工工資表中的傳遞函式依賴。
6.2.2 碼
- 設K為R<U,F>中的屬性或屬性組合。若K → U,則K稱為R的一個候選碼(Candidate Key)。
- 如果U部分函式依賴於K,即K → U,則K稱為超碼 (Surpkey)。候選碼是最小的超碼,即K的任意一個真子集都不是候選碼。
- 若關係模式R有多個候選碼,則選定其中的一個做為主碼(Primary key)。
- 主屬性與非主屬性
- 包含在任何一個候選碼中的屬性 ,稱為主屬性 (Prime attribute)
- 不包含在任何碼中的屬性稱為非主屬性(Nonprime attribute)或非碼屬性(Non-key attribute)
- 全碼:整個屬性組是碼,稱為全碼(All-key)
- 關係模式 R中屬性或屬性組X 並非 R的碼,但 X 是另一個關係模式的碼,則稱 X 是R 的外部碼(Foreign key)也稱外碼。
- SC(Sno,Cno,Grade)中,Sno不是碼
- Sno是 S(Sno,Sdept,Sage)的碼,則Sno是SC的外碼
主碼與外部碼一起提供了表示關係間聯絡的手段
關係模式S(S# , SN , SD , DEAN , C# , G)
主碼:(S#,C#)
函式依賴:
(S#,C#) G
- ® SN,(S#,C#) SN
- ® SD,(S#,C#) SD
- ® DEAN, S# ® DEAN
(S#,C#) DEAN
6.2.3 正規化
- 正規化是符合某一種級別的關係模式的集合。
- 關係資料庫中的關係必須滿足一定的要求。滿足 不同程度要求的為不同正規化。
- 正規化的種類:
- 第一正規化(1NF)
- 第二正規化(2NF)
- 第三正規化(3NF)
- BC正規化(BCNF)
- 第四正規化(4NF)
- 第五正規化(5NF)
- 各種正規化之間存在聯絡:
- 某一關係模式R為第n正規化,可簡記為R∈nNF。
- 一個低一級正規化的關係模式,通過模式分解(schema decomposition)可以轉換為若干個高一級正規化的關係模式的集合,這種過程就叫規範化(normalization)。
6.2.4 2NF
- 定義6.6 若關係模式R∈1NF,並且每一個非主屬性都完全函式依賴於任何一個候選碼,則R∈2NF
- [例6.4] S-L-C(Sno,Sdept,Sloc,Cno,Grade), Sloc為學生的住處,並且每個系的學生住在同一個地方。S-L-C的碼為(Sno,Cno)。
函式依賴有
-
-
- (Sno,Cno)→Grade
- Sno→Sdept, (Sno,Cno)→Sdept
- Sno→Sloc, (Sno,Cno)→Sloc
- Sdept→Sloc
- S-L-C的碼為(Sno, Cno)
- S-L-C滿足第一正規化。
- 非主屬性Sdept、Sloc並不完全依賴於碼
- 關係模式S-L-C不屬於2NF
-
- 一個關係模式不屬於2NF,會產生以下問題:
- 插入異常
- 如果插入一個新學生,但該生未選課,即該生無Cno,由於插入元組時,必須給定碼值,因此插入失敗。
- 刪除異常
- 如果S4只選了一門課C3,現在他不再選這門課,則刪除C3後,整個元組的其他資訊也被刪除了。
- 修改複雜
- 如果一個學生選了多門課,則Sdept,Sloc被儲存了多次。如果該生轉系,則需要修改所有相關的Sdept和Sloc,造成修改的複雜化。
- 插入異常
- 出現這種問題的原因
- 例子中有兩類非主屬性:
- 一類如Grade,它對碼完全函式依賴
- 另一類如Sdept、Sloc,它們對碼不是完全函式依賴
- 例子中有兩類非主屬性:
- 解決方法:
- 用投影分解把關係模式S-L-C分解成兩個關係模式
- SC(Sno,Cno,Grade)
- S-L(Sno,Sdept,Sloc)
- SC的碼為(Sno,Cno),SL的碼為Sno,這樣使得非主屬性對碼都是完全函式依賴了
- 用投影分解把關係模式S-L-C分解成兩個關係模式
6.2.5 3NF
- 設關係模式R<U,F>∈1NF,若R中不存在這樣的碼X、屬性組Y及非主屬性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,則稱R<U,F> ∈ 3NF。
SC沒有傳遞依賴,因此SC ∈ 3NF
- 不良特性
- 插入異常:如果系中沒有學生,則有關係的資訊就無法插入。
- 刪除異常:如果學生全部畢業了,則在刪除學生資訊的同時有關係的資訊也隨之刪除了。
- 更新異常:如果學生轉系,不但要修改SDept,還要修改Sloc,如果換Sloc,則該系每個學生元組都要做相應修改。
- 資料冗餘:每個學生都儲存了所在系的Sloc的資訊。
- 解決方法
採用投影分解法,把S-L分解為兩個關係模式,以消除傳遞函式依賴:
S-D(Sno, Sdept)
D-L(Sdept,Sloc)
S-D的碼為Sno, D-L的碼為Sdept。
-
- 分解後的關係模式S-D與D-L中不再存在傳遞依賴
- 說明
(1) 每個非主屬性既不部分依賴,也不傳遞依賴於R的任何碼。
(2) 從1NF→2NF:消除非主屬性對碼的部分函式依賴
(3) 從2NF→3NF:消除非主屬性對碼的傳遞函式依賴
(4) 從一個表中刪去不依賴於主碼的資料列。
6.2.6 BCNF
- BCNF(Boyce Codd Normal Form)由Boyce和Codd提出,比3NF更進了一步。通常認為BCNF是修正的第三正規化,有時也稱為擴充的第三正規化。
- 定義6.8 設關係模式R<U,F>∈1NF,若X →Y且Y ⊆ X時X必含有碼,則R<U,F>∈BCNF。
- 換言之,在關係模式R<U,F>中,如果每一個決定屬性集都包含候選碼,則R∈BCNF。
- 不良特性
- 插入異常:如果沒有學生選修某位老師的任課,則該老師擔任課程的資訊就無法插入。
- 刪除異常:刪除學生選課資訊,會刪除掉老師的任課資訊。
- 更新異常:如果老師所教授的課程有所改動,則所有選修該老師課程的學生元組都要做改動。
- 資料冗餘:每位學生都儲存了有關老師所教授的課程的資訊。
- 症由:
主屬性對碼的不良依賴。
- 非BCNF的關係模式也可以通過分解成為BCNF。例如STJ可分解為ST(S,T)與TJ(T,J),它們都是BCNF。
- 沒有任何屬性對碼的部分函式依賴和傳遞函式依賴
- 3NF和BCNF是在函式依賴的條件下對模式分解所能達到的分離程度的測度。
- 一個模式中的關係模式如果都屬於BCNF,那麼在函式依賴範疇內,它已實現了徹底的分離,已消除了插入和刪除的異常。
- 3NF的“不徹底”性表現在可能存在主屬性對碼的部分依賴和傳遞依賴。
- ⒈ 所有非主屬性都完全函式依賴於每個候選碼
- ⒉ 所有主屬性都完全函式依賴於每個不包含它的候選碼
- ⒊ 沒有任何屬性完全函式依賴於非碼的任何一組屬性
6.2.7 多值依賴
- Teaching具有唯一候選碼(C,T,B), 即全碼。
- Teaching∈BCNF
- 設R(U)是屬性集U上的一個關係模式。X,Y,Z是U的子集,並且Z=U-X-Y。關係模式R(U)中多值依賴X→→Y成立,當且僅當對R(U)的任一關係r,給定的一對(x,z)值,有一組Y的值,這組值僅僅決定於x值而與z值無關。
- 例 Teaching(C, T, B)
對於C的每一個值,T有一組值與之對應,而不論
B取何值。因此T多值依賴於C,即C→→T。
- 多值依賴的另一個等價的定義
在R(U)的任一關係r中,如果存在元組t,s使得t[X]=s[X]
,那麼就必然存在元組w,v∈r,(w,v可以與s,t相
同), 使得w[X]=v[X]=t[X],而w[Y]=t[Y],w[Z]=s[Z],
v[Y]=s[Y],v[Z]=t[Z](即交換s,t元組的Y值所得的兩
個新元組必在r中則Y多值依賴於X,記為X→→Y。這裡
X,Y是U的子集,Z=U-X-Y。
- 平凡多值依賴和非平凡的多值依賴
- 若X→→Y,而Z=Ф,即Z為空,則稱X→→Y為平凡的多值依賴。
- 否則稱X→→Y為非平凡的多值依賴。
- 找出關係上所滿足的多值依賴。
- ®®C
- ®®A
- C®®B?若使B®®C成立,需加入哪些元組?
- 按照語義對於W的每一個值Wi,S有一個完整的集合與之對應而不問C取何值。所以W→→S。
- 如圖6.7所示
- 對應W的某一個值Wi的全部S值記作{S}Wi(表示此倉庫工作的全部保管員)
- 全部C值記作{C}Wi(表示在此倉庫中存放的所有商品)
- 應當有{S}Wi中的每一個值和{C}Wi中的每一個C值對應
- 於是{S}Wi與{C}Wi之間正好形成一個完全二分圖,因而W→→S。
- 由於C與S的完全對稱性,必然有W→→C成立。
- 多值依賴的性質
(1)多值依賴具有對稱性。
即若X→→Y,則X→→Z,其中Z=U-X-Y
-
-
- 多值依賴的對稱性可以用完全二分圖直觀地表示出來。
- 從[例6.10] 容易看出,因為每個保管員保管所有商品,同時每種商品被所有保管員保管,顯然若W→→S,必然有W→→C。
-
- (2)多值依賴具有傳遞性。即若X→→Y,Y→→Z, 則 X→→Z -Y。
- (3)函式依賴是多值依賴的特殊情況。即若X→Y,則
- X→→Y。
- (4)若X→→Y,X→→Z,則X→→YZ。
- (5)若X→→Y,X→→Z,則X→→Y∩Z。
- (6)若X→→Y,X→→Z,則X→→Y-Z,X→→Z -Y。
- 多值依賴與函式依賴的區別
(1)多值依賴的有效性與屬性集的範圍有關
-
-
- 若X→→Y在U上成立,則在W(XYÍ W Í U)上一定成立;反之則不然,即X→→Y在W(W Ì U)上成立,在U上並不一定成立。
- 原因:多值依賴的定義中不僅涉及屬性組X和Y,而且涉及U中其餘屬性Z。
- 多值依賴的有效性與屬性集的範圍有關(續)
- 一般地,在R(U)上若有X→→Y在W(W Ì U)上成立,則稱X→→Y為R(U)的嵌入型多值依賴。
- 函式依賴X→Y的有效性僅決定於X、Y這兩個屬性集的值
- 只要在R(U)的任何一個關係r中,元組在X和Y上的值滿足定義6.l,則函式依賴X→Y在任何屬性集W(XYÍ W ÍU)上成立。
- 2)若函式依賴X→Y在R (U)上成立,則對於任何Y‘ Ì Y均有X→Y’ 成立。多值依賴X→→Y若在R(U)上成立,不能斷言對於任何Y’ Ì Y有X→→Y’ 成立。
-
6.2.8 4NF
- 關係模式R<U,F>∈1NF,如果對於R的每個非平凡多值依賴X→→Y(Y ⊈ X),X都含有碼,則R<U,F>∈4NF。
- 不允許有非平凡且非函式依賴的多值依賴。
- 允許的非平凡多值依賴實際上是函式依賴。
- 6.2.9 規範化小結
- 在關係資料庫中,對關係模式的基本要求是滿足第一正規化。
- 規範化程度過低的關係不一定能夠很好地描述現實世界
- 可能存在插入異常、刪除異常、修改複雜、資料冗餘等問題
解決方法就是對其進行規範化,轉換成高階正規化。
- 一個低一級正規化的關係模式,通過模式分解可以轉換為若干個高一級正規化的關係模式集合,這種過程就叫關係模式的規範化。
- 關係資料庫的規範化理論是資料庫邏輯設計的工具。
- 規範化的基本思想
- 是逐步消除資料依賴中不合適的部分,使模式中的各關係模式達到某種程度的“分離”。
- 即採用“一事一地”的模式設計原則
- 讓一個關係描述一個概念、一個實體或者實體間的一種聯絡。
- 若多於一個概念就把它“分離”出去。
- 因此 規範化實質上是概念的單一化。
關係模式規範化的基本步驟
1NF
↓ 消除非主屬性對碼的部分函式依賴
消除決定因素 2NF
非碼的非平凡 ↓ 消除非主屬性對碼的傳遞函式依賴
函式依賴 3NF
↓ 消除主屬性對碼的部分和傳遞函式依賴
BCNF
↓ 消除非平凡且非函式依賴的多值依賴
4NF
- 不能說規範化程度越高的關係模式就越好。
- 必須對現實世界的實際情況和使用者應用需求作進一步分析,確定一個合適的、能夠反映現實世界的模式。
- 上面的規範化步驟可以在其中任何一步終止。
6.3 資料依賴的公理系統
- 定義6.11 對於滿足一組函式依賴F的關係模式 R <U,F>,其任何一個關係r,若函式依賴X→Y都成立(即r中任意兩元組t、s,若t[X]=s[X],則 t[Y]=s[Y]),則稱F邏輯蘊涵X →Y。
- Armstrong公理系統
- 一套推理規則,是模式分解演算法的理論基礎
- 用途
- 求給定關係模式的碼
- 從一組函式依賴求得蘊涵的函式依賴
- Armstrong公理系統 設U為屬性集總體,F是U上的一組函式依賴, 於是有關係模式R <U,F >。對R <U,F> 來說有以下的推理規則:
- A1 自反律(reflexivity rule):若Y Í X Í U,則X →Y 為F所蘊涵。
- A2 增廣律(augmentation rule):若X→Y為F所蘊涵,且Z Í U,則XZ→YZ 為F所蘊涵。
- A3 傳遞律(transitivity rule):若X→Y及Y→Z為F所蘊涵,則X→Z 為F所蘊涵。
注意:由自反律所得到的函式依賴均是平凡的函式依賴,
自反律的使用並不依賴於F。
- 根據A1,A2,A3這三條推理規則可以得到下面三條推理規則:
- 合併規則(union rule):
由X→Y,X→Z,有X→YZ。
-
- 偽傳遞規則(pseudo transitivity rule):
由X→Y,WY→Z,有XW→Z。
-
- 分解規則(decomposition rule):
- X→Y及ZÍY,有X→Z。
- 根據合併規則和分解規則,可得引理6.1
- 引理6.1 X→A1 A2…Ak成立的充分必要條件是X→Ai成立(i=1,2,…,k)。
- 定義6.12 在關係模式R<U,F>中為F所邏輯蘊涵的函式依賴的全體叫作F的閉包,記為F +。
- 定義6.13 設F為屬性集U上的一組函式依賴,X、Y ÍU, XF+={ A|X→A能由F根據Armstrong公理匯出},XF+稱為屬性集X關於函式依賴集F的閉包。
- 引理6.2 設F為屬性集U上的一組函式依賴,X、Y Í U,X→Y能由F根據Armstrong公理匯出的充分必要條件是Y ÍXF+。
- 引理6.2的用途
判定X→Y是否能由F根據Armstrong公理匯出的問題,就
轉化為求出XF+,判定Y是否為XF+的子集的問題。
- 求閉包的演算法
- 演算法6.1 求屬性集X(X Í U)關於U上的函式依賴集F的閉包XF+
- 輸入:X,F
- 輸出:XF+
- 步驟:
- 令X(0)=X,i=0
- 求B,這裡B ={ A |($ V)( $ W)(V→WÎF
- V Í X(i)AÎ W)}。
- X(i+1)=B∪X(i) 。
- 判斷X(i+1)= X(i) 。
- 若X(i+1)與X(i)相等或X(i)=U ,則X(i)就是XF+,
演算法終止。
- 若否,則i=i+1,返回第②步。
對於演算法6.1, 令ai =|X(i)|,{ai }形成一個步長大於1的嚴格遞增的序列,序列的上界是 | U |,因此該演算法最多 |U| - |X| 次迴圈就
會終止。
-
- 由引理二,判定X®Y是否能由F根據Armstrong公理匯出,可轉化為求 ,判定YÍ 是否成立。
輸入:X,F
輸出:
1) := X;
- )考察每個F中的函式依賴 A®B,
- A Í ,則 := ÈB
3)繼續考察,直到 不再增大為止。
- 函式依賴集的等價變換
- 例:r是關係模式R(A, B, C)上的一個關係,用SQL檢測在r上是否滿足函式依賴B ® C。
- 有效性與完備性的含義
- 有效性:由F 出發根據Armstrong公理推匯出來的每一個函式依賴一定在F +中
- 完備性:F +中的每一個函式依賴,必定可以由F出發根據Armstrong公理推匯出來
- Armstrong公理的完備性及有效性說明:
- “匯出”與“蘊涵”是兩個完全等價的概念
- F+ :為F所邏輯蘊涵的函式依賴的全體(定義6.12 )
- F+ :可以說成由F出發藉助Armstrong公理匯出的函式依賴的集合
- 定義6.14 如果G+=F+,就說函式依賴集F覆蓋G(F是G的覆蓋,或G是F的覆蓋),或F與G等價。
- 引理6.3 F+ = G+ 的充分必要條件是F Í G+和GÍ F+ 。
- 要判定F Í G+,只須逐一對F中的函式依賴X→Y,考察 Y 是否屬於XG++ 就行了。因此引理6.3 給出了判斷兩個函式依賴集等價的可行演算法。
- 定義6.15 如果函式依賴集F滿足下列條件,則稱F為一個極小函式依賴集,亦稱為最小依賴集或最小覆蓋。
(1)單屬性化: F中任一函式依賴的右部僅含有一個屬性。
(2)無冗餘化: F中不存在這樣的函式依賴X→A, 使得F與F-{X→A}等價。
(3)既約化: F中不存在這樣的函式依賴X→A, X有真子集Z使得F-{X→A}∪{Z→A}與F等價。
- 定理6.3 每一個函式依賴集F均等價於一個極小函式依賴集Fm。此Fm稱為F的最小依賴集。
- 證:構造性證明,分三步對F進行“極小化處理”,找出F的一個最小依賴集。
(1)逐一檢查F中各函式依賴FDi:X→Y,
若Y=A1A2 …Ak,k≥2,
則用{X→Aj | j=1,2,…,k}來取代X→Y。
引理6.1保證了F變換前後的等價性。
(2)逐一檢查F中各函式依賴FDi:X→A,
令G=F-{X→A},
- AÎXG+,則從F中去掉此函式依賴。
- F與G 等價的充要條件是AÎXG+
因此F變換前後是等價的。
(3)逐一取出F中各函式依賴FDi:X→A,
設X=B1B2…Bm,m≥2,
逐一考查Bi (i=1,2,…,m),
- A Î(X-Bi )F+,則以X-Bi 取代X。
由於F與F-{X→A}∪{Z→A}等價的充要條件是
- ÎZF+ ,其中Z=X-Bi ,因此F變換前後是等價的。
最後剩下的F就一定是極小依賴集。
因為對F的每一次“改造”都保證了改造前後的兩個函式
依賴集等價,因此剩下的F與原來的F等價。
證畢
- 定理6.3的證明過程
- 是求F極小依賴集的過程
- 也是檢驗F是否為極小依賴集的一個演算法
若改造後的F與原來的F相同,說明F就是一個最小依賴集
- F的最小依賴集Fm不一定是唯一的,它與對各函式依賴FDi 及X→A中X各屬性的處置順序有關。
- F = {A®B,B®A,A®C,B®C},求Fm。
- 檢查A®B,G=F-{A®B}={B®A,A®C,B®C}
- ,C},BÏ{A,C}
-
- 檢查A®C,G=F-{A®C}={A®B,B®A,B®C}
- ,B,C},CÎ{A,B,C}
- F中刪除A®C,
- m = {A®B,B®A,B®C}
- Fm= {A®B,B®A,A®C}
- = {C®A,A®G,CG®B,B®A},求m。
F是無冗餘的。
- CG®B,
- = = {G}
- Ï
-
- = = {C,A,G,B}
- Î ,以C代替CG
- Fm = {C®A,A®G,C®B,B®A}
- 在R<U,F>中可以用與F等價的依賴集G來取代F
- 原因:兩個關係模式R1 <U,F>,R2<U,G>,如果F與G等價,那麼R1的關係一定是R2的關係。反過來,R2的關係也一定是R1的關係。
、
- 把低一級的關係模式分解為若干個高一級的關係模式的方法不是唯一的
- 只有能夠保證分解後的關係模式與原關係模式等價,分解方法才有意義
- 三種模式分解等價的定義:
- *6.4 模式的分解
⒈ 分解具有無損連線性
⒉ 分解要保持函式依賴
⒊ 分解既要保持函式依賴,又要具有無損連線性
關係模式R<U,F>的一個分解:
ρ={ R1<U1,F1>,R2<U2,F2>,…,Rn<Un,Fn>}
- ∪Ui,且不存在 Ui Í Uj,Fi 為 F在 Ui 上的投影
- 6.17 函式依賴集合{X→Y | X→Y Î F+∧XY ÍUi} 的一個覆蓋 Fi 叫作 F 在屬性 Ui 上的投影
- R<U , F> , U = (A , B , C) , F = {A®B , B®C}可以有分解:
- , Æ > , R2<B , Æ > , R3<C , Æ >}
- , B},{A®B}> , R2<{A , C},{A®C}>}
- 關係模式R<U,F>的一個分解 ρ={ R1<U1,F1>,R2<U2,F2>, …,Rn<Un,Fn>}
若R與R1、R2、…、Rn自然連線的結果相等,則稱關係模式R的這個分解ρ具有無損連線性(Lossless join)
- 具有無損連線性的分解保證不丟失資訊
- 無損連線性不一定能解決插入異常、刪除異常、修改複雜、資料冗餘等問題
將SL分解為下面二個關係模式:
ND(Sno, Sdept)
NL(Sno, Sloc)
第3種分解方法具有無損連線性
問題:這種分解方法沒有保持原關係中的函式依賴
-
- SL中的函式依賴Sdept→Sloc沒有投影到關係模式ND、NL上
- 設關係模式R<U,F>被分解為若干個關係模式
- R1<U1,F1>,R2<U2,F2>,…,Rn<Un,Fn>
- (其中U=U1∪U2∪…∪Un,且不存在Ui Í Uj,Fi為F在Ui上的投影),若F所邏輯蘊含的函式依賴一定也由分解得到的某個關係模式中的函式依賴Fi所邏輯蘊含,則稱關係模式R的這個分解是保持函式依賴的(Preserve dependency)
- . 將SL分解為下面二個關係模式:
- ND(Sno, Sdept)
- DL(Sdept, Sloc)
- 這種分解方法就保持了函式依賴
- 如果一個分解具有無損連線性,則它能夠保證不丟失資訊
- 如果一個分解保持了函式依賴,則它可以減輕或解決各種異常情況
- 分解具有無損連線性和分解保持函式依賴是兩個互相獨立的標準。具有無損連線性的分解不一定能夠保持函式依賴;同樣,保持函式依賴的分解也不一定具有無損連線性。
- 將SL分解為下面二個關係模式:
- ND(Sno, Sdept)
- DL(Sdept, Sloc)
- 這種分解方法就保持了函式依賴
- 第1種分解方法既不具有無損連線性,也未保持函式依賴,它不是原關係模式的一個等價分解
- 第2種分解方法未保持了函式依賴,不具有無損連線性
- 第3種分解方法具有無損連線性,但未保持函式依賴
- 第4種分解方法既具有無損連線性,又保持了函式依賴
- 演算法6.2 判別一個分解的無損連線性
- 演算法6.3(合成法)轉換為3NF的保持函式依賴的分解。
- 演算法6.4 轉換為3NF既有無損連線性又保持函式依賴的分解
- 演算法6.5 (分解法)轉換為BCNF的無損連線分解
- 演算法6.6 達到4NF的具有無損連線性的分解
- 若要求分解具有無損連線性,那麼模式分解一定能夠達到4NF。
- 若要求分解保持函式依賴,那麼模式分解一定能夠達到3NF,但不一定能夠達到BCNF。
- 若要求分解既具有無損連線性,又保持函式依賴,則模式分解一定能夠達到3NF,但不一定能夠達到BCNF。
- 定理
- U1ÇU2 ® U1(或U2),則r =∏U1(r) ∏U2(r) 。
-
- 一般定義
關係模式R<U , F> ,U = Ui ,
- = {R1<U1 , F1> , R2<U2 , F2>, … , Rn<Un , Fn>}是R<U , F>的一個分解,r是R<U , F>的一個關係。
- mr(r) = ∏Ri(r) ,若對於R<U , F>的任一個關係r,都有r = mr (r),則稱r是R<U , F>的一個無損連線分解。
- 演算法:(判別一個分解的無損連線性)
U={A1, A2, … , An}
- = {R1<U1 , F1> , R2<U2 , F2>, … , Rk<Uk , Fk>}
⒈建立一個n列k行的矩陣
- = {Cij | 若Aj Î Ui , Cij = aj , 否則Cij = bij}
- F中每一個函式依賴X®Y,若TB中存在元組 t1,t2,使得t1[X]=t2[X],t1[Y]≠t2[Y],則每一個Ai Î Y:
①若t1[Ai],t2[Ai]中有一個等於aj,則另一個也
改為aj ;
②若①不成立,則全部改為bmj,m是這些行的行號最小值。
反覆執行⒉,直至:
①TB中出現一行為a1, a2 , … , an 的一行。
② TB不再發生變化,且沒有一行為a1, … , an。
- ①情況下, r為無損分解,否則為有損分解
- 演算法:(達到BCNF無損連線分解演算法)
給定關係模式R<U , F> ,
- 令r = {R<U , F>}
- 檢查r中各關係模式是否屬於BCNF,若是,則 演算法終止。
- 設r 中Ri<Ui , Fi>不屬於BCNF,
- X®AÎ ,且X不是Ri的碼,
- XA是Ri的真