數據庫復習之規范化理論


聲明:本文為作者復習數據庫課程時簡單記錄的筆記,如有錯誤之處,敬請指出,謝謝。

6.1問題的提出

1.一個關系模式是一個五元組,形如R(U,D,DOM,F)。其中D、DOM與模式設計關系不大,可以看作三元組R<U,F>。

  • 關系名R是符號化的元組定義;
  • U為一組屬性;
  • D為屬性組U中的屬性所來自的域;
  • DOM為屬性到域的映射;
  • F為屬性組U上的一組數據依賴

2.數據依賴:一個關系內部屬性與屬性之間的一種約束關系。最重要的是函數依賴(FD)多值依賴(MVD),還有一個叫連接依賴

3.分析關系模式常見問題:

  • 數據冗余:重復出現,浪費空間。(盡可能少)
  • 更新異常:更新代價(最好沒有)
  • 插入異常:插入部分信息時無法插入(最好沒有)
  • 刪除異常:可能刪除了其他想要的數據(最好沒有)

6.2規范化

1.函數依賴:(概念省略,X、Y是屬性組U的子集)X函數確定Y或Y函數依賴於X,記作X→Y。例如:系號→系名,學號→姓名。

  (1)函數依賴不是指關系模式R中的某些關系滿足的約束條件,而是指R上的一切關系都要滿足的約束條件。函數依賴關系的存在與時間無關,而只與數據之間的語義規定有關。 函數依賴的存在與時間無關,只與數據之間的語義定義有關。

  (2)函數依賴的基本性質:擴張性,投影性,合並性,分解性,

2.非平凡的函數依賴X→Y:X→Y,但Y不包含於X。默認我么討論的都是非平凡的函數依賴。

3.平凡的函數依賴X→Y:X→Y,但Y包含於X。必然成立(好像是廢話)。

4.若X→Y,則稱X為這個函數依賴的決定屬性組,也稱決定因素,Y為依賴因素


5.完全函數依賴:在R(U)中,如果X → Y,並且對於X的任何一個真子集X’,都有X’ /→ Y,則稱Y對X完全函數依賴。記作X F→ Y。

  推論:單一決定因素一定是完全函數依賴。

  例:(學號,課程號)→成績

6.部分函數依賴:在R(U)中,如果X→Y,且Y不完全函數依賴於X,則稱Y對X部分函數依賴。記作X P→ Y。

  例:(學號,課程號)→課程名  (因為課程號→課程名,而課程號是(學號,課程號)的真子集)

7.傳遞函數依賴:在R(U)中,如果X→Y(Y不包含於X),Y /→ X,Y→Z(Z不包含於Y),則稱Z對X傳遞函數依賴。記為X 傳遞(t)→ Z。

  注:條件中要有Y /→ X,是因為如果Y→ X,則Y←→ X,則X直接→ Z,屬於直接函數依賴,而非間接。

  例:系號→系名,系名→系主任名。


8.候選碼:設K為R<U,F>中的屬性或屬性組合,若K F→ U,則稱K為R的候選碼(候選鍵)。(即U完全依賴於K)。

9.超碼:若U部分依賴於K,即K P→ U,則稱K為超碼(超鍵)。候選碼是最小的超碼

10.候選碼可能多於一個,可選其中一個作為主碼。包含在任何一個候選碼中的屬性稱為主屬性;不包含在任何一個候選碼中的屬性稱為非主屬性(非碼屬性)。最簡單的情況,單個屬性是碼(主碼或候選碼);最極端的情況,整個屬性組U是碼,稱為全碼。(主碼and候選碼都簡稱碼)

11.關系模式R中的屬性或屬性組X不是R的碼,但X是另一個關系模式的碼,則稱X為R的外部碼(外碼)


12.第一范式(1NF):每一個分量必須是不可分的數據項(關系中每個屬性都是不可再分的簡單項)。

13.第二范式(2NF):若R滿足第一范式,且每一個非主屬性完全函數依賴於任何一個候選碼。

  推論:候選碼為單屬性或者全碼,則屬於2NF。

  特點:不存在非主屬性對候選碼的部分函數依賴

  1NF→2NF:消除非主屬性對候選碼的部分函數依賴,把部分函數依賴投影出來單獨成表。(一事一表)

14.第三范式(3NF):若R滿足第二范式,且它的每一個非主屬性都不傳遞依賴於任何候選碼。

  定義:關系模式R<U,F>屬於第一范式,若R中不存在這樣的碼X,屬性組Y及非主屬性Z(Y不包含於Z)是的X→Y,Y→Z成立,Y/→X,則稱R屬於3NF。

  定義理解:3NF的定義由1NF推過來的,不太好理解,判定的話用上上行2NF推導過來的就可以了,這個定義同時也可以證明,若R屬於3NF,則R必屬於2NF。

  特點:每一個非主屬性對候選碼沒有部分函數依賴,也沒有傳遞函數依賴。

  缺點:3NF只限制了非主屬性對鍵的依賴關系,而沒有限制主屬性對鍵的依賴。

  2NF→3NF:消除非主屬性對鍵的傳遞函數依賴,把傳遞依賴投影出來單獨成表。(一事一表)

15.BCNF:關系模式R<U,F>中,每一個決定因素都包含R的一個碼(候選鍵),則R屬於BCNF。

  定義:關系模式R<U,F>屬於第一范式,若X→Y(Y不包含於X)時X必含有碼,則R屬於BCNF。

  特點:排除任何屬性對候選碼的傳遞函數依賴和部分函數依賴。在函數依賴范疇內實現徹底分離,消除插入和刪除異常。

  3NF→BCNF:消除原關系中主屬性對鍵的部分函數依賴和傳遞函數依賴。

  推論:如果R屬於BCNF,則

  • R中所有非主屬性對每一個碼都是完全函數依賴;
  • R中所有主屬性對每一個不包含它的碼,都是完全函數依賴;
  • R中沒有任何屬性完全函數依賴於非碼的任何一組屬性。
  定理:如果R屬於BCNF,則R屬於3NF一定成立。反之不一定成立,因為3NF的不徹底性(可能存在主屬性對碼的部分依賴和傳遞依賴)。
  例:(S,J)→T,(S,T)→J,T→J。候選碼為(S,J)、(S,T),T是決定因素,但T不包含碼。
16. 第四范式4NF:限制關系模式的屬性之間不允許有非平凡且非函數依賴的多值依賴。(不要求)
17.一個低一級范式的關系模式可以通過 模式分解轉換為若干個高一級范式的關系模式集合,這個過程叫做 規范化
  總結:在實際應用中,最有價值的是3NF和BCNF,在進行關系模式的設計時,通常分解到3NF就可以了。

 

作者: AlvinZH

出處: http://www.cnblogs.com/AlvinZH/

本人Github:https://github.com/Pacsiy/JobDu

本文版權歸作者AlvinZH和博客園所有,歡迎轉載和商用,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM