數據依賴,通過對一個關系中屬性間值的相等與否體現出來的數據間的相互關系;是現實世界屬性間相互聯系的抽象;是數據內在的性質;是語義的體現。
數據依賴的類型:函數依賴(FD),多值依賴(MVD)。
關系模式中存在的問題:數據冗余太大;更新異常;插入異常;刪除異常。原因:由存在于模式中的某些數據依賴引起的。解決方法:通過分解關系模式來消除其中不合適的數據依賴。
規范化理論是用來改造關系模式,通過分解關系模式來消除其中不合適的數據依賴。
函數依賴,設R(U)是一個屬性集U上的關系模式,X和Y是U的子集。若對于R(U)的任意一個可能的關系r,r中不可能存在兩個元組在X上的屬性值相等, 而在Y上的屬性值不等,則稱 “X函數確定Y” 或 “Y函數依賴于X”,記作X→Y。X稱為這個函數依賴的決定屬性集(Determinant)。Y=f(X)。
函數依賴不是指關系模式R的某個或某些關系實例滿足的約束條件,而是指R的所有關系實例均要滿足的約束條件。函數依賴是語義范疇的概念,只能根據數據的語義來確定函數依賴。
在關系模式R(U)中,對于U的子集X和Y,如果X→Y,但Y 不屬于 X,則稱X→Y是非平凡的函數依賴。若X→Y,但Y 屬于 X, 則稱X→Y是平凡的函數依賴。
在關系模式R(U)中,如果X→Y,并且對于X的任何一個真子集X’,都有X’ 不決定 Y, 則稱Y完全函數依賴于X,記作X F→ Y。若X→Y,但Y不完全函數依賴于X,則稱Y部分函數依賴于X,記作X P→ Y。
在關系模式R(U)中,如果X→Y,Y→Z,且Y 不屬于 X,Y!→X,則稱Z傳遞函數依賴于X。注: 如果Y→X, 即X←→Y,則Z直接依賴于X。
設K為關系模式R<U,F>中的屬性或屬性組合。若K F→ U,則K稱為R的一個侯選碼(Candidate Key)。若關系模式R有多個候選碼,則選定其中的一個做為主碼(Primary key)。
關系模式 R 中屬性或屬性組X 并非R 的碼,但 X 是另一個關系模式的碼,則稱 X 是R 的外部碼(Foreign key)也稱外碼。
范式是符合某一種級別的關系模式的集合;關系數據庫中的關系必須滿足一定的要求,滿足不同程度要求的為不同范式。
某一關系模式R為第n范式,可簡記為R∈nNF。
如果一個關系模式R的所有屬性都是不可分的基本數據項,則R∈1NF。第一范式是對關系模式的最起碼的要求,不滿足第一范式的數據庫模式不能稱為關系數據庫;但是滿足第一范式的關系模式不一定是一個好的關系模式。
若關系模式R∈1NF,并且每一個非主屬性都完全函數依賴于R的碼,則R∈2NF。采用投影分解法將一個1NF的關系分解為多個2NF的關系,可以在一定程度上減輕原關系中存在的插入異常、刪除異常、數據冗余度大、修改復雜等問題,但并不能完全消除各種異常和數據冗余。
關系模式R<U,F>中若不存在這樣的碼X、屬性組Y及非主屬性Z(Z 不屬于 Y), 使得X→Y,Y !→ X,Y→Z,成立,則稱R ∈ 3NF。若R∈3NF,則R的每一個非主屬性既不部分函數依賴于候選碼,也不傳遞函數依賴于候選碼。采用投影分解法將一個2NF的關系分解成多個3NF的關系,可以在一定程度上解決原關系中存在的問題,但不能完全消除。
設關系模式R<U,F>∈1NF,如果對于R的每個函數依賴X→Y,若Y不屬于X,則X必含有候選碼,那么R∈BCNF。每一個決定屬性集都包含候選碼;R中的所有屬性都完全函數依賴于碼。沒有任何屬性對碼的部分函數依賴和傳遞函數依賴。如果R∈3NF,且R只有一個候選碼,則R必屬于BCNF。所有非主屬性完全函數依賴于每個候選碼;所有主屬性完全函數依賴于每個不包含它的候選碼;沒有任何屬性完全函數依賴于非碼的任何一組屬性。
關系數據庫的規范化理論是數據庫邏輯設計的工具;一個關系只要其分量都是不可分的數據項,它就是規范化的關系,但只是最基本的規范化;規范化可以有多個不同級別。一個低一級范式的關系模式,通過模式分解可以轉換為若干個高一級范式的關系模式集合,這種過程就叫關系模式的規范化。
關系模式規范化的基本步驟。1NF→2NF,消除非主屬性對碼的部分函數依賴;2NF→3NF,消除非主屬性對碼的傳遞函數依賴;3NF→BCNF,消除主屬性對碼的部分依賴和傳遞依賴;BCNF→4NF,消除非平凡且非函數依賴的多值依賴。整體思想:消除決定屬性集非碼的非平凡函數依賴。
規范化的基本思想:消除不合適的數據依賴;各關系模式達到某種程度上的“分離”;采用“一事一地”的模式設計原則;所謂規范化實質上是概念的單一化。
對于滿足一組函數依賴 F 的關系模式R<U,F>,其任何一個關系r,若函數依賴X→Y都成立, 則稱F邏輯蘊含X →Y。
一套推理規則,是模式分解算法的理論基礎。用途:求出給定關系模式的碼;從一組函數依賴求得蘊含的函數依賴。
Armstrong公理系統。關系模式R<U,F>來說有以下的推理規則: Al.自反律(Reflexivity):若Y 屬于?X 屬于 U,則X →Y為F所蘊含。 A2.增廣律(Augmentation):若X→Y為F所蘊含,且Z 屬于 U,則XZ→YZ為F所蘊含。A3.傳遞律(Transitivity):若X→Y及Y→Z為F所蘊含,則X→Z為F所蘊含。
導出規則。合并規則:由X→Y,X→Z,有X→YZ。(A2, A3)偽傳遞規則:由X→Y,WY→Z,有XW→Z。(A2, A3)分解規則:由X→Y及 Z屬于Y,有X→Z。(A1,A3)
根據合并規則和分解規則,X→A1 A2…Ak成立的充分必要條件是X→Ai成立(i=l,2,…,k)。
在關系模式R<U,F>中為F所邏輯蘊含的函數依賴的全體叫作 F的閉包,記為F+。
設F為屬性集U上的一組函數依賴,X屬于U, XF+ ={ A|X→A能由F 根據Armstrong公理導出},XF+稱為屬性集X關于函數依賴集F 的閉包。
設F為屬性集U上的一組函數依賴,X,Y 屬于 U,X→Y能由F 根據Armstrong公理導出的充分必要條件是Y 屬于 XF+。
如果G+=F+,就說函數依賴集F覆蓋G(F是G的覆蓋,或G是F的覆蓋),或F與G等價。F+ = G+ 的充分必要條件是F 屬于 G+,和G 屬于 F+。
如果函數依賴集F滿足下列條件,則稱F為一個極小函數依賴集。亦稱為最小依賴集或最小覆蓋。F中任一函數依賴的右部僅含有一個屬性;F中不存在這樣的函數依賴X→A,使得F與F-{X→A}等價;F中不存在這樣的函數依賴X→A,X有真子集Z使得F-{X→A}?∪ {Z→A}與F等價。
每一個函數依賴集F均等價于一個極小函數依賴集Fm。此Fm稱為F的最小依賴集。
三種模式分解的等價定義:分解具有無損連接性;分解要保持函數依賴;分解既要保持函數依賴,又要具有無損連接性。
關系模式R<U,F>的一個分解:ρ={ R1<U1,F1>,R2<U2,F2>,…,Rn<Un,Fn>},U=U1∪U2∪…∪Un,且不存在 Ui 屬于 Uj,Fi 為 F在 Ui 上的投影。
函數依賴集合{X→Y | X→Y 屬于 F+∧XY 屬于 Ui}的一個覆蓋 Fi 叫作 F 在屬性 Ui 上的投影。
關系模式R的一個分解 ρ={ R1,R2, …,Rn}。若R與R1、R2、…、Rn自然連接的結果相等,則稱關系模式R的這個分解ρ具有無損連接性(Lossless join)。具有無損連接性的分解保證不丟失信息;無損連接性不一定能解決插入異常、刪除異常、修改復雜、數據冗余等問題。
設關系模式R被分解為若干個關系模式R1,R2,…,Rn(其中U=U1∪U2∪…∪Un,且不存在Ui 屬于 Uj,Fi為F在Ui上的投影),若F所邏輯蘊含的函數依賴一定也由分解得到的某個關系模式中的函數依賴Fi所邏輯蘊含,則稱關系模式R的這個分解是保持函數依賴的(Preserve dependency)。
如果一個分解具有無損連接性,則它能夠保證不丟失信息;如果一個分解保持了函數依賴,則它可以減輕或解決各種異常情況;分解具有無損連接性和分解保持函數依賴是兩個互相獨立的標準。具有無損連接性的分解不一定能夠保持函數依賴。同樣,保持函數依賴的分解也不一定具有無損連接性。
判別一個分解的無損連接性。建立一個n列k行的表。填入ai,或bij;對每個函數依賴做下列操作:找到Xi所對應的列中具有相同符號那些行,若其中有ai ,則全部改成ai ;否則全部行號最小的bij 。若某個bij被更改,那么該表中其它相同bij均做相同的更改;比較掃描后有無變化,無變化則終止。若表中有全a行,則分解具有無損連接性。