雖然寫這個部落客要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我并不是什麼大觸,隻是一個菜菜的學生,如果您發現了什麼錯誤或者您對于某些地方有更好的意見,非常歡迎您的斧正!
目錄
6.1問題的提出
①回顧關系模型
②資料依賴
6.2規範化
6.2.1函數依賴
6.2.2碼
6.2.3範式
6.2.4 2NF
6.2.5 3NF(不存在傳遞函數依賴)
6.2.6 BCNF
以下是自己對三範式以及BCNF的了解(如果為了了解,建議直接看這裡)
6.2.9規劃範小結
6.3資料依賴的公理系統
Armstrong公理系統
導出規則
引理6.1
引理6.2
√求閉包的算法
極小化過程
6.4模式的分解
6.1問題的提出
▶針對具體問題,如何構造一個适合于它的資料模式
1) 應該構造幾個關系模式;
2) 每一個關系應該由哪一些屬性組成。
▶資料庫邏輯設計的工具──關系資料庫的規範化理論
①回顧關系模型
關系 關系模式 關系資料庫 關系資料庫的模式
▶關系模式由五部分組成,即它是一個五元組:R(U, D, DOM, F)
R: 關系名(符号化的元組語義)
U: 組成該關系的屬性名集合
D: 屬性組U中屬性所來自的域(不重要)
DOM: 屬性向域的映象集合(不重要)
F: 屬性間資料的依賴關系集合
▶關系模式R(U, D, DOM, F) 可以簡化為一個三元組:R(U,F)
當且僅當U上的一個關系r滿足F時,r稱為關系模式R(U,F)的一個關系。
②資料依賴
6.2規範化
6.2.1函數依賴
①符号說明:
R:一個關系模式
U={A1,A2,...,An}:R的所有屬性的集合;
F:R中函數依賴的集合
R:R所取的值
t[X]:元組t在屬性X上的取值。例如t[Dname]=’HuangKai’
②函數依賴的定義
(如果不想看底下這段長文字的,可以直接看圖)
設有一個關系模式R(U),X,Y為其屬性U的子集,即X
U,Y
U,設t,s是關系R中的任意兩個元組,如果t[X]=s[X],則t[Y]=s[Y],那麼稱Y函數依賴于X,或X函數決定Y,也可稱F:X→Y在關系模式R(U)上成立。
例子:X是出生年月,Y是年齡,顯然知道了X就可以知道Y。
平凡的函數依賴必然成立,它不反應任何語義,若不特别聲明,總是讨論非平凡的函數依賴。
③完全函數依賴與部分函數依賴
④傳遞函數依賴
例6.1:建立一個描述學校教務的資料庫:
學号(Sno)、所在系(Sdept)、系主任姓名(Mname)
課程号(Cno)、成績(Grade)
單一的關系模式 Student <U、F>
U ={ Sno, Sdept, Mname, Cno, Grade }
資料之間的關系有(語義):
1) 一個系有若幹個學生,一個學生隻屬于一個系;
2) 一個系隻有一名系主任;
3) 一個學生可以選修多門課程;
4) 每個學生選修的每門課程有一個成績。
6.2.2碼
√碼在之前已經提到過了,書本P39對“碼”的定義為:能唯一辨別一個元組的屬性組。(比如一個學生基本情況表,隻要學号和姓名都确定了,那麼其它屬性也就确定了,在這種情況下,學号與姓名組成的屬性組就稱為碼)
①用函數依賴定義碼
√設K為R<U,F>中的屬性或屬性組合,若
(U對K完全依賴),則K稱為R的候選碼(Candidate Key)。
√若候選碼多于一個,則標明其中一個作為主碼。
②主屬性與非主屬性(全碼、外碼)
√主屬性(Prime attribute):包含在任何一個候選碼中的屬性(K屬性組中的任何一個屬性)
√非主屬性(Nonprime attribute)或非碼屬性(Non-key attribute):不包含在任何候選碼中的屬性(不屬于K屬性組中的任何一個屬性)
√全碼(All-key):整個屬性組是碼。(沒有哪個屬性或屬性組可以單獨決定另外的所有屬性)
√外碼(foreign key):在SC(Sno,Cno,Grade)中,Sno不是碼,但在關系模式S(Sno,Sdept,Sage)中是碼,則Sno是關系模式SC的外碼。
6.2.3範式
√範式:符合某一種級别的關系模式的集合。
√關系資料庫中的關系是要滿足一定要求的,滿足不同程度要求的為不同範式。(個人了解:說到底,範式就是一種标準級别)
√各種範式之間存在聯系
√某一關系模式R為第n範式,可簡記為R∈nNF。
√一個低一級範式的關系模式,通過模式分解可以轉換為若幹個高一級範式的關系模式的集合,這種過程就叫規範化 。
√1NF:如果一個關系模式 R 的所有屬性都是不可分的基本資料項,則 R∈1NF .
6.2.4 2NF
√背景:U={學号,課程号,學院,院長,成績}
√語義:1)每個學院有若幹學生,每個學生隻屬于一個學院;
- 每個學院隻有一名院長;
- 每個學生可以選若幹門課,每門課可供若幹學生選;
- 每個學生選的每一門課有一個成績。
如果我們這樣設計:(也就是滿足1)
學号 | 課程号 | 學院 | 院長 | 成績 |
隻要我們随便寫點資料進去:
就會存在問題:1、備援嚴重 2、更新複雜
3.插入異常:如某個系剛成立沒有學生,則系主任的資訊無法存入到資料庫
4.删除異常:如學生畢業了,要删除學生的資訊,則系主任的資訊也被删除了
直覺上的不合理性:兩種不同類的資訊混入在一個表中
理論上的不合理:存在不合适的函數依賴關系
這個時候我們就要拆分原關系模式,消除存在的部分函數依賴
√2NF定義: 如果一個關系模式滿足第一範式,并且每一個非主屬性都完全函數依賴于碼
√這個時候我們發現U2表中還是存在一些問題,就需要我們的3NF
6.2.5 3NF(不存在傳遞函數依賴)
√對上面的U2表再次分解,這樣看起來就非常OK了。
√3NF定義:關系模式滿足第一範式,并且每一個非主屬 性既不部分函數依賴于碼,也不傳遞函數依賴于碼.
√對上面的分解,其實還有另一種分解法,那麼這兩種分解法有什麼差別呢?
√這種過程,我們成為:規範化。
√規範化的原則:分解前後的等價
√規範化理論是資料庫邏輯設計的工具
√目的:盡量消除插入、删除異常,修改複雜,資料備援
6.2.6 BCNF
BCNF的三個條件:若R∈BCNF
①所有非主屬性對每一個碼都是完全依賴函數。
②所有的主屬性對每一個不包含它的碼,也是完全依賴函數。
③沒有任何屬性完全函數依賴于非碼屬性的任何一組屬性。
以下是自己對三範式以及BCNF的了解(如果為了了解,建議直接看這裡)
①1NF:講究的是不能再分
②2NF:講究的是每個非主屬性(學院、院長、成績)都得在每個主屬性(學号、課程号)都确定之後才能确定。
比如 學号+課程号→成績,而對于學院與院長,存在 學号→學院,學号→院長,不符合。
③3NF:不能有傳遞函數依賴。
比如下圖,就存在着傳遞函數依賴,是以要繼續分為表U3={學号,學院},U4={學院,院長}
④BCNF:我們解讀它的三個條件。
1.所有非主屬性對每一個碼都是完全依賴函數。
2.所有的主屬性對每一個不包含它的碼,也是完全依賴函數。
3比較簡單就不介紹了。
以上是個人了解,接下來就是關于BCNF的例題部分了。
例6.5:關系模式 C(Cno,Cname,Pcno) | |
∵它隻有一個碼Cno ∴不存在部分依賴或傳遞依賴 ∴C∈3NF 又∵Cno是唯一的決定因素 ∴C∈BCNF | |
例6.7:關系模式SJP(S,J,P),S學生,J課程,P名次。學生選修課程有一定名次,不存在并列的排名 | |
∵(S,J)→P,(J,P)→S ∴(S,J)與(J,P)都是候選碼 ∵顯然部分依賴與傳遞依賴 ∴SJP∈3NF 又∵除了(S,J)與(J,P)沒有其他決定因素 ∴SJP∈BCNF | |
例6.8:在關系模式 STC(S,T,C)中,S表示學生,T表示教師,C表示課程。每個教師隻教一門課,每門課有若幹個老師,某學生標明某門課就對應一個固定的老師。 | |
∵(S,J)→T,(S,T)→J,T→J ∴(S,J)與(S,T)是候選碼 ∵不存在傳遞依賴 是以STC∈3NF 又∵T是決定因素,但T不包含碼 ∴STC∉BCNF |
6.2.9規劃範小結
①關系資料庫的規範化理論是資料庫邏輯設計的工具
②目的:盡量消除插入、删除異常,修改複雜,資料備援
③基本思想:逐漸消除資料依賴中不合适的部分
④實質:概念的單一化
6.3資料依賴的公理系統
個人了解:就好像F是一個函數映射集。X→Y是其中一個映射。
Armstrong公理系統
自反律證明 設t、s是R<U,F>的任一關系的任意兩個元組 ∵t[X]=s[X] 又∵Y∈X ∴t[Y]=s[Y] |
增廣律證明 設t、s是R<U,F>的任一關系的任意兩個元組 ∵t[XZ]=s[XZ],則t[X]=s[X],t[Z]=s[Z] 又∵X→Y ∴t[Y]=s[Y] ∴t[YZ]=s[YZ] |
傳遞律證明 設t、s是R<U,F>的任一關系的兩個元組 ∵t[X]=s[X] 又X→Y ∴t[Y]=s[Y] 又Y→Z ∴t[Z]=s[Z] |
導出規則
引理6.1
個人了解:閉包就是一個函數依賴的大集合。(有許多寫不完函數依賴)
引理6.2
個人了解:如果X→Y能夠根據Armstrong公理推出來,那麼X→Y這個依賴在
裡。
√求閉包的算法
定義6.14:如果
,就說函數依賴集F覆寫G(F是G的覆寫,或G是F的覆寫),或F與G等價。
√證明:
的充分必要條件是
定義6.15:如果函數依賴集F滿足下列條件,則稱F為一個極小函數依賴集,亦稱為最小依賴集或最小覆寫。
①F中任一函數依賴的右部僅含有一個屬性。(個人了解:如果有X→AB,則要拆為X→A,X→B)
②F中不存在這樣的函數依賴X→A,使得F與F-{X→A}等價。(個人了解:比如X為B,則B→A,但是F中同時又有B→C,C→A,此時B→A就顯得多餘了,有種傳遞函數依賴的感覺)
③F中不存在這樣的函數依賴X→A,X有真子集Z使得F-{X→A}∪{Z→A}與F等價。(個人了解:比如X為BC,則BC→A,但是F中同時又有B→A,C→A,則BC→A就多餘了,有種部分函數依賴的感覺)
定理6.3:每一個函數依賴集F均等價于一個極小函數依賴集
。此
稱為F的最小依賴集。(證明:找出F的最小依賴集)
極小化過程
6.4模式的分解
(雖然這一章打了*号,不過老師還是抽了點重點講了一下)
√分解的等價定義
①無損連接配接性——分解後能否恢複→分解後的資料表可以通過自然連接配接恢複
②保持函數依賴——分解前後的語義是否一緻
③既保持函數依賴又具有無損連接配接性
√保持函數依賴的分解
√關于模式分解的幾個重要事實:
1)若分解要求保持函數依賴,總可以達到3NF,不一定能到BNCF;
2)若分解既保持函數依賴,又具有無損連接配接,可以到3NF,不一定到BNCF;
3)若分解隻要求具有無損連接配接,一定可以達到4NF.
√模式分解總結與思考
①分解無損連接配接性能夠保證不丢失資訊
②分解保持函數依賴可以減輕或解決各種異常情況
③分解具有無損連接配接性和分解保持函數依賴是兩個互相獨立的标準;
④分解必須是連接配接無損的,最好是依賴保持。