資料庫規范化理論
『壹』 理解什麼是資料庫規范化
規范化理論是將一個不合理的關系模式如何轉化為合理的關系模式理論,規范化理論是圍繞範式而建立的。規范化理論認為,一個關系型資料庫中所有的關系,都應滿足一定的規范。規范化理論把關系應滿足的規范要求分為幾級,滿足最低要求的一級叫做第一範式(1NF),在第一範式的基礎上提出了第二範式(2NF),在第二範式的基礎上又提出了第三範式(3NF),以後又提出了BCNF範式,4NF,5NF。範式的等級越高,應滿足的約束條件也越嚴格。規范的每一級別都依賴於它的前一級別,例如若一個關系模式滿足2NF,則一定滿足1NF。
對以上最簡單的理解就是:資料庫裡面的數據存在多種異常、冗餘或其他有矛盾的地方,而規范化就是消除其中不合適的數據依賴,以解決插入異常、刪除異常、更新異常和數據冗餘問題。為了消除這些問題於是就有了以上幾個範式。
『貳』 規范化主要理論依據是
規范化過程主要為克服資料庫邏輯結構中的插入異常、刪除異常以及冗餘度大的缺陷。資料庫規范化能夠讓資料庫設計者更好地了解組織內部當前的數據結構,最終得到一系列的數據實體。資料庫規范化通過對資料庫表的設計,可以有效降低資料庫冗餘程度。
資料庫規范化過程
關系資料庫的規范化說的通俗一些就是對表的規范化。
規范化的必要性:
根據項目的需求,我們會創建相應的資料庫表格來完成項目中的數據的存儲。這已經成為做項目的固定流程了,但是在真正的開始處理業務需求的時候,就會意識到自己的表格設置的不合理,導致數據的重復存儲,插入異常,刪除異常,更新異常等問題,這時就需要來重新的規劃表格,既浪費時間,又消耗人力財力,十分不劃算,因此規范化是十分有必要的,所以今天就在這里教給大家規范表的方法。
在教規范化資料庫方法之前,先給大家介紹知識:
關鍵知識點函數依賴
函數依賴的定義:
設R(U)是屬性集上的一個子集,X和Y是U的子集,若對於R(U)上的任意一個可能的關系r,如果r中不可能存在兩個元組,它們在X上的屬性值相等,而在Y上的屬性值不相等,則稱X函數決定於Y或Y函數依賴與X,記作X->Y。
定義可能有些難以理解,我在這里簡單的解釋一下:函數依賴描述的是兩個集合之間的一種映射關系,這種映射關系與函數是一樣的,例如 y = x^2,在這里對於x來說,一個x就對應一個y值,但是不存在,一個x對應多種y值的情況,所以就可以說y函數依賴於x,然而對於y來說,存在一個y值對應多個x值的情況,所以說x並不函數依賴於y。這就是函數依賴。
『叄』 在線.等..關系資料庫規范化理論
8.2 規范化理論
關系資料庫中關系規范化問題在1970年Godd提出關系模型時就同時被提出來,關系規范化可按屬性間不同的依賴程度分為第一範式,第二範式,第三範式,Boyce-Codd範式以及第四範式.人們對規范化的認識是有一個過程的,在1970年時已發現屬性間的函數依賴關系,從而定義了與函數依賴關系有關的第一,第二,第三,及Boyce-Codd範式.在1976~1978年間,Fagin,Delobe以及Zanjolo發現了多值依賴關系,從而定義了與多值依賴有關的第四範式.
範式的定義與屬性間的依賴關系的發現有密切關系,在本節中我們介紹函數依賴與多值依賴這兩個概念,並在此基礎上定義第一範式,第二範式,第三範式,Boyce-Codd範式以及第四範式.
8.2.1 函數依賴
函數依賴(functional dependency)是關系模式內屬性間最常見的一種依賴關系,例如在關系模式S中,S#與Sd間有一種依賴關系.即S#的值一經確定後Sd的值也隨之唯一地確定了,此時即稱S#函數決定Sd或稱Sd函數依賴於S#,它可用下面符號表示:
S# → Sd
同樣,我們還可以有:
S# → Sa
S# → Sn
但是關系模式SC中的S#與G間則沒有函數依賴關系,因為一個確定的學號S#可以允許有多個成績(它們分別對應於不同的課程),因此成績G並不能唯一地確定,但是(S#,C#)與G間則存在著函數依賴關系,即有:
(S#,C#)→G
函數依賴這個概念是屬語義范疇的,我們只能根據語義確定屬性間是否存在這種依賴,此外別無它法可循.
定義8-1 設有關系模式R ( U ),X,Y是U的子集,若對於任一個關系R中的任一元組在X中的屬性值確定後則在Y中的屬性值必確定,則稱Y函數依賴於X或稱X函數決定Y, 並記作X→Y,而其中X稱為決定因素,Y稱為依賴因素.對於函數依賴,我們一般總是使用一種叫非平凡的函數依賴,在本章中如無特殊聲明,凡提到函數依賴時總認為指的是非平凡的函數依賴.下面我們對非平凡函數依賴下一個定義.
定義8-2 一個函數依賴關系X→Y如滿足Y(X,則稱此函數依賴是非平凡的函數依賴.
為了對函數依賴作深人研究,也為了規范化的需要,我們還得引入幾種不同類型的函數依賴.
首先;引入一種完全函數依賴的概念,這個概念為真正的函數依賴打下基礎.例如在S申我們有S#→Sd,因而我們同樣也會有:
(S#,Sn) →Sd
(S#,Sa) →Sd
比較這三種函數依賴後我們會發現,實際上真正起作用的函數依賴是:
S#→Sd
而其他兩種函數依賴都是由它派生而成的,即是說在函數依賴中真正起作用的是S#,而不是Sn或Sa等.這樣,我們在研究函數依賴時要區別這兩種不同類型的函數依賴,前一種叫完全函數依賴,而後一種叫不完全函數依賴.
定義8-3 R( U )中如有X,Y(U,滿足X→Y且對任何X的真子集X',都有X'→Y',則稱Y完全函數依賴於X並記作:
X Y
定義8-4 在R( U )中如有X,Y(U且滿足X→Y,但Y不完全函數依賴於X,則稱Y部分依賴於X,並記作:
X Y
由上所述可知,Sd完全函數依賴於S#,但Sd不完全函數依賴於(S#,Sn),亦即有:
S# Sd
(S#,Sn) Sd
(S#,Sa) Sd
在函數依賴中還要區別直接函數依賴與間接函數依賴這兩個不同的概念,例如S#→Sd中Sd是直接函數依賴於S#,但如果在屬性中尚有系的電話號碼DT(假如每個系有唯一的一個電話號碼),則有:Sd→DT,從而由S#→Sd及Sd→DT可得到:
S# →DT
在這個函數依賴中,DT並不直接函數依賴於S#,而是經過中間屬性Sd傳遞而依賴於S#,亦即是DT直接依賴於Sd,而Sd又直接依賴於S#,從而構成了DT依賴於S#.這種函數依賴關系,是一種間接依賴關系,或叫傳遞依賴關系.我們可以對它定義如下.
定義8-5在R( U )中如有X,Y,Z(U且滿足:
X→Y,(Y(X ) Y / X,Y→Z
則稱Z傳遞函數依賴於X,否則,稱為非傳遞函數依賴.
注意,在這里傳遞函數依賴與非傳遞函數依賴僅作概念上區別, 在形式表示上不作任何區別,即Z傳遞函數依賴於X或Z非傳遞函數依賴於X都用X→Z表示,這樣做的目的也是為了從全局考慮使得表示盡量簡單與方便.
定義了幾種不同的函數依賴關系後,我們在此基礎上繼續定義一些十分重要的基本概念.即有關關鍵字(keY)的一些概念.
定義8-6 在R(U )中如有K(U且滿足:
K U
則稱K為R的關鍵字.
一個關系模式可以有若干個關鍵字,我們在使用中選取其中的一個就夠了,這個被選中的關鍵字叫做這個關系模式的主關鍵字(Prime key),而一般的關鍵字叫候選關鍵字(candidate key).
在關系模式S,C,SC中,S的關鍵字是S#,C的關鍵字是C#,而SC的關鍵字是(S#,C#),因為我們有:
S# (S#,Sn,Sd,Sa)
C# (C#,CN,P#)
(S#,C#) (S#,C#,G)
而S中,(S#,Sn),(S#,Sd)等均不是關鍵字,因為我們有:
(S#,Sn) (S#,Sn,Sd,Sa)
(S#,Sd) (S#,Sn,Sd,Sa)
在一個關系模式中,所有關鍵字中的屬性構成一個集合,而所有其餘的屬性則構成另一個集合,這兩個集合分別叫做這個關系模式的主屬性集與非主屬性集.主屬性集中的屬性叫做主屬性(prime attribute),非主屬性集中的屬性則叫非主屬性(nonprime attribute).例如在關系模式S (S#,Sn,Sd,Sa)中, 主屬性集為:
(S#) .
而非主屬性集為:
(Sn,Sd,Sa)
在SC(S#,C#,G)中,主屬性集為:
{ S#, C# }
而非主屬性為:
{G}
下面我們給出它們的定義:
定義8-7 R ( U )中所有關鍵字中的屬性構成的集合P稱為R(U )的主屬性集.
定義8-8 在R ( U )中所有非關鍵字中的屬性構成的集合N稱為R(U)的非主屬性集.以上建立了一系列與函數依賴有關的概念,有了它們後就可以討論與函數依賴有關的幾
個範式,它們是第一範式,第二範式及第三範式(實際上第一範式與所有依賴均無關,但為敘述方便起見,可視為與函數依賴有關).至於函數依賴的有關理論的探討,將在本章稍後部分再作詳細介紹.
8.2.2 與函數依賴有關的範式
在這節中我們討論四種範式,他們是第一範式,第二範式,第三範式以及Boyce-Codd範式.
先介紹第一範式.第一範式是關系模式所要遵循的基本條件,即關系中的每個屬性值均必須是一個不可分割的數據量.如一個關系模式滿足此條件則稱它屬於第一範式(first normal form,或簡寫成lNF),一個關系模式R如滿足第一範式,則可記為R∈lNF.
第一範式規定了一個關系中的屬性值必須是一個不可分割的數據,它排斥了屬性值為元組,數組或某種復合數據等的可能性,使關系資料庫中的所有關系的屬性值均是最簡單的,這樣可以做到結構簡單,討論方便.一般說來,每個關系模式均要滿足第一範式,因為這是對每個關系的最基本要求.
下面開始討論真正與函數依賴有關的三個範式.為了討論這幾個範式,我們一般對一個關系模式除了要確定其屬性外,還要根據它的語義確定在這個模式上的所有函數依賴.設有關系模式R,它有屬性集U,而在它上的函數依賴集是F,則此時一個關系模式可由三元組R,U,F確定,它可以寫成為:
R ( U,F )
注意,這個表示式僅表示一個三元組而已,它並不表示謂詞或關系.例如前面所提到的學生關系模式S,它可表示為:
S ({S#,Sn,Sd,Sa},{S#→Sn,S#→Sd,S#→Sa})
又如有一個關系模式叫SCG',它由屬性S#,Sn,Sd,Sa, C#, G 組成,其中Ss表示學生所學專業,其他含義同前.在這個關系模式中有一些語義信息,它們是:
(1 ) 每個學生均只屬一個系與一個專業;
(2 ) 每個學生修讀之每門課有且僅有一個成績;
(3 ) 各系無相同專業.
根據上述語義信息以及其他的一些基本常識,我們可以將它們用函數依賴形式表示出來,它們是:
S#→Sn
S#→Sd
S#→Ss
Ss→Sd
(S#,C#)→G
因此,這個關系模式的有關信息可寫成為:
SCG'({S#,Sn,Sd,Ss,C#,G},{ S#→Sn,S#→Sd,S#→Ss, Ss S#→Sd, (S#,C# ) →G}
關系模式有了函數依賴後就可以討論規范化的問題了.關系中的每一級範式均提出了關系模式所要遵循的約束條件,目的是為了使得關系模式具有較少異常性與較小的冗餘度,即是說使關系模式更"好"一些.
下面討論第二範式.
定義8-9 設有R(U)∈lNF且其每個非主屬性完全函數賴於關鍵字,則稱R(U)滿足第二範式(可簡寫為2NF)或寫為R∈2NF.
實際上並不是每個滿足第一範式的關系模式必滿足第二式,如前面例子中的關系模式SCG'即不滿足第二範式.這是因在SCG'中,它的關鍵字是(S#,C#),而它的非主屬性集是:
(Sd,G,Sn,Ss)
雖然我們有:
(S#,C#) G
但是Sn,Sd,Ss均並不完全依賴(S#,C#),因此不滿足第二範式的條件.
一個關系模式若滿足第二範式,則它必須具有較少異常與較小冗餘度.因此,一個關系模式若僅滿足第一範式還不夠,它必須滿足第二範式,其方法是將一個關系模式分解成幾個關系模式,使分解後的關系模式能滿足第二範式.如關系模式SCG'可分解成兩個關系模式,它們是:
SCG'l ({S#,C#,G},{( S#,C#)→G})
SCG'2 ({S#,Sn,Sd,Ss},{S#→Sn,S#→Sd,S#→Ss→Sd})
這兩個模式SCG'均可用圖8-1所示的示意圖表示之.
模式SCG'I與SCG'2均滿足第二範式,它們均有較少異常與較小冗餘度,而SCG'l還可以做到無插人與刪除異常的出現,而SCG'由於不滿足第二範式,因此插入異常,刪除異常均有存在,且數據冗餘度也很大.關於這方面的驗證請讀者自己去做.
(a) SCG'示意圖 (b)SCG'1及SCG'2示意圖
圖8-1 三個關系模式函數依賴示意圖
但是,第二範式還不能完全避免異常現象的出現,如SCG'2雖滿足第二範式,但仍會出現插入異常與刪除異常.如在SCG'2中,它有如表8-4所示的模式.
表8-4 SCG'2的關系模式
S#
Sn
Sd
Ss
SCG'2:
在這個模式中,如果我們要登記一個尚未招生的系的專業設置情況,要插入這個情況在模式中是較為困難的.這樣,如果要刪除一些學生,有可能會將有關系的專業設置情況一起刪除.究其原因,不外是因為Sd既函數依賴於S#又函數依賴於Ss,同時Ss又函數依賴於S#,並且由此引起了傳遞函數依賴的出現.因此,看來要消除異常現象,必須使關系模式中無傳遞函數依賴現象出現,這樣就產生了第三範式.
第三範式要求關系模式首先得滿足第二範式,同時每個非主屬性都非傳遞依賴於關鍵字.由此可以看出,如滿足第三範式則每個非主屬性既不部分依賴也不傳遞依賴於關鍵字.
定義8-10 若關系模式R(U)的每個非主屬性都不部分依賴也不傳遞依賴於關鍵字,則稱R滿足第三範式(可簡寫為3NF),並記作R∈3NF.
第三範式將關系模式中的屬性分成為兩類,一類是非主屬性集,另一類是主屬性集,而非主屬性集的每個屬性均完全,不傳遞依賴於主屬性集中的關鍵字,從而做到在關系模式中理順了復雜的依賴關系,使依賴單一化與標准化,進而力求達到避免異常性的出現,其示意圖可見圖8-2,在圖中可將關系模式比擬成一個原子,其中主屬性集是這個原子的原子核,而非主屬性集中的屬性則是這個原子中的電子,它們緊緊依賴於主屬性集構成一個緊密整體.
一個關系模式如果不滿足第三範式,可以通過模式分解使分解成若干個模式,使分解後的模式能滿足第三範式.例如關系模式SCG'中,SCG'2滿足第二範式,但不滿足第三範式,此時可將其分解成下面兩個模式:
SCG'21(S#,Sn,Ss)
SCG'22 (Ss,Sd)
圖8-2 第三範式的"原子"模型
其依賴示意圖見圖8-3.
(a)SCC'l (b)SCG'21 (c)SCG'22
圖8-3模解分解圖
在SCG'中經過幾次分解後,得到三個關系模式:
SCG'l,SCG'21,SCG'22
這三個模式均滿足第三範式且沒有異常現象出現,同時冗餘度小.
1972年Boyce,Codd等從另一個角度研究了範式,發現了函數依賴中的決定因素與關鍵字間的聯系與範式有關,從而創立了另一種第三範式,稱為Boyce-Codd範式.
Boyce-Codd範式的大概意思是:如果關系模式中,每個決定因素都是關鍵字,則滿足Boyce-Codd範式.我們知道,一般而言,每個函數依賴中的決定因素不一定都是關鍵字,因此,只有當R中決定因素都是關鍵字時才能認為滿足Boyce-Codd範式.
定義8-1l 如R(U )中X,Y(U,假定滿足R∈lNF,且若X→Y(Y(X)時X必含關鍵字,則稱R滿足Boyce-Codd範式(可簡記BCNF)並記以R∈BCNF.
下面一個問題我們需要研究BCNF與3NF間究竟有什麼關系 經過仔細研究後,我們認為BCNF比3NF更為嚴格.下面的定理給出了這個回答.
定理8-1關系模式R(U)若滿足BCNF,則必定滿足3NF.
這個定理的證明請讀者設法自行證得(注:可以用BCNF及3NF的定義而求得).
這個定理告訴我們:一關系模式滿足BCNF者必滿足3NF.但是,一關系模式滿足3NF是否滿足BCNF呢 即是說,定理8-1的充分條件是否成立呢 回答是否定的,即必存在一R(U)滿足3NF,但不滿足BCNF,這只要用一例即可說明.
例8-1設有關系模式R(S, C,T),其中S, C含義同前, T表示教師,R有下列語義信息: (1)每個教師僅上一門課;
(2)學生與課程確定後,教師即唯一確定.
這樣,R就有如下函數依賴關系:
(S, C ) →T
T→C
這個關系模式滿足3NF,因為它的主屬性集為(S,C )非主屬性集為 (T ),而T完全依賴於(S,C )且不存在傳遞依賴.但這個關系模式不滿足BCNF,因為T是決定因素,但T不是關鍵字.
這個模式的示意圖見圖8-4.
圖8一4 例8一1示意圖
從這個例子中也可以看出,實際上第三範式也避免不了異常性,如某課程本學期不開設,因此就無學生選讀,此時有關教師固定開設某課程的信息就無法表示.因此,要避免此種異常性,還需要進一步將關系模式分解成BCNF.如在此例中可將R進一步分解成:
R1 (S, T )
R2 (T, C )
其示意圖如圖8-5所示.而R1, R 2則為BCNF,這兩個模式均不會產生異常現象.
R1 R 2
圖8-5 R分解成兩個BCNF
從上面所述可以看出,BCNF比3NF更為嚴格,它將關系模式中的屬性分成兩類,一類是決定因素集,另一類是非決定因素集.非決定因素集中的屬性均完全,不傳遞地依賴於決定因素集中的每個決定因素.關於這種比喻的一個示意圖見圖8-6.
到此為止,由函數依賴所引起的異常現象,只要分解成BCNF即可獲得解決.在BCNF中每個關系模式內部的函數依賴均比較單一和有規則,它們緊密依賴而構成一個整體,從而可以避免異現象出現以及冗餘量過多的現象.
圖8-6 BCNF的原子模型
8.2.3 多值依賴與第四範式
我們研究了函數依賴及與它有關的幾個範式,但是否關系模式內屬性間的依賴關系除函數依賴外就沒有其他依賴關系呢 事實並不如此,函數依賴關系是一種較為明顯的依賴關系,但是隨著人們對關系模式了解越來越深刻後,發現尚有另外的一些依賴系存在,多值依賴就是其中的一種.我們先舉一個例子,以說明多值依賴的存在.
例8-2設有一個課程關系C,它可用表8-5表示.此表表示高等數學這門課的任課教師可以有3個,它的參考書可以有2本;普通物理這門課的任課教師也可以有3個,它的參考書可以有3本.如用關系的形式表示,見表8-6.
表8-5 關系C的示意圖
課程名C
教師名T
選用參考書L
高等數學
李華民
王天華
林 靜
高等數學
高等數學教程
普通物理
吳鐵鋼
謝曉芳
徐秋芳
物理學
普通物理
普通物理基礎
表8-6 C的關系
C
T
L
高等數學
李華民
高等數學
高等數學
李華民
高等數學教程
高等數學
王天華
高等數學
高等數學
王天華
高等數學教程
高等數學
林 靜
高等數學
高等數學
林 靜
高等數學教程
普通物理
吳鐵鋼
物理學
普通物理
吳鐵鋼
普通物理
普通物理
吳鐵鋼
普通物理基礎
普通物理
謝曉芳
物理學
普通物理
謝曉芳
普通物理
普通物理
謝曉芳
普通物理基礎
普通物理
徐秋芳
物理學
普通物理
徐秋芳
普通物理
普通物理
徐秋芳
普通物理基礎
從這個關系中可以看出兩點.
(1 ) 這個關系的數據冗餘很大.
(2 ) 這個關系的屬性間有一種有別於函數依賴的依賴關系存在.
我們仔細分析這種特殊依賴關系後發現它有兩個特點:
(1)設如R(U)中X與Y有這種依賴關系,則當X的值一經確定後可以有一組Y值與之對應.如確定C為高等數學,則有一組T的值:李華民,王天華,林靜與之對應.同樣C與L也有類似的依賴.
(2 ) 當X的值一經確定後,其所對應的一組Y值與U一X一Y無關.如在C中,對應高等數學課的一組教師與此課程的參考書毫無關系,這就表示C與T有這種依賴,則T的值的確定與U一C一T= L無關.
上述這種依賴顯然不是函數依賴,我們稱之為多值依賴(multi-valued dependency),如Y多值依賴於X,則可記為X→→Y.
從上面所描述的多值依賴X→→Y的特點看,其第一個特點表示X與Y的對應關系是很隨便的,X的一個值所對應的Y值的個數可不作任何強制性規定,即Y的值可以是從0到任意多個,其主要起強制性約束的是第二個條件,即X所對應的Y取值與U一X一Y無關,說得確切些,如有R(U)且如存在X→→Y,則對R(U)的任何一個關系R,如有元組s,t∈R,有s[X]=t[X](表示s與t在X的投影相等),如將它們在U一X一Y的投影(記為s[U一X一Y], t [U一X一Y],交換後所得元組稱為u, v則必有u, v∈R
關於這個情況可以用表8-7表示.
表8-7多值依賴示意圖
X
Y
U-X-Y
s s [X]
t t [X]
s [Y]
t [Y]
s[U-X-Y]
t[U-X-Y]
s [X]
t [X]
s [Y]
t [Y]
t[U-X-Y]
s[U-X-Y]
…………
…………
…………
…………
…………
…………
對多值依賴有了充分了解後,我們可對它定義如下:
定義8-12 設R(U)中有X,Y(U,若對R(U)的任何一個關系,對X的一個確定值,存在Y的一組值與之對應,且Y的這組值又與Z=U一X一Y中的屬性值不相關,此時稱Y多值依賴於X,並記為X→→Y.
在多值依賴中若X→→Y且Z=U一X一Y≠O,則稱X→→Y為非平凡多值依賴,否則稱為平凡多值依賴.
多值依賴可有下面的一些性質:
(1) 在R(U)中如有X→→Y,則必有X→→U一X一Y.
(2) 在R(U)中如有X→Y,則必有X→→Y.
讀者要注意,我們在R(U)中討論多值依賴時並不意味著R(U)中已不需要討論函數依賴
了,恰恰相反,我們一般不僅要在R(U)找出所有多值依賴關系來,而且還要找出所有的函數依賴關系來.因此,一個完整的R(U)應該包含一個函數依賴集F'以及一個多值依賴集F',它可以用R(U, F,F')表示.
前面已經講過,具有多值依賴的關系,它們的數據冗餘量特別大,如何設法減少數據冗餘呢 從例8-2中的關系C中可以看出,如果將C(C, T, L)分解成兩個關系C1,C2後,它們的冗餘度會明顯下降.
C1 (C,T )
C2 (C,L )
C1,C2這兩個關系可用表8-8表示.
表8-8關系C分解成關系C1和C2
C
T
高等數學
高等數學
高等數學
普通物理
普通物理
普通物理
李華民
王天華
林 靜
吳鐵鋼
謝曉芳
徐秋芳
C
L
高等數學
高等數學
普通物理
普通物理
普通物理
普通物理
高等數學
高等效學教程
物理學
普通物理
普通物理基礎
(a) 關系C1 (b) 關系C2
從表8-8可以看到,數據冗餘的減少是極其明顯的.
從多值依賴的觀點看,在C1,C2中各對應一個多值依賴C→→T與C→→L,它們都是平凡多值依賴.因此,在多值依賴時,減少數據冗餘的方法是使關系分解成為僅有平凡多值依賴.
這樣,我們就可以規定一個比BCNF更高的範式,它叫第四範式,可簡記為4NF.這個範式的特點是,在關系模式中它必須滿足:
(1) 只允許出現平凡多值依賴(不允許出現非平凡多值依賴);
(2) 函數依賴要滿足BCNF.
由於函數依賴是多值依賴的特例,因此統一可以用多值依賴概念定義第四範式.
定義8-13 R(U)中如果X→→Y是非平凡多值依賴,則X:必含有關鍵字,此時稱R滿足第四範式,並記作R∈4NF.
由這個第四範式定義可以看出,前面所定義的關系C,它雖是BCNF,但不是4NF,因為在C(C, T )中有:
C→→T
C→→L
而它的關鍵字是(C,T,L).
雖然C∈BCNF,但C不是關鍵字,所以C(4NF.對它作分解後所產生的C1及C2顯然因為C1(C,T)有C→→T,故不存在非平凡多值依賴,因此有C1∈4NF,同理有C2∈4NF.
8.2.4 小 結
我們在規范化討論中定義了五個範式,對這些範式的認識是逐步深入的.總的說來,我們可以總結成下面幾點:
(1) 規范化的目的:解決插入,修改異常以及數據冗餘度高.
(2) 規范化的方法:從模式中各屬性間的依賴關系(函數依依賴及多值依賴)入手,盡量做到每個模式表示客觀世界中的一個"事物".
(3) 規范化的實現手段:用模式分解的方法.
實際上從第一範式到第四範式的過程是一個不斷消除一些依賴關系中的弊病的過程.圖8-7給出了這個過程.
讀者應注意的是:規范化是一種理論,它研究如何通過規范以解決異常與冗餘現象,在實際資料庫設計中構作關系模式時需要考慮到這個因素.但是,客觀世界是復雜的,在構作模式時尚需考慮到其他的多種因素,如模式分解過多,勢必在數據查詢時要用到較多的聯結運算,這樣就會影響查詢速度.因此,在實際構作模式中,需要綜合多種正反因素,統一權衡利弊得失,最後構做出一個較為適合實際的模式來.
圖8-7 規范化的過程
8.3 規范化所引起的一些問題
由規范化而引起了對一些問題的進一步研究,它們是:
1.函數依賴理論的研究
屬性間的函數依賴與多值依賴是規范化的基本依據,因此有必要對它們作進一步研究,這些研究包括:
(1)可由關系模式上的一些函數依賴通過一些公理系統(叫Armstrong公理)而獲得關系模式上的所有函數依賴.由此可知:一個關系模式上的所有函數依賴可由兩部分組成:基礎部分是直接由語義獲取,其他部分可由公理系統推演而得.
(2)引入了函數依賴集的等價概念與最小函數依賴集,即如果兩函數依賴集能推演出相同的集來,則稱它們是等價的,而等價的函數依賴集之最小者稱為最小函數依賴集.
這些研究為規范化提供了更多的基礎信息.
2.模式分解的研究
規范化的實施主要依靠不斷地進行模式分解.在模式分解中需要研究下列問題:
(1)分解後關系中的信息是否會丟失 這叫無損聯接性(lossless join).
(2)分解後關系中的函數依賴是否會丟失 這叫依賴保持性.
(3)在滿足無損聯接性與依賴保持性下可分解到第幾範式.
經過研究我們可以得到下面幾個事實:
若要求滿足無損聯接性,則模式分解一定可以達到BCNF.
若要求滿足依賴保持性,則模式分解一定可以達到3NF,但不一定能達到BCNF.
若既要求滿足無損聯接性又要求滿足依賴保持性,則模式分解一定可以達到
3NF,但 不一定能達到BCNF.
上述三點均可通過三個演算法獲得實現.
由於規范化所引起的這兩個問題的研究的詳細探討均比較復雜,故本書中不擬詳述,僅將結果陳述於上,供讀者參考.
習 題 8
1.請給出下列術語的含義:
函數依賴;(2)關鍵字;(3)主屬性集;(4)多值依賴;(5)2NF;(6)3NF;
(7)BCNF;(8)4NF.
2.在關系SC(S#, C#, G)中S#((C#正確嗎 請說明其理由.
3.是不是規范化最佳的模式結構是最好的結構 為什麼
4.試證明若R(BCNF,則必有R(3NF.
5.試問下列關系模式最高屬第幾範式,並解釋其原因.
R (A, B, C, D),F: {B(D, AB(C};
R (A, B, C),F: {A(B, B(A, A(C};
R (A, B, C, D),F: {A(C, D(B};
R (A, B, C, D),F: {A(C, CD(B}.
s
t
f
p
f
p
p
f
f
f
f
p
p
f
G
S#
C#
Sd
Ss
Sn
S#
C#
G
S#
Sd
Ss
Sn
非主屬性集N
○
○
主屬性集p
K1
K2
K3
K4
○
○
○
S#
c#
G
S#
Sn
Ss
Ss
Sd
S
C
T
C
T
T
S
非決定因素
決定
因素
R:
消除決定因素非關鍵字的非平凡多值依賴
1NF
消除非主屬性對關鍵字的部分依賴
2NF
消除非主屬性對關鍵字的傳遞依賴
3NF
消除主屬性對關鍵字的部分與傳遞依賴
BCNF
消除非平凡且非函數依賴的多值依賴
4NF
『肆』 在資料庫中,規范化理論主要包含哪些內容其核心內容是什麼
標准化和規范化
數據的標准化有助於消除資料庫中的數據冗餘。標准化有好幾在設計資料庫的時候考慮到哪些數據欄位將來可能會發生變更。
舉例,姓氏就是
『伍』 理解什麼是資料庫規范化
理解資料庫規范化的意義
【TechTarget中國原創】資料庫規范化是由Edgar Frank Codd提出的,他是IBM公司的一位計算機科學家,他在自己的論文《20世紀70年代大型共享數據銀行數據關系模型》中首次提出這種說法。資料庫規范化是一個過程,這個過程中需要對現存表結構進行修改,把表轉化使遵循一系列先進的範式。
它著重於消除開發人員和他們項目的「電子表格綜合症」。電子表格綜合症是指開發人員傾向於在盡可能少的表中擠下盡可能多的信息。
早些時候,由於受電子表格的概念以及在電子表格中管理數據思路的影響,開發人員們一直採用與涉及電子表格相同的思路設計MySQL資料庫。現在,再用這種方法設計MySQL資料庫被認為是不明智的做法,因為這種電子表格綜合症設計的表在每次資料庫有很小的改變時,都要持續不斷地進行重新設計。
在MySQL中實現資料庫規范化的好處
通過智能數據分類,降低存儲空間使用量是對MySQL實現資料庫規范化的眾多好處之一。它幫助實現了更好,更快,更強的搜索功能,因為它與早期基於混合實體的搜索方式相比,需要掃描更少的實體。通過資料庫規范化,數據完整性也得以改善,因為它把所有數據分成單獨的實體,並用關聯數據在實體間建立強連接。
Mike Hillyer是之前MySQL AB的一位技術作家,他解釋說:「資料庫規范化的目標是確保每個表中所有非鍵列都直接依賴於主鍵:整個都是鍵,除了鍵沒有其它。有了這個目標,隨之而來還有一些好處,我們降低了冗餘,減少了異常,提高了效率。」
數據規范化很容易做到
下面的例子將說明資料庫規范化如何幫助實現MySQL中的良好設計。下面的表展示了需要在資料庫中捕獲的數據。
Chad Russell is a programmer and system administrator who owns his own internet hosting company. Jon Stephens is a member of the MySQL AB documentation team.
在上面展示的例子中,如果任意一個條件作為識別主鍵的話,會有大量的存儲空間被浪費掉。因此,資料庫規范化是必不可少的。這是一個循序漸進的過程,不能隨意進行。下面的步驟可以幫你在MySQL中實現資料庫規范化。轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦
『陸』 關系資料庫規范化理論的基礎和內容
一個關系資料庫模式由一組關系模式組成,一個關系模式由一組屬性名組成。關系資料庫設計,就是如何把已給定的相互關聯的一組屬性名分組,並把每一組屬性名組成關系的問題。然而,屬性的分組不是唯一的,不同的分組對應著不同的資料庫應用系統,它們的效率往往相差很遠。
為了使資料庫設計合理可靠,簡單實用,長期以來,形成了關系資料庫設計的理論——規范化理論。
6.1 關系規范化的作用
規范化,就是用形式更為簡潔,結構更加規范的關系模式取代原有關系模式的過程。
如果將兩個或兩個以上實體的數據存放在一個表裡,就會出現下列三個問題:
Ø 數據冗餘度大
Ø 插入異常
Ø 刪除異常
所謂數據冗餘,就是相同數據在資料庫中多次重復存放的現象。數據冗餘不僅會浪費存儲空間,而且可能造成數據的不一致性。
插入異常是指,當在不規范的數據表中插入數據時,由於實體完整性約束要求主碼不能為空的限制,而使有用數據無法插入的情況。
刪除異常是指,當不規范的數據表中某條需要刪除的元組中包含有一部分有用數據時,就會出現刪除困難。
(以P98工資表為例)
解決上述三個問題的方法,就是將不規范的關系分解成為多個關系,使得每個關系中只包含一個實體的數據。
(講例子解)
當然,改進後的關系模式也存在另一問題,當查詢職工工資時需要將兩個關系連接後方能查詢,而關系連接的代價也是很大的。
那麼,什麼樣的關系需要分解?分解關系模式的理論依據又是什麼?分解完後能否完全消除上述三個問題?回答這些問題需要理論指導。下面,將加以討論:
6.2 函數依賴
6.2.1屬性間關系
實體間的聯系有兩類:一類是實體與實體之間聯系;另一類是實體內部各屬性間的聯系。資料庫建模一章中討論的是前一類,在這里我們將學習第二類。
和第一類一樣,實體內部各屬性間的聯系也分為1:1、1:n和m:n三類:
例:職工(職工號,姓名,身份證號碼,職稱,部門)
1、 一對一關系(1:1)
設X、Y是關系R的兩個屬性(集)。如果對於X中的任一具體值,Y中至多有一個值與之對應,反之,對於Y中的任一具體值,X中也至多有一個值與之對應,則稱X、Y兩屬性間是一對一關系。
如本例職工關系中職工號與身份證號碼之間就是一對一關系。
2、一對多關系(1:n)
設X、Y是關系R的兩個屬性(集)。如果對於X中的任一具體值,Y中可以找到多個值與之對應,而對於Y中的任一具體值,X中至多隻有一個值與之對應,則稱屬性X對Y是一對多關系。
如職工關系中職工號與職稱之間就是一對多的關系。
3、多對多關系(m:n)
設X、Y是關系R的兩個屬性(集)。如果對於X中的任一具體值,Y中有n個值與之對應,而對於Y中的任一具體值,X中也有m個值與之對應,則稱屬性X對Y是一對多(m:n)關系。
例如,職工關系中,職稱與部門之間就是多對多的關系。
上述屬性間的三種關系,實際上是屬性值之間相互依賴與相互制約的反映,因而稱之為屬性間的數據依賴。
數據依賴共有三種:
Ø 函數依賴(Functional Dependency,FD)
Ø 多值依賴(Multivalued Dependency,MVD)
Ø 連接依賴(Join Dependency,JD)
其中最重要的是函數依賴和多值依賴。
6.2.2 函數依賴
函數依賴,是屬性之間的一種聯系。在關系R中,X、Y為R的兩個屬性或屬性組,如果對於R的所有關系r 都存在:對於X的每一個具體值,Y都只有一個具體值與之對應,則稱屬性Y函數依賴於屬性X。或者說,屬性X函數決定屬性Y,記作X→Y。其中X叫作決定因素,Y叫作被決定因素。
上述定義,可簡言之:如果屬性X的值決定屬性Y的值,那麼屬性Y函數依賴於屬性X。換一種說法:如果知道X的值,就可以獲得Y的值,則可以說X決定Y。
若Y函數不依賴於X,記作:X→Y。
X Y
若X→Y,Y→X,記作:
前面學習的屬性間的三種關系,並不是每種關系中都存在著函數依賴。
u 如果X、Y間是1:1關系,則存在函數依賴 X←→Y
u 如果X、Y間是1:n關系,則存在函數依賴: X→Y或Y→X(多方為決定因素)
u 如果X、Y間是m:n關系,則不存在函數依賴。
注意,屬性間的函數依賴不是指R的某個或某些關系子集滿足上述限定條件,而是指R的一切關系子集都要滿足定義中的限定。只要有一個具體的關系r(R的一個關系子集)不滿足定義中的條件,就破壞了函數依賴,使函數依賴不成立。
這里的關系子集,指的是R的某一部分元組的集合,例如:地測學院的學生關系中只包含了地測學院學生的數據,所以它是長安大學學生關系的一個子集。
6.2.3 碼的定義
前面,我們對碼進行了直觀化的定義,下面用函數依賴的概念對碼作出較為精確的形式化的定義:
設K是關系模式R(U,F)中的屬性或屬性組,K』是K的任一子集。若K→U,而不存在K』→U,則K為R的候選碼(Candidate Key)
Ø 若候選碼多於一個,則選其中的一個為主碼(Primary Key);
Ø 包含在任一候選碼中的屬性,叫做主屬性(Primary Attribute);
Ø 不包含在任何碼中的屬性稱為非主屬性(Nonprime Attribute)或非碼屬性(Nonkey Attribute)
Ø 關系模式中,最簡單的情況是單個屬性是碼,稱為單碼(Single Key);最極端的情況是整個屬性組是碼,稱為全碼(All-Key)。
前面已多次遇到單碼的情況,下面是一個全碼的例子:
簽約(演員名,製片公司,電影名)
外碼:設有兩個關系R和S,X是R的屬性或屬性組,並且X不是R的碼,但X是S的碼(或與S的碼意義相同),則稱X是R的外部碼(Foreign Key),簡稱外碼或外鍵。
如:職工(職工號,姓名,性別,職稱,部門號)
部門(部門號,部門名,電話,負責人)
其中職工關系中的「部門號」就是職工關系的一個外碼。
在此需要注意,在定義中說X不是R的碼,並不是說X不是R的主屬性,X不是碼,但可以是碼的組成屬性,或者是任一候選碼中的一個主屬性。
如:學生(學生號,姓名,性別,年齡…)
課程(課程號,課程名,任課老師…)
選課(學生號,課程號,成績)
在選課關系中,(學生號,課程號)是該關系的碼,學生號、課程號又分別是組成主碼的屬性(但單獨不是碼),它們分別是學生關系和課程關系的主碼,所以是選課關系的兩個外碼。
關系間的聯系,可以通過同時存在於兩個或多個關系中的主碼和外碼的取值來建立。如要查詢某個職工所在部門的情況,只需查詢部門表中的部門號與該職工部門號相同的記錄即可。所以,主碼和外碼提供了一個表示關系間聯系的途徑。
6.2.4 函數依賴和碼的唯一性
由上述碼的形式化定義,我們可以說:碼是由一個或多個屬性組成的,可唯一標識元組的最小屬性組。
碼在關系中總是唯一的,即一個碼函數唯一地決定一行。如果碼的值重復,則整個元組都會重復。否則,違反了實體完整性規則。而元組的重復則表示存在兩個完全相同的實體,這顯然是不可能的,所以碼是不允許重復取值的。
所以,只有當某個屬性或屬性組能夠函數決定關系中的每一個其它的屬性,且該屬性組的任何一個真子集都做不到這一點時,該屬性或屬性組才是該關系的碼。
函數依賴是一個與數據有關的事物規則的概念。如果屬性B函數依賴於屬性A,那麼若知道了A的值,則完全可以找到B的值。這並非是可以由A的值計算出B的值,而是邏輯上只能存在一個B的值。
6.3 關系模式的規范化
一、非規范化的關系
當一個表中存在還可以再分的數據項時,這個表就是非規范化的表。非規范化表存在兩種情況:
Ø 表中具有組合數據項(P102表6-4)
Ø 表中具有多值數據項(P103表6-5)
例:
職工號
姓名
工資
基本工資
職務工資
工齡工資
1002
張三
1000
800
200
職工號
姓名
職稱
系名
系辦地址
學歷
畢業年份
001
張三
教授
計算機
1305
大學
研究生
1963
1982
那麼什麼是規范化關系呢?
當一個關系中的所有分量都是不可再分的數據項時,該關系是規范化的。即當表中不存在組合數據項和多值數據項,只存在不可分的數據項時,這個表是規范化的。
二維表按其規范化程度從低到高可分為5級範式(Normal Form),分別稱為1NF、2NF、3NF(BCNF)、4NF、5NF。規范化程度較高者必是較低者的子集,即:
1NF 2NF 3NF BCNF 4NF 5NF
二、第一範式(1NF)
定義1:如果關系模式R中不包含多值屬性,則R滿足第一範式(First Normal Form),記作:
R∈1NF
1NF是對關系的最低要求,不滿足1NF的關系是非規范化的關系。
非規范化關系轉化為規范化關系1NF方法很簡單,只要上表分別從橫向、縱向展開即可。如下表:
職工號
姓名
基本工資
職務工資
工齡工資
1002
張三
1000
800
200
1005
李四
1200
900
150
職工號
姓名
職稱
系名
系辦地址
學歷
畢業年份
1002
張三
教授
計算機
1305
大學
1963
1002
張三
教授
計算機
1305
研究生
1982
1005
李四
講師
信電
2206
大學
1989
上表雖然符合1NF,但仍是有問題的關系,表中存在大量的數據冗餘和潛在的數據更新異常。原因是(職工號,學歷)是右表的碼,但姓名、職稱、系名、系辦地址卻與學歷無關,只與碼的一部分有關。所以上表還需進一步地規范化。
三、第二範式(2NF)
定義1:設X、Y是關系R的兩個不同的屬性或屬性組,且X → Y。如果存在X的某一個真子集X』,使X』 → Y成立,則稱Y部分函數依賴於X,記作:X P→ Y(Partial)。反之,則稱Y完全函數依賴於X,記作:X F→ Y (Full)
定義2:如果一個關系 R∈1NF,且它的所有非主屬性都完全函數依賴於R的任一候選碼,則R屬於第二範式,記作:R∈2NF。
說明:上述定義中所謂的候選碼也包括主碼,因為碼首先應是候選碼,才可以被指定為碼。
例如關系模式:
職工(職工號,姓名,職稱,項目號,項目名稱,項目角色)中
(職工號,項目號)是該關系的碼,而職工號→姓名、職工號→職稱、項目號→項目名稱…
所以(職工號,項目號)P→ 職稱、(職工號,項目號)P→ 項目名稱
故上述職工關系不符合第二範式要求。它存在三個問題:插入異常、刪除異常和修改異常。
其中修改異常是這樣的,當職工關系中項目名稱發生變化時,由於參與該項目的人員很多,每人一條記錄,要修改項目信息,就得對每一個參加該項目的人員信息進行修改,加大了工作量,還有可能發生遺漏,存在著數據一致性被破壞的可能。
可把上述職工關系分解成如下三個關系:
職工(職工號,姓名,職稱)
參與項目(職工號,項目號,項目角色)
項目(項目號,項目名稱)
上述三個關系都符合定義2的要求,所以都符合2NF
推論:如果關系模式R∈1NF,且它的每一個候選碼都是單碼,則R∈2NF
符合第二範式的關系模式仍可能存在數據冗餘、更新異常等問題。如關系
職工信息(職工號,姓名,職稱,系名,系辦地址)
雖然也符合2NF,但當某個系中有100名職工時,元組中的系辦地址就要重復100次,存在著較高的數據冗餘。原因是關系中,系辦地址不是直接函數依賴於職工號,而是因為職工號函數決定系名,而系名函數決定系辦地址,才使得系辦地址函數依賴於職工號,這種依賴是一個傳遞依賴的過程。
所以,上述職工信息的關系模式還需要進一步的規范化。
四、第三範式(3NF)
定義1:在關系R中,X、Y、Z是R的三個不同的屬性或屬性組,如果X→Y,Y→Z, 但Y→X,且Y不是X的子集,則稱Z傳遞函數依賴於X。
定義2:如果關系模式R∈2NF,且它的每一個非主屬性都不傳遞依賴於任何候選碼,則稱R是第三範式,記作:R∈3NF
推論1:如果關系模式R∈1NF,且它的每一個非主屬性既不部分依賴、也不傳遞依賴於任何候選碼,則R∈3NF
推論2:不存非主屬性的關系模式一定為3NF
五、改進的3NF——BCNF(Boyee-Codd Normal Form)
定義:設關系模式R(U,F)∈1NF,若F的任一函數依賴X→Y(Y X)中X都包含了R的一個碼,則稱R∈BCNF。
換言之,在關系模式R中,如果每一個函數依賴的決定因素都包含碼,則R∈BCNF
推論:如果R∈BCNF,則:
Ø R中所有非主屬性對每一個碼都是完全函數依賴;
Ø R中所有主屬性對每一個不包含它的碼,都是完全函數依賴;
Ø R中沒有任何屬性完全函數依賴於非碼的任何一組屬性。
定理:如果R∈BCNF,則R∈3NF一定成立。
證明:(結合傳遞依賴的定義,用反證法)
注意:當R∈3NF時,R未必屬於BCNF。因為3NF比BCNF放寬了一個限制,它允許決定因素不包含碼。例如:
通訊(城市名,街道名,郵政編碼)中:
F={(城市名,街道名)→郵政編碼,郵政編碼→城市名}
非主屬性郵政編碼完全函數依賴於碼,且無傳遞依賴,故屬於3NF,但郵政編碼也是一個決定因素,而且它沒有包含碼,所以該關系不屬於BCNF。
又如:
Teaching(Student,Teacher,Course) 簡記為Teaching(S,T,C)
規定:一個教師只能教一門課,每門課程可由多個教師講授;學生一旦選定某門課程,教師就相應地固定。
F={T→C,(S,C)→T,(S,T) →C}
該關系的候選碼是(S,C)和(S,T),因此,三個屬性都是主屬性,由於不存在非主屬性,該關系一定是3NF。但由於決定因素T沒包含碼,故它不是BCNF。
關系模式Teaching仍然存在著數據冗餘問題,因為存在著主屬性對碼的部分函數依賴問題。
確切地表示:F={T→C,(S,C)P→T,(S,T) P→C}
所以Teaching關系可以分解為以下兩個BCNF關系模式:
Teacher(Teacher,Course) Student(Student,Teacher)
3NF的「不徹底」性,表現在可能存在主屬性對碼的部分依賴和傳遞依賴。
一個關系模式如果達到了BCNF,那麼,在函數依賴范圍內,它就已經實現了徹底的分離,消除了數據冗餘、插入和刪除異常。
6.4 多值依賴和第四範式
一、多值依賴(Multivalued Dependency)
課程C
教員T
參考書B
物理
李勇
普通物理學
物理
李勇
光學原理
物理
李勇
物理習題集
物理
王軍
普通物理學
物理
王軍
光學原理
物理
王軍
物理習題集
數學
李勇
數學分析
數學
李勇
微分方程
數學
李勇
高等代數
數學
張平
數學分析
數學
張平
微分方程
數學
張平
高等代數
計算數學
張平
數學分析
計算數學
張平
計算數學
計算數學
周峰
數學分析
計算數學
周峰
計算數學
課程C
教員T
參考書B
物理
李勇
王軍
普通物理學
光學原理
物理習題集
數學
李勇
張平
數學分析
微分方程
高等代數
計算數學
張平
周峰
數學分析
計算數學
例:學校中某一門課程由多個教員講授,他們使用相同的一套參考書,每個教員可以講授多門課程,每種參考書可以供多門課程使用。下列是用一個非規范化的表來表示教員T,課程C和參考書B之間的關系。
把上表變換成一張規范化的二維表Teaching,如右表
關系模式Teaching(C,T,B)的碼是(C,T,B),即All-Key。因而Teaching∈BCNF。按照上述語義規定,當某門課程增加一名講課教員時,就要向Teaching表中增加與相應參考書等數目的元組。同樣,某門課程要去掉一本參考書時,則必須刪除相應數目的元組。
對數據的增、刪、改很不方便,數據的冗餘也十分明顯。如果仔細考察這類關系模式,會發現它具有一種稱之為多值依賴的數據依賴關系。
定義:設R(U)是屬性集U上的一個關系模式,X,Y,Z是U的子集,且Z=U-X-Y。如果對R(U)的任一關系r,給定一對(x,z)值,都有一組y值與之對應,這組y值僅僅決定於x值而與z值無關。則稱Y多值依賴於X,或X多值決定Y,記作:X→→Y。――
例如,在關系模式Teaching中,對於一個(C,B)值(物理,普通物理學),有一組T值{李勇,王軍},而這組值僅僅決定於課程C上的值(物理)。即對於另一個(物理,光學原理),它對應的T值仍然是{李勇,王軍},所以T的值與B的值無關,僅決定於C的值,即C→→T 。
多值依賴的另一個等價的形式化定義為:
設關系模式R(U),X、Y、Z是U的子集,Z=U-X-Y,r是R的任意一個關系,t1、t2是r的任意兩個元組。如果t1[X]=t2[X],並在r中存在兩個元組t3、t4,使得:
t3[X]=t4[X]=t1[X]
t3[Y]=t1[Y],t3[Z]=t2[Z],
t4[Y]=t2[Y],t4[Z]=t1[Z]
成立,則X→→Y。
換句話說:如果X→→Y在R(U)中成立,則只要在R的任一關系r中存在兩個元組t1、t2在X屬性上的值相等,則交換這兩個元組在Y(或Z)上的值後得到的兩個新元組t3、t4也必是關系r中的元組。
定義中如果Z=Ф(空集),則稱X→→Y為平凡的多值依賴,否則為非平凡的多值依賴。
多值依賴具有如下性質:
1. 對稱性:若X→→Y,則X→→Z,其中Z=U-X-Y
2. 傳遞性:若X→→Y,Y→→Z,則X→→Z-Y
3. 若X→→Y,X→→Z,則X→→YZ
4. 若X→→Y,X→→Z,則X→→Y∩Z
5. 若X→→Y,X→→Z,則X→→Y-Z,X→→Z-Y
多值依賴與函數依賴相比,具有下面兩個基本區別:
(1)多值依賴的有效性與屬性集的范圍有關
若X→→Y在U上成立,則在V(XY V U)上一定成立;反之則不然,即X→→Y在V(V U)上成立,在U上並不一定成立。這是因為多值依賴的定義中不僅涉及屬性組X、Y,而且涉及U中的其餘屬性Z(Z=U-X-Y)。
一般地說,在R(U)上若有X→→Y在V(V U)上成立,則稱X→→Y為R(U)的嵌入型多值依賴。
而在關系模式R(U)中函數依賴X→Y的有效性,僅決定於X和Y這兩個屬性集的值。只要在R(U)的任何一個關系r中,元組在X和Y上的值使得X→Y成立,則X→Y在任何屬性集V(XY V U)上也成立。
(2)若函數依賴X→Y在R(U)上成立,則對於任何Y』 Y 均有X→Y』 成立。而多值依賴X→→Y若在R(U)上成立,卻不能斷言對於任何Y』 Y有X→→Y』 成立。
多值依賴的約束規則:在具有多值依賴的關系中,如果隨便刪去一個元組,就會破壞其對稱性,那麼,為了保持多值依賴關系中的「多值依賴」性,就必須刪去另外的相關元組以維持其對稱性。這就是多值依賴的約束規則。目前的RDBMS尚不具有維護這種約束的能力,需要程序員在編程中實現。
函數依賴可看成是多值依賴的特例,即函數依賴一定是多值依賴。而多值依賴則不一定就有函數依賴。
二、第四範式(4NF)
定義:如果關系模式R∈1NF,對於R的每個非平凡的多值依賴X→→Y(Y X),X含有碼,則稱R是第四範式,即R∈4NF
課程C
教員T
參考書B
物理
李勇
普通物理學
物理
李勇
光學原理
物理
李勇
物理習題集
物理
王軍
普通物理學
物理
王軍
光學原理
物理
王軍
物理習題集
數學
李勇
數學分析
數學
李勇
微分方程
數學
李勇
高等代數
數學
張平
數學分析
數學
張平
微分方程
數學
張平
高等代數
計算數學
張平
數學分析
計算數學
張平
計算數學
計算數學
周峰
數學分析
計算數學
周峰
計算數學
Teaching關系
關系模式R∈4NF時,R中所有的非平凡多值依賴實際上就是函數依賴。因為每一個決定因素中都含有碼,所以R一定屬於BCNF。
4NF實際上就是限制關系模式的屬性間不允許有非平凡,而且非函數依賴的多值依賴存在。反過來說,4NF所允許的非平凡多值依賴實際上是函數依賴。
例題中的Teaching關系屬於BCNF,但它不屬於4NF。因為它的碼是(C,T,B),關系中存在非平凡多值依賴C→→T ,C→→B,但C不包含碼,而只是碼的一部分。
課程C
參考書B
物理
普通物理學
物理
光學原理
物理
物理習題集
數學
數學分析
數學
微分方程
數學
高等代數
計算數學
數學分析
計算數學
計算數學
CB關系
課程C
教員T
物理
李勇
物理
王軍
數學
李勇
數學
張平
計算數學
張平
計算數學
周峰
CT關系
要使Teaching關系符合4NF,必須將其分解為CT(C,T)和CB(C,B)兩個關系模式。如右表:
從表中顯而易見,符合BCNF的關系Teaching仍然存在著數據冗餘,而分解後的關系CT和CB中只有平凡多值依賴,所以符合4NF,它們已經消除了數據冗餘。可以說:BCNF是在只有函數依賴的關系模式中,規范化程度最高的範式,而4NF是在有多值依賴的關系模式中,規范化程度最高的範式。
如果關系模式中存在連接依賴,即便它符合4NF,仍有可能遇到數據冗餘及更新異常等問題。所以對於達到4NF的關系模式,還需要消除其中可能存在的連接依賴,才可以進一步達到5NF的關系模式。
關於連接依賴和5NF的內容,已超出了本課程教學大綱的要求,在此不再介紹。
『柒』 關於資料庫規范化理論
答案:
由於「學號」能完全函數確定此關系模式的所有屬性,故此關系模式的候選碼為「學號」;
由於候選碼由單一屬性組成,不可能存在非主屬性部分函數依賴於碼「學號」,故此關系模式是第二範式的;
∵學號→所在系,所在系→宿舍樓
∴學號→宿舍樓
此關系模式中存在非主屬性「宿舍樓」傳遞函數依賴於碼「學號」,故此關系模式不是第三範式的。
採用投影分解法,消除其傳遞函數依賴,將其規范化為第三範式關系模式為:
Student11(學號,姓名,出生日期,所在系)
Student12(所在系,宿舍樓)
這個是第一題的答案、其實我也在找第二個的
『捌』 規范化理論對資料庫設計有什麼指導意義
規范化理論是資料庫邏輯設計的指南和工具,具體變現在一下三個方面:
1,在數據分析階段,用數據依賴的概念分析和表示各項數據項之間的關系。
2,在設計概念結構階段,用規范化理論消除初步ER圖冗餘的聯系。
3,有ER圖像數據模型轉化階段,用模式分解的概念和方法指導設計。
『玖』 什麼是資料庫中的規范化
規范化理論把關系應滿足的規范要求分為幾級,滿足最低要求的一級叫做第一範式(1NF),在第一範式的基礎上提出了第二範式(2NF),在第二範式的基礎上又提出了第三範式(3NF),以後又提出了BCNF範式,4NF,5NF。範式的等級越高,應滿足的約束集條件也越嚴格。
第一範式(1NF)
在關系模式R中中,如果每個屬性值都是不可再分的原子屬性,則稱R是第一範式的關系[2]。例如:關系R(職工號,姓名,電話號碼)中一個人可能有一個辦公室電話和一個住宅電話號碼,規范成為1NF的方法一般是將電話號碼分為單位電話和住宅電話兩個屬性,即 R(職工號,姓名,辦公電話,住宅電話)。1NF是關系模式的最低要求。
第二範式(2NF)
如果關系模式R是1NF且其中的所有非主屬性都完全函數依賴於關鍵字,則稱關系R 是屬於第二範式的[2]。例:選課關系 SC(SNO,CNO,GRADE,CREDIT)其中SNO為學號, CNO為課程號,GRADEGE 為成績,CREDIT 為學分。 由以上條件,關鍵字為組合關鍵字(SNO,CNO)。在應用中使用以上關系模式有以下問題: (1)數據冗餘,假設同一門課由40個學生選修,學分就重復40次;(2)更新復雜,若調整了某課程的學分,相應元組的CREDIT值都要更新,有可能會出現同一門課學分不同;(3)插入異常,如計劃開新課,由於沒人選修,沒有學號關鍵字,只能等有人選修才能把課程和學分存入;(4).刪除異常,若學生已經結業,從當前資料庫刪除選修記錄,而某些課程新生尚未選修,則此門課程及學分記錄無法保存。以上問題產生的原因是非主屬性CREDIT僅函數依賴於CNO,也就是CREDIT部分依賴組合關鍵字(SNO,CNO)而不是完全依賴。解決方法是將以上關系分解成兩個關系模式 SC(SNO,CNO,GRADE)和C(CNO,CREDIT)。新關系包括兩個關系模式,它們之間通過SC中的外鍵CNO相聯系,需要時再進行自然聯接,恢復原來的關系
第三範式(3NF)
如果關系模式R是2NF且其中的所有非主屬性都不傳遞依賴於碼,則稱關系R是屬於第三範式的[1]。例如關系模式S(SNO,SNAME,DNO,DNAME,LOCATION)中各屬性分別代表學號、姓名、所在系、系名稱、系地址。關鍵字SNO決定各個屬性。由於是單個關鍵字,沒有部分依賴的問題,肯定是2NF。但關系S肯定有大量的冗餘,有關學生所在系的幾個屬性DNO,DNAME,LOCATION將重復存儲,插入、刪除和修改時也將產生類似以上例的情況。原因在於關系中存在傳遞依賴,即SNO -> DNO,DNO -> LOCATION, 因此關鍵字SNO對LOCATION函數決定是通過傳遞依賴SNO -> LOCATION 實現的。也就是說,SNO不直接決定非主屬性LOCATION。解決方法是將該關系模式分解為兩個關系S(SNO,SNAME,DNO)和D(DNO,DNAME,LOCATION),兩個關系通過S中的外鍵DNO聯系。
BC範式(BCNF)
如果關系模式R的所有屬性(包括主屬性和非主屬性)都不傳遞依賴於R的任何候選關鍵字,那麼稱關系R是屬於BCNF的。或者說關系模式R中,如果每個決定因素都包含關鍵字(而不是被關鍵字所包含),則R是BCNF[3]。 通常認為BCNF是修正的第三範式,有時也稱為擴充的第三範式。
『拾』 關系資料庫的規范化理論是為了解決什麼問題
關系資料庫邏輯設計的好壞與其所含的各個關系模式設計的好壞相關。如果各個關系模式結構合理、功能簡單明確、規范化程度高,就能確保所建立的資料庫具有較少的數據冗餘、較高的數據共享度、較好的數據一致性,並為資料庫系統能夠很好的應用於實際打下良好的基礎。
因此,關系的規范化理論就是為解決數據冗餘、刪除異常和插入異常等問題而提出來的。