1. 程式人生 > >資料庫系統概論(第六章:關係資料理論)

資料庫系統概論(第六章:關係資料理論)

第六章  關係資料理論

6.1 問題的提出
1、關係資料庫邏輯設計
(1)針對具體問題,如何構造一個適合於它的資料模式

(2)資料庫邏輯設計的工具──關係資料庫的規範化理論


2、關係模式由五部分組成,是一個五元組:R(U, D, DOM, F)
(1)關係名R是符號化的元組語義
(2)U為一組屬性
(3)D為屬性組U中的屬性所來自的域
(4)DOM為屬性到域的對映
(5)F為屬性組U上的一組資料依賴
(6)由於D、DOM與模式設計關係不大,因此在本章中把關係模式看作一個三元組:R<U,F>
(7)當且僅當U上的一個關係r滿足F時,r稱為關係模式R<U,F>的一個關係
(8)作為二維表,關係要符合一個最基本的條件:每個分量必須是不可分開的資料項。滿足了這個條件的關係模式就屬於第一正規化(1NF)

 屬性間的聯絡


  1、一對一聯絡
設X,Y為關係中的屬性或屬性組,它們的所有可能取值組成兩個集合。如果對於X中的任一具體值Y中至多有一個值與之對應,稱X,Y這兩個屬性之間是一對一聯絡。


2、一對多聯絡
如果屬性值集合X中的任一個具體值,至多與Y中的一個值相對應,而Y中的任一個具體值卻可以和X中的多個值相對應,則稱兩個屬性間從X到Y為m:1的聯絡或從Y到X是1:m的聯絡。
注意:這裡指的是屬性值個數的多少,而不是具有相同屬性值的有多少個元組,二者正好相反。


3、多對多聯絡
在X,Y兩個屬性值集中,如果任一個值都可以至多和另一個屬性值集中多個值對應,反之亦然,則稱屬性X和Y是m:n關係。


4、資料依賴
(1)是一個關係內部屬性與屬性之間的一種約束關係
     ※通過屬性間值的相等與否體現出來的資料間相互聯絡
(2)是現實世界屬性間相互聯絡的抽象

(3)是資料內在的性質
(4)是語義的體現


5、資料依賴的主要型別
函式依賴(Functional Dependency,簡記為FD)
多值依賴(Multi-Valued Dependency,簡記為MVD)


6、關係模式Student<U, F>中存在的問題:
(1)資料冗餘
         浪費大量的儲存空間
(2)更新異常(Update Anomalies)
         資料冗餘 ,更新資料時,維護資料完整性代價大。
(3)插入異常(Insertion Anomalies)
(4)刪除異常(Deletion Anomalies)

7、結論
(1)Student關係模式不是一個好的模式。
(2)一個“好”的模式應當不會發生插入異常、刪除異常和更新異常,資料冗餘應儘可能少。


8、原因
由存在於模式中的某些資料依賴引起的。


9、解決方法
用規範化理論改造關係模式來消除其中不合適的資料依賴

6.2  規範化
規範化理論正是用來改造關係模式,通過分解關係模式來消除其中不合適的資料依賴,以解決插入異常、刪除異常、更新異常和資料冗餘問題。

6.2.1 函式依賴
1.  函式依賴
(1)定義6.1  
設R(U)是一個屬性集U上的關係模式,X和Y是U的子集。若對於R(U)的任意一個可能的關係r,r 中不可能存在兩個元組在X上的屬性值相等, 而在Y上的屬性值不等, 則稱“X函式確定Y”或“Y函式依賴於X”,記作X→Y。
(2)函式依賴與屬性間的聯絡型別有關
※一對一聯絡:X←→Y
※多對一聯絡:X→Y
※ 多對多聯絡:不存在依賴關係
※ 可從屬性間的聯絡型別來分析屬性間的函式依賴 
(3)說明: 
※函式依賴不是指關係模式R的某個或某些關係例項滿足的約束條件,而是指R的所有關係例項均要滿足的約束條件。
※函式依賴是語義範疇的概念。只能根據資料的語義來確定函式依賴。
※資料庫設計者可以對現實世界作強制的規定。

2. 平凡函式依賴與非平凡函式依賴
(1)X→Y,但Y⊈X則稱X→Y是非平凡的函式依賴。
(2)X→Y,但Y⊆X 則稱X→Y是平凡的函式依賴。
//對於任一關係模式,平凡函式依賴都是必然成立的,它不反映新的語義。
若不特別宣告, 我們總是討論非平凡函式依賴。
(3)若X→Y,則X稱為這個函式依賴的決定因素(Determinant)。
(4)若X→Y,Y→X,則記作X←→Y。
(5)若Y不函式依賴於X,則記作X↛Y。

3. 完全函式依賴與部分函式依賴
(1)定義6.2  
在R(U)中,如果X→Y,並且對於X的任何一個真子集X’, 都有 X’ ↛ Y, 則稱Y對X完全函式依賴,記作X → Y。
(2)若X→Y,但Y不完全函式依賴於X,則稱Y對X部分函式依賴,記作X → Y
4. 傳遞函式依賴
(1)定義6.3  
在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 則稱Z對X傳遞函式依賴(transitive functional dependency)。記為:X → Z。
(2)注: 如果Y→X, 即X←→Y,則Z直接依賴於X,而不是傳遞函式依賴。

6.2.2  碼
(1)定義6.4 
 設K為R<U,F>中的屬性或屬性組合。若K → U,則K稱為R的一個候選碼(Candidate Key)。
   ※ 如果U部分函式依賴於K,即K → U,則K稱為超碼      (Surpkey)。候選碼是最小的超碼,即K的任意一個真子集都不是候選碼。
(2)若關係模式R有多個候選碼,則選定其中的一個做為主碼(Primary key)。
(3)主屬性與非主屬性
        ※包含在任何一個候選碼中的屬性 ,稱為主屬性          (Prime attribute) 
        ※不包含在任何碼中的屬性稱為非主屬性(Nonprime attribute)或非碼屬性(Non-key attribute) 
(4)全碼:整個屬性組是碼,稱為全碼(All-key) 
(5)定義6.5  
關係模式 R中屬性或屬性組X 並非 R的碼,但 X 是另一個關係模式的碼,則稱 X 是R 的外部碼(Foreign key)也稱外碼。
(6)主碼與外部碼一起提供了表示關係間聯絡的手段


6.2.3  正規化
(1)正規化是符合某一種級別的關係模式的集合。
(2)關係資料庫中的關係必須滿足一定的要求。滿足   不同程度要求的為不同正規化。
(3)正規化的種類:
第一正規化(1NF)
第二正規化(2NF)
第三正規化(3NF)
BC正規化(BCNF)
第四正規化(4NF)
第五正規化(5NF)
(4)某一關係模式R為第n正規化,可簡記為R∈nNF。
(5)一個低一級正規化的關係模式,通過模式分解(schema decomposition)可以轉換為若干個高一級正規化的關係模式的集合,這種過程就叫規範化(normalization)。

6.2.4  2NF
(1)定義6.6  
若關係模式R∈1NF,並且每一個非主屬性都完全函式依賴於任何一個候選碼,則R∈2NF
(2)一個關係模式不屬於2NF,會產生以下問題:
插入異常
如果插入一個新學生,但該生未選課,即該生無Cno,由於插入元組時,必須給定碼值,因此插入失敗。
刪除異常
如果S4只選了一門課C3,現在他不再選這門課,則刪除C3後,整個元組的其他資訊也被刪除了。
修改複雜
如果一個學生選了多門課,則Sdept,Sloc被儲存了多次。如果該生轉系,則需要修改所有相關的Sdept和Sloc,造成修改的複雜化。

 6.2.5 3NF
(1)定義6.7  
設關係模式R<U,F>∈1NF,若R中不存在這樣的碼X、屬性組Y及非主屬性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,則稱R<U,F> ∈ 3NF。
(2)不良特性
插入異常:
如果系中沒有學生,則有關係的資訊就無法插入。
刪除異常:
如果學生全部畢業了,則在刪除學生資訊的同時有關係的資訊也隨之刪除了。
更新異常:
如果學生轉系,不但要修改SDept,還要修改Sloc,如果換Sloc,則該系每個學生元組都要做相應修改。
資料冗餘:
每個學生都儲存了所在系的Sloc的資訊。
(3)說明
※每個非主屬性既不部分依賴,也不傳遞依賴於R的任何碼。
※從1NF→2NF:消除非主屬性對碼的部分函式依賴
※從2NF→3NF:消除非主屬性對碼的傳遞函式依賴
※ 從一個表中刪去不依賴於主碼的資料列。

 6.2.6  BCNF
(1)BCNF(Boyce Codd Normal Form)由Boyce和Codd提出,比3NF更進了一步。通常認為BCNF是修正的第三正規化,有時也稱為擴充的第三正規化。
(2)定義6.8  設關係模式R<U,F>∈1NF,若X →Y且Y ⊆ X時X必含有碼,則R<U,F>∈BCNF。
(3)換言之,在關係模式R<U,F>中,如果每一個決定屬性集都包含候選碼,則R∈BCNF。
(4)不良特性
插入異常:如果沒有學生選修某位老師的任課,則該老師擔任課程的資訊就無法插入。
刪除異常:刪除學生選課資訊,會刪除掉老師的任課資訊。
更新異常:如果老師所教授的課程有所改動,則所有選修該老師課程的學生元組都要做改動。
資料冗餘:每位學生都儲存了有關老師所教授的課程的資訊。
(5)症由:
主屬性對碼的不良依賴。
(6)3NF和BCNF是在函式依賴的條件下對模式分解所能達到的分離程度的測度。
        ※一個模式中的關係模式如果都屬於BCNF,那麼在函式依賴範疇內,它已實現了徹底的分離,已消除了插入和刪除的異常。
        ※3NF的“不徹底”性表現在可能存在主屬性對碼的部分依賴和傳遞依賴。
(7)BCNF的關係模式所具有的性質
         ※所有非主屬性都完全函式依賴於每個候選碼
         ※ 所有主屬性都完全函式依賴於每個不包含它的候選碼
         ※ 沒有任何屬性完全函式依賴於非碼的任何一組屬性


6.2.7 多值依賴

(1)存在的問題
資料冗餘度大:有多少名任課教師,參考書就要儲存多少次。
增加操作複雜:當某一課程增加一名任課教師時,該課程有多少本參照書,就必須插入多少個元組。
刪除操作複雜:某一門課要去掉一本參考書,該課程有多少名教師,就必須刪除多少個元組。
修改操作複雜:某一門課要修改一本參考書,該課程有多少名教師,就必須修改多少個元組。
(2)產生原因: 存在多值依賴
(3)定義6.9    
設R(U)是屬性集U上的一個關係模式。X,Y,Z是U的子集,並且Z=U-X-Y。關係模式R(U)中多值依賴X→→Y成立,當且僅當對R(U)的任一關係r,給定的一對(x,z)值,有一組Y的值,這組值僅僅決定於x值而與z值無關。
(4)多值依賴的另一個等價的定義
在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。
(5)平凡多值依賴和非平凡的多值依賴
※若X→→Y,而Z=Ф,即Z為空,則稱X→→Y為平凡的多值依賴。
※否則稱X→→Y為非平凡的多值依賴。
(6)按照語義對於W的每一個值Wi,S有一個完整的集合與之對應而不問C取何值。所以W→→S。
(7)多值依賴的性質
※多值依賴具有對稱性。
即若X→→Y,則X→→Z,其中Z=U-X-Y
多值依賴的對稱性可以用完全二分圖直觀地表示出來。
※多值依賴具有傳遞性。
即若X→→Y,Y→→Z, 則       X→→Z -Y。(3)函式依賴是多值依賴的特殊情況。
即若X→Y,則      X→→Y。
※若X→→Y,X→→Z,則X→→YZ。
※若X→→Y,X→→Z,則X→→Y∩Z。
※若X→→Y,X→→Z,則X→→Y-Z,X→→Z -Y。

6.2.8  4NF
(1)定義6.10  
關係模式R<U,F>∈1NF,如果對於R的每個非平凡多值依賴X→→Y(Y ⊈ X),X都含有碼,則R<U,F>∈4NF。
(2)不允許有非平凡且非函式依賴的多值依賴。
(3)允許的非平凡多值依賴實際上是函式依賴。

6.2.9  規範化小結
(1)在關係資料庫中,對關係模式的基本要求是滿足第一正規化。
(2)規範化程度過低的關係不一定能夠很好地描述現實世界
       ※可能存在插入異常、刪除異常、修改複雜、資料冗餘等問題
       ※解決方法就是對其進行規範化,轉換成高階正規化。
(3)一個低一級正規化的關係模式,通過模式分解可以轉換為若干個高一級正規化的關係模式集合,這種過程就叫關係模式的規範化。
(4)關係資料庫的規範化理論是資料庫邏輯設計的工具。

規範化小結
(1)不能說規範化程度越高的關係模式就越好。
             ※ 必須對現實世界的實際情況和使用者應用需求作進一步分析,確定一個合適的、能夠反映現實世界的模式。
             ※上面的規範化步驟可以在其中任何一步終止。

6.3  資料依賴的公理系統
(1)定義6.11  
對於滿足一組函式依賴F的關係模式   R <U,F>,其任何一個關係r,若函式依賴X→Y都成立(即r中任意兩元組t、s,若t[X]=s[X],則 t[Y]=s[Y]),則稱F邏輯蘊涵X →Y。
(2)Armstrong公理系統
       ※一套推理規則,是模式分解演算法的理論基礎
       ※用途
       求給定關係模式的碼
       從一組函式依賴求得蘊涵的函式依賴
(3)定義6.12  在關係模式R<U,F>中為F所邏輯蘊涵的函式依賴的全體叫作F的閉包,記為F +。
(4)定義6.13  設F為屬性集U上的一組函式依賴,X、Y ÍU, XF+={ A|X→A能由F根據Armstrong公理匯出},XF+稱為屬性集X關於函式依賴集F的閉包。
(5)有效性與完備性的含義
有效性:由F 出發根據Armstrong公理推匯出來的每一個函式依賴一定在F +中
完備性:F +中的每一個函式依賴,必定可以由F出發根據Armstrong公理推匯出來
(6)定義6.14 
 如果G+=F+,就說函式依賴集F覆蓋G(F是G的覆蓋,或G是F的覆蓋),或F與G等價。
//兩個函式依賴集等價是指它們的閉包等價
(7)定義6.15 
 如果函式依賴集F滿足下列條件,則稱F為一個極小函式依賴集,亦稱為最小依賴集或最小覆蓋。
單屬性化: F中任一函式依賴的右部僅含有一個屬性。
無冗餘化: F中不存在這樣的函式依賴X→A, 使得F與F-{X→A}等價。
既約化: F中不存在這樣的函式依賴X→A, X有真子集Z使得F-{X→A}∪{Z→A}與F等價。 
(8)定理6.3 
 每一個函式依賴集F均等價於一個極小函式依賴集Fm。此Fm稱為F的最小依賴集。


6.4 模式的分解
1、把低一級的關係模式分解為若干個高一級的關係模式的方法不是唯一的
 2、只有能夠保證分解後的關係模式與原關係模式等價,分解方法才有意義
 3、三種模式分解等價的定義:
 分解具有無損連線性
 分解要保持函式依賴
 分解既要保持函式依賴,又要具有無損連線性
(1)具有無損連線性的模式分解
※關係模式R<U,F>的一個分解 ρ={ R1<U1,F1>,R2<U2,F2>, …,Rn<Un,Fn>}
 若R與R1、R2、…、Rn自然連線的結果相等,則稱關係模式R的這個分解ρ具有無損連線性(Lossless join)
※具有無損連線性的分解保證不丟失資訊
※無損連線性不一定能解決插入異常、刪除異常、修改複雜、資料冗餘等問題
(2)保持函式依賴的模式分解
※設關係模式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)
※如果一個分解具有無損連線性,則它能夠保證不丟失資訊
※如果一個分解保持了函式依賴,則它可以減輕或解決各種異常情況
※分解具有無損連線性和分解保持函式依賴是兩個互相獨立的標準。具有無損連線性的分解不一定能夠保持函式依賴;同樣,保持函式依賴的分解也不一定具有無損連線性。

分解演算法
演算法6.2  判別一個分解的無損連線性
演算法6.3(合成法)轉換為3NF的保持函式依賴的分解。
演算法6.4 轉換為3NF既有無損連線性又保持函式依賴的分解
演算法6.5 (分解法)轉換為BCNF的無損連線分解
演算法6.6  達到4NF的具有無損連線性的分解  
※若要求分解具有無損連線性,那麼模式分解一定能夠達到4NF。
※若要求分解保持函式依賴,那麼模式分解一定能夠達到3NF,但不一定能夠達到BCNF。
※若要求分解既具有無損連線性,又保持函式依賴,則模式分解一定能夠達到3NF,但不一定能夠達到BCNF。
結論:若要求分解保持函式依賴,那麼分解後的模式總可以達到3NF,但不一定能達到BCNF。


6.5小結
1、若要求分解具有無損連線性,那麼模式分解一定能夠達到4NF

2、若要求分解保持函式依賴,那麼模式分解一定能夠達到3NF,但不一定能夠達到BCNF
3、若要求分解既具有無損連線性,又保持函式依賴,則模式分解一定能夠達到3NF,但不一定能夠達到BCNF

4、規範化理論為資料庫設計提供了理論的指南和工具
      ※也僅僅是指南和工具
5、並不是規範化程度越高,模式就越好
      ※ 必須結合應用環境和現實世界的具體情況合理地選擇資料庫模式