




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第二章關(guān)系數(shù)據(jù)庫規(guī)范化理論
建立在關(guān)系模型基礎(chǔ)上實(shí)現(xiàn)的數(shù)據(jù)庫系統(tǒng)稱為關(guān)系數(shù)據(jù)庫,相應(yīng)的DBMS稱為關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。如何設(shè)計(jì)一個(gè)適合的關(guān)系數(shù)據(jù)庫系統(tǒng),關(guān)鍵是關(guān)系數(shù)據(jù)庫模式的設(shè)計(jì),一個(gè)好的關(guān)系數(shù)據(jù)庫模式應(yīng)該包括多少關(guān)系模式,而每一個(gè)關(guān)系模式又應(yīng)該包括哪些屬性,又如何將這些相互關(guān)聯(lián)的關(guān)系模式組建一個(gè)適合的關(guān)系模型,這些工作決定了到整個(gè)系統(tǒng)運(yùn)行的效率,也是系統(tǒng)成敗的關(guān)鍵所在。要設(shè)計(jì)一個(gè)好的關(guān)系數(shù)據(jù)庫,必須需要一定理論努指導(dǎo)。關(guān)系數(shù)據(jù)庫的規(guī)范化理論就是數(shù)據(jù)庫設(shè)計(jì)的一個(gè)理論指導(dǎo)。本章主要討論關(guān)系數(shù)據(jù)庫規(guī)范化理論,討論一個(gè)好的關(guān)系模式的標(biāo)準(zhǔn),以及如何將不好的關(guān)系模式轉(zhuǎn)換成好的關(guān)系模式第二章關(guān)系數(shù)據(jù)庫規(guī)范化理論建立在關(guān)系模型基礎(chǔ)上實(shí)現(xiàn)第二章關(guān)系數(shù)據(jù)庫規(guī)范化理論
2.1規(guī)范化問題的提出2.2函數(shù)依賴2.3關(guān)系規(guī)范化2.4關(guān)系模式的分解準(zhǔn)則2.5小結(jié)第二章關(guān)系數(shù)據(jù)庫規(guī)范化理論2.1規(guī)范化問題的提出2.1規(guī)范化問題的提出關(guān)系數(shù)據(jù)庫的規(guī)范化理論最早是由關(guān)系數(shù)據(jù)庫的創(chuàng)始人E.F.Codd提出的,后經(jīng)許多專家學(xué)者對(duì)關(guān)系數(shù)據(jù)庫理論作了深入的研究和發(fā)展,形成了一整套有關(guān)關(guān)系數(shù)據(jù)庫設(shè)計(jì)的理論。關(guān)系數(shù)據(jù)庫的規(guī)范化理論主要包括三個(gè)方面的內(nèi)容:函數(shù)信賴范式(NormalForm)模式設(shè)計(jì)和模式分解其中,函數(shù)信賴起著核心的作用,是模式分解和模式設(shè)計(jì)的基礎(chǔ),范式是模式分解的標(biāo)準(zhǔn)。
2.1規(guī)范化問題的提出關(guān)系數(shù)據(jù)庫的規(guī)范化理論最早是由關(guān)系2.1規(guī)范化問題的提出數(shù)據(jù)庫的設(shè)計(jì)為什么要遵循一定的規(guī)范化理論?什么是好的關(guān)系模式?某些不好的關(guān)系模式可能導(dǎo)致哪些問題?下面通過例子進(jìn)行分析:例如,設(shè)有描述學(xué)生修課及住宿情況的關(guān)系模式:S-L-C(Sno,Sdept,Sloc,Cno,Grade)Sno表示學(xué)生學(xué)號(hào),Sdept表示學(xué)生所在的系,Sloc表示學(xué)生所住宿舍樓,Cno表示課程號(hào),Grade表示成績。2.1規(guī)范化問題的提出數(shù)據(jù)庫的設(shè)計(jì)為什么要遵循一定的規(guī)范2.1規(guī)范化問題的提出SnoSdeptSLOCCnoGrade9812101計(jì)算機(jī)2公寓DB809812101計(jì)算機(jī)2公寓OS859821101信息1公寓C909821101信息1公寓DS849821102信息1公寓OS78S-L-C關(guān)系模式實(shí)例分析以上關(guān)系中的數(shù)據(jù),我們可以看出:(SNO,CNO)屬性的組合能唯一標(biāo)識(shí)一個(gè)元組,所以(SNO,CNO)是該關(guān)系模式的主碼。2.1規(guī)范化問題的提出SnoSdeptSLOCCn3.刪除異常如果某個(gè)學(xué)生不再選修C課程,本應(yīng)該只刪去C,但C是主關(guān)系鍵的一部分,為保證實(shí)體完整性,必須將整個(gè)元組一起刪掉,這樣有關(guān)該學(xué)生的其它信息也隨之丟失。2.1規(guī)范化問題的提出但在進(jìn)行數(shù)據(jù)庫的操作時(shí),會(huì)出現(xiàn)以下幾方面的問題:1.數(shù)據(jù)冗余 學(xué)生所在的系名和這個(gè)系所對(duì)應(yīng)的宿舍樓名字存儲(chǔ)的次數(shù)等于該系的學(xué)生人數(shù)乘以每個(gè)學(xué)生選修的課程門數(shù),數(shù)據(jù)的冗余度很大,浪費(fèi)了存儲(chǔ)空間。2.插入異常
如果某個(gè)學(xué)生尚未選課,則學(xué)生所在的系名和這個(gè)系所對(duì)應(yīng)的宿舍樓無法插入到數(shù)據(jù)庫中。因?yàn)樵谶@個(gè)關(guān)系模式中,(SNO,CNO)是主關(guān)系鍵。根據(jù)關(guān)系的實(shí)體完整性約束,主關(guān)系鍵的值不能為空,當(dāng)某個(gè)學(xué)生尚未選課,即Cno為空,因此不能進(jìn)行插入操作。3.刪除異常2.1規(guī)范化問題的提出但在進(jìn)行數(shù)據(jù)庫的操作2.1規(guī)范化問題的提出4.更新異常如果某一學(xué)生從計(jì)算機(jī)系轉(zhuǎn)到信息系,那么不但要修改此學(xué)生的Sdept列的值,而且還要修改其Sloc的值,稍有不慎,就有可能漏改某些記錄,這就會(huì)造成數(shù)據(jù)的不一致性,破壞了數(shù)據(jù)的完整性。由于存在以上問題,我們說,S-L-C是一個(gè)不好的關(guān)系模式。那么,怎樣才能得到一個(gè)好的關(guān)系模式呢?我們把關(guān)系模式S-L-C分解為下面三個(gè)結(jié)構(gòu)簡單的關(guān)系模式,如圖所示。2.1規(guī)范化問題的提出4.更新異常由于存在以上問題,我SnoSdeptSLOCCnoGrade9812101計(jì)算機(jī)2公寓DB809812101計(jì)算機(jī)2公寓OS859821101信息1公寓C909821101信息1公寓DS849821102信息1公寓OS78SnoCnoGrade9812101DB809812101OS859821101C909821101DS849821102OS78SdeptSloc計(jì)算機(jī)2公寓信息1公寓SnoSdept9812101計(jì)算機(jī)9821102信息2.1規(guī)范化問題的提出S-LS-DS-C學(xué)生關(guān)系S-D(Sno,Sdept)選課關(guān)系S-C(Sno,Cno,Grade)系關(guān)系S-L(Sdept,Sloc)SnoSdeptSLOCCnoGrade981212.1規(guī)范化問題的提出在以上三個(gè)關(guān)系模式中,實(shí)現(xiàn)了信息的某種程度的分離,
S-D中存儲(chǔ)學(xué)生基本信息,與所選課程及宿舍無關(guān);S-L中存儲(chǔ)系的有關(guān)信息,與學(xué)生無關(guān);S-C中存儲(chǔ)學(xué)生選課的信息,而與學(xué)生及系的有關(guān)信息無關(guān)。與S-L-C相比,分解為三個(gè)關(guān)系模式后,數(shù)據(jù)的冗余度明顯降低。當(dāng)新插入一個(gè)系時(shí),只要在關(guān)系S-L中添加一條記錄。當(dāng)某個(gè)學(xué)生尚未選課,只要在關(guān)系S-D中添加一條學(xué)生記錄,而與選課關(guān)系無關(guān),這就避免了插入異常。當(dāng)某個(gè)學(xué)生選課后又退選,只需在S-C中刪除該學(xué)生記錄,而關(guān)系S-D中有關(guān)該學(xué)生的信息仍然保留,從而不會(huì)引起刪除異常。同時(shí),由于數(shù)據(jù)冗余度的降低,數(shù)據(jù)沒有重復(fù)存儲(chǔ),也不會(huì)引起更新異常。2.1規(guī)范化問題的提出在以上三個(gè)關(guān)系模式中,實(shí)現(xiàn)了信息的2.1規(guī)范化問題的提出經(jīng)過上述分析,我們說分解后的關(guān)系模式是一個(gè)好的關(guān)系數(shù)據(jù)庫模式。一個(gè)好的關(guān)系模式應(yīng)該具備以下四個(gè)條件:盡可能少的數(shù)據(jù)冗余沒有插入異常沒有刪除異常沒有更新異常如何按照一定的規(guī)范設(shè)計(jì)關(guān)系模式,將結(jié)構(gòu)復(fù)雜的關(guān)系分解成結(jié)構(gòu)簡單的關(guān)系,從而把不好的關(guān)系數(shù)據(jù)庫模式轉(zhuǎn)變?yōu)楹玫年P(guān)系數(shù)據(jù)庫模式,這就是關(guān)系的規(guī)范化。規(guī)范化又可以根據(jù)不同的要求而分成若干級(jí)別。我們要設(shè)計(jì)的關(guān)系模式中的各屬性是相互依賴、相互制約的,這樣才構(gòu)成了一個(gè)結(jié)構(gòu)嚴(yán)謹(jǐn)?shù)恼w。因此在設(shè)計(jì)關(guān)模式時(shí),必須從語義上分析這些依賴關(guān)系。2.1規(guī)范化問題的提出經(jīng)過上述分析,我們說分解后的關(guān)系模2.2函數(shù)依賴1.函數(shù)依賴的定義函數(shù)對(duì)我們來說已經(jīng)是非常熟悉的概念,對(duì)公式:
Y=f(X)給定一個(gè)X值,都會(huì)有一個(gè)Y值和它對(duì)應(yīng),也可以說X函數(shù)決定Y,或Y函數(shù)依賴于X。在關(guān)系數(shù)據(jù)庫中討論函數(shù)或函數(shù)依賴注重的是語義上的關(guān)系,比如:省=f(城市)如果“城市”是自變量X,“省”是因變量或函數(shù)值Y。并且把X決定Y,或Y函數(shù)依賴于X表示為:
X→Y2.2函數(shù)依賴1.函數(shù)依賴的定義2.2函數(shù)依賴函數(shù)依賴定義:如果有一個(gè)關(guān)系模式R(A1,A2,…,An),X和Y為{A1,A2,…,An}的子集,那么對(duì)于關(guān)系R中的任意一個(gè)X值,都只有一個(gè)Y值與之對(duì)應(yīng),則稱X函數(shù)決定Y,或Y函數(shù)依賴于X。例如:對(duì)學(xué)生關(guān)系模式:Student(Sno,SName,Sdept,Sage)
有:Sno→SName,Sno→Sdept,Sno→Sage
對(duì)學(xué)生修課關(guān)系模式:SC(Sno,Cno,Grade)
有:(Sno,Cno)→Grade2.2函數(shù)依賴函數(shù)依賴定義:如果有一個(gè)關(guān)系模式R(A1,2.2函數(shù)依賴2.函數(shù)依賴與屬性之間的聯(lián)系類型有關(guān)(1)在一個(gè)關(guān)系模式中,如果屬性X與Y有1:1聯(lián)系時(shí),則存在函數(shù)依賴X→Y,Y→X,即
XY(2)如果屬性X與Y有1:m的聯(lián)系時(shí),則只存在函數(shù)依賴X→Y。
例如,Sno與Sage,Sdept之間均為1:m聯(lián)系,所以有 SNO→Sage,Sno→Sdept。(3)如果屬性X與Y有m:n的聯(lián)系時(shí),則X與Y之間不存在任何函數(shù)依賴關(guān)系。例如,一個(gè)學(xué)生可以選修多門課程,一門課程又可以為多個(gè)學(xué)生選修,所以SNO與CNO之間不存在函數(shù)依賴關(guān)系。由于函數(shù)依賴與屬性之間的聯(lián)系類型有關(guān),所以在確定屬性間的函數(shù)依賴關(guān)系時(shí),可以從分析屬性間的聯(lián)系類型入手,便可確定屬性間的函數(shù)依賴。例如,當(dāng)學(xué)生無重名時(shí),SNOSN2.2函數(shù)依賴2.函數(shù)依賴與屬性之間的聯(lián)系類型有關(guān)XY2.2函數(shù)依賴3.一些術(shù)語和符號(hào)
設(shè)有關(guān)系模式R(A1,A2,…,An),X和Y均為{A1,A2,…,An}的子集如果X→Y,但Y不包含于X,則稱X→Y是非平凡的函數(shù)依賴。如果X→Y,則稱X為決定因子。fX→YX→Yp如果Y函數(shù)不依賴于X,則記作XY。如果對(duì)X的某個(gè)真子集X′,有X′→Y,則稱Y部分函數(shù)依賴于X,(或稱Y對(duì)X部分函數(shù)依賴)記作
。
如果X→Y,并且Y→X,則記作X?Y。如果X→Y,并且對(duì)于X的一個(gè)任意真子集X/
都有X/
Y,則稱Y完全函數(shù)依賴于X(Y對(duì)X完全函數(shù)依賴),記作2.2函數(shù)依賴3.一些術(shù)語和符號(hào)fX→YX→Yp如果2.2函數(shù)依賴?yán)?:有關(guān)系模式:SC(Sno,Sname,Cno,Credit,Grade)各屬性分別為:學(xué)號(hào)、姓名、課程號(hào)、學(xué)分、成績,主碼為(Sno,Cno)f→→p函數(shù)依賴關(guān)系有:Sno→Sname
姓名函數(shù)依賴于學(xué)號(hào)因?yàn)镾noGrade,CnoGrade,(Sno,Cno)→Grade,所以有(Sno,Cno)Grade成績完全函數(shù)依賴于學(xué)號(hào)和課程號(hào)(Sno,Cno)Sname
姓名部分函數(shù)依賴于學(xué)號(hào)和課程號(hào)2.2函數(shù)依賴?yán)?:有關(guān)系模式:SC(Sno,Snam2.2函數(shù)依賴如果X→Y(非平凡函數(shù)依賴,并且Y
X)、Y→Z,則稱Z傳遞函數(shù)依賴于X(或稱Z對(duì)X傳遞函數(shù)依賴)。
例如:在關(guān)系模式:S(Sno,Sname,Dept,Dept_master)中,各屬性分別為:學(xué)號(hào)、姓名、所在系和系主任(假設(shè)一個(gè)系只有一 個(gè)主任),主碼為Sno。
傳遞函數(shù)依賴關(guān)系有:
Sno→Sname
由于:Sno→Dept,Dept→Dept_master
所以有:Sno→Dept_master(系主任傳遞函數(shù)依賴于學(xué)號(hào))2.2函數(shù)依賴如果X→Y(非平凡函數(shù)依賴,并且YX一.關(guān)系模式中的碼
1.候選碼設(shè)K為R(U,F)中的屬性或?qū)傩越M,若KU,則K為R候選碼。(U-表示關(guān)系R的屬性全集,F-表示關(guān)系R上的依賴函數(shù)集)主碼:關(guān)系R(U,F)中可能有多個(gè)候選碼,則選其中一個(gè)作為 主碼全碼:候選碼為整個(gè)屬性組。主屬性與非主屬性:在R(U,F)中,包含在任一候選碼中的屬性稱為主屬性,不包含在任一候選碼中的屬性稱為非主屬性。例1:SC(Sno,Cno,Grade)
其候選碼為:(Sno,Cno),也為主碼
則主屬性為:Sno,Cno,Grade為非主屬性。
2.3關(guān)系規(guī)范化f→一.關(guān)系模式中的碼2.3關(guān)系規(guī)范化f→2.3關(guān)系規(guī)范化一.關(guān)系模式中的碼
例2:R(P,W,A)
其中各屬性含義分別為:演奏者,作品和聽眾。其語義為:一個(gè)演奏者可演奏多個(gè)作品,某一作品可被多個(gè)演奏者演奏;聽眾也可欣賞不同演奏者個(gè)不同作品。
其候選碼為:(P,W,A),因?yàn)橹挥羞@三者才能確定一場(chǎng)音樂會(huì)。我們稱全部屬性均為主碼的表為全碼表。2.外碼定義:若R(U,F(xiàn))的屬性(組)X(X屬于U)是另一個(gè)關(guān)系S的主碼,則稱X為R的外碼。例3:學(xué)生關(guān)系SD(Sno,Sdept)和選課關(guān)系SC(Sno,Cno,Grade),SC中的Sno是SD中的主碼,則Sno是SC的外碼
2.3關(guān)系規(guī)范化一.關(guān)系模式中的碼2.3關(guān)系規(guī)范化二.范式規(guī)范化的基本思想是消除關(guān)系模式中的數(shù)據(jù)冗余,消除數(shù)據(jù)依賴中的不合適的部分,解決數(shù)據(jù)插入、更新、刪除時(shí)發(fā)生異?,F(xiàn)象。這就要求關(guān)系數(shù)據(jù)庫設(shè)計(jì)出來的關(guān)系模式要滿足一定的條件。我們把關(guān)系數(shù)據(jù)庫的規(guī)范化過程中為不同程度的規(guī)范化要求設(shè)立的不同標(biāo)準(zhǔn)稱為范式(NormalForm)。由于規(guī)范化的程度不同,就產(chǎn)生了不同的范式。滿足最基本規(guī)范化要求的關(guān)系模式叫第一范式(1NF)在第一范式中進(jìn)一步滿足一些要求為第二范式(2NF)以此類推就產(chǎn)生了第三范式(3NF)等概念。每種范式都規(guī)定了一些限制約束條件。
2.3關(guān)系規(guī)范化二.范式2.3關(guān)系規(guī)范化二.范式范式的概念最早由E.F.Codd提出。從1971年起,Codd相繼提出了關(guān)系的三級(jí)規(guī)范化形式,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。1974年,Codd和Boyce以共同提出了一個(gè)新的范式的概念,即Boyce-Codd范式,簡稱BC范式。1976年Fagin提出了第四范式,后來又有人定義了第五范式。至此在關(guān)系數(shù)據(jù)庫規(guī)范中建立了一個(gè)范式系列:1NF,2NF,3NF,BCNF,4NF,5NF,一級(jí)比一級(jí)有更嚴(yán)格的要求。2.3關(guān)系規(guī)范化二.范式2.3關(guān)系規(guī)范化
4NF5NFBCNF3NF2NF1NF規(guī)范與非規(guī)范關(guān)系各個(gè)范式之間的聯(lián)系可以表示為:
5NF?4NF?BCNF?3NF?2NF?1NF2.3關(guān)系規(guī)范化4NF5NFBCNF3NF2NF1NF規(guī)范2.3關(guān)系規(guī)范化1.第一范式第一范式(FirstNormalForm)是最基本的規(guī)范形式,即關(guān)系中每個(gè)屬性都是不可再分的簡單項(xiàng)。定義:如果關(guān)系模式R,其所有的屬性均為簡單屬性,即每個(gè)屬性都是不可再分的,則稱R屬于第一范式,簡稱1NF,記作R1NF。
系名稱高級(jí)職稱人數(shù)教授副教授計(jì)算機(jī)系610信息管理系35電子與通訊系48系名稱教授副教授計(jì)算機(jī)系610信息管理系35電子與通訊系482.3關(guān)系規(guī)范化1.第一范式系名稱2.3關(guān)系規(guī)范化2.第二范式
定義:如果關(guān)系模式R∈1NF,并且R中的每個(gè)非主屬性都完全函數(shù) 依賴于主碼,則R∈2NF。
例:S-L-C(Sno,Sdept,Sloc,Cno,Grade)就不是2NF的。 因?yàn)椋⊿no,Cno)是主碼,而又有:Sno→Sdept,
因此有:(Sno,Cno)Sdept
→p即存在非主屬性對(duì)主碼的部分函數(shù)依賴,所以S-L-C不是2NF。2.3關(guān)系規(guī)范化2.第二范式→p即存2.3關(guān)系規(guī)范化2.第二范式分解過程為:首先,對(duì)于組成主碼的屬性集合的每一個(gè)子集,用它作為主碼構(gòu)成一個(gè)表。S-C(Sno,Cno…),S(Sno…),C(Cno…)
f→f→f→對(duì)于每個(gè)表,將依賴于此主碼的屬性放置到此表中。
S-L-C關(guān)系模式分解后的形式為:
S-L(Sno,Sdept,Sloc)和S-C(Sno,Cno,Grade)S-L有:SnoSdept,SnoSLOC:是2NFS-C有:(Sno,Cno)Grade:是2NF2.3關(guān)系規(guī)范化2.第二范式f→f→f→對(duì)于每個(gè)表2.3關(guān)系規(guī)范化2.第二范式
2NF的缺點(diǎn)2NF的關(guān)系模式在進(jìn)行數(shù)據(jù)操作時(shí),仍然存在著一些問題:數(shù)據(jù)冗余每個(gè)系名和所在的宿舍樓名字存儲(chǔ)的次數(shù)等于該系的學(xué)生人數(shù)。插入異常當(dāng)一個(gè)新系沒有招生時(shí),有關(guān)該系的信息無法插入。刪除異常某系學(xué)生全部畢業(yè)而沒有招生時(shí),刪除全部學(xué)生的記錄也隨之刪除了該系的有關(guān)信更新異常更換系所在宿舍樓名字時(shí),仍需改動(dòng)較多的學(xué)生記錄。之所以存在這些問題,是由于在S-L表中存在著非主屬性對(duì)主碼的傳遞依賴。分析S-L表中函數(shù)依賴關(guān)系,Sno→Sdept,Sdept→Sloc,Sno→Sloc,非主屬性Sloc對(duì)主碼Sno傳遞依賴。為此,對(duì)關(guān)系模式還需進(jìn)一步簡化,消除這種傳遞依賴,得到3NF。
2.3關(guān)系規(guī)范化2.第二范式S-L分解后的關(guān)系模式為:S-D(Sno,Sdept)和D-L(Sdept,Sloc)
對(duì)S-D,有:SnoSdept,因此S-D是3NF的對(duì)D-L,有:SdeptSloc,因此D-L也是3NF的2.3關(guān)系規(guī)范化3.第三范式定義:如果R(U,F)∈2NF,并且所有非主屬性都不傳遞依賴于主碼,則R(U,F)∈3NF。
f→f→關(guān)系模式S-L(Sno,Sdept,Sloc)不是3NF。分解過程為:
(1)對(duì)于不是候選碼的每個(gè)決定因子,從表中刪去依賴于它的所有屬性;得到S-D(Sno,Sdept)(2)新建一個(gè)表,新表中包含在原表中所有依賴于該決定因子的屬性;(3)將決定因子作為新表的主碼。新建的表:D-L(Sdept,Sloc)
S-L分解后的關(guān)系模式為:S-D(Sno,Sdept)和D-2.3關(guān)系規(guī)范化3.第三范式
關(guān)系模式S-L由2NF分解為3NF后,函數(shù)依賴關(guān)系變得更加簡單,既沒有非主屬性對(duì)主碼的部分依賴,也沒有非主屬性對(duì)主碼的傳遞依賴,解決了2NF中存在的四個(gè)問題。數(shù)據(jù)冗余降低。系所在的宿舍樓名字存儲(chǔ)次數(shù)與該系的學(xué)生人數(shù)無關(guān),只在關(guān)系D-L中存儲(chǔ)一次不存在插入異常。當(dāng)一個(gè)新系沒有學(xué)生時(shí),該系的信息可以直接插入到關(guān)系D-L中,而與學(xué)生關(guān)系S-D無關(guān)不存在刪除異常。要?jiǎng)h除某系的全部學(xué)生而仍然保留該系的有關(guān)信息時(shí),可以只刪除學(xué)生關(guān)系S-D中的相關(guān)學(xué)生記錄,而不影響系關(guān)系D-L中的數(shù)據(jù)。不存在更新異常。更換所在的宿舍樓時(shí),只需修改關(guān)系D-L中一個(gè)相應(yīng)元組的Sloc屬性值,從而不會(huì)出現(xiàn)數(shù)據(jù)的不一致現(xiàn)象。S-L-C規(guī)范到3NF后,所存在的異?,F(xiàn)象已經(jīng)全部消失。通常在數(shù)據(jù)庫設(shè)計(jì)中,一般要求要達(dá)到3NF。2.3關(guān)系規(guī)范化3.第三范式3.第三范式
但是3NF只限制了非主屬性對(duì)碼的依賴關(guān)系,而沒有限制主屬性對(duì)碼的依賴關(guān)系。
例如:設(shè)關(guān)系模式SNC(SNO,SN,CN0,SCORE),其中SNO代表學(xué)號(hào),SN代表學(xué)生姓名并假設(shè)沒有重名,CNO代表課程號(hào),SCORE代表成績??梢耘卸?,SNC有兩個(gè)候選碼(SNO,CNO)和(SN,CNO),其函數(shù)依賴如下:
SNO?SN (SNO,CNO)→SCORE (SN,CNO)→SCORE如某個(gè)同學(xué)需要改名,則需要將該學(xué)生的所有記錄都要進(jìn)行修改,稍有不慎,就有可能漏改某些記錄,這就會(huì)造成數(shù)據(jù)的不一致性。產(chǎn)生操作異常的原因:(SNO,CNO)SN,即存在主屬性對(duì)碼的部分函數(shù)依賴為了解決這種問題,Boyce與Codd共同提出了一個(gè)新范式的定義,這就是Boyce-Codd范式,通常簡稱BCNF或BC范式。它彌補(bǔ)了3NF的不足。2.3關(guān)系規(guī)范化→p3.第三范式2.3關(guān)系規(guī)范化→p
但是,因?yàn)镾NO?SN,即決定因素SNO或SN不包含候選碼,從另一個(gè)角度說,存在著主屬性對(duì)碼的部分函數(shù)依賴:(SNO,CNO)SN,(SN,CNO)SNO,所以SNC不是BCNF。2.3關(guān)系規(guī)范化4.BC范式(BCNF)定義:若關(guān)系模式R∈1NF,對(duì)于關(guān)系R的每個(gè)函數(shù)依賴X→Y且YX,X必含有候選碼,則R∈BCNF。即每個(gè)決定屬性集都包含候選碼。上面例子中唯一的非主屬性SCORE對(duì)碼不存在部分函數(shù)依賴,也不存在傳遞函數(shù)依賴。所以SNC3NF?!鷓→p但是,因?yàn)镾NO?SN,即決定因素SNO或SN不包含2.3關(guān)系規(guī)范化4.BC范式(BCNF)解決這一問題的辦法仍然是通過投影分解進(jìn)一步提高SNC的范式等級(jí),將SNC規(guī)范到BCNF。
可以將SNC分解成如下兩個(gè)關(guān)系:S1(SNO,SN),S2(SNO,CNO,SCORE)
對(duì)于S1,有兩個(gè)候選碼SNO和SN,對(duì)于S2,主碼為(SNO,CNO)。在這兩個(gè)關(guān)系中,每個(gè)決定屬性集都包含候選碼(即無論主屬性還是非主屬性都不存在對(duì)碼的部分依賴和傳遞依賴),S1BCNF,S2BCNF。關(guān)系SNC轉(zhuǎn)換成BCNF后,數(shù)據(jù)冗余度明顯降低。學(xué)生的姓名只在關(guān)系S1中存儲(chǔ)一次,學(xué)生要改名時(shí),只需改動(dòng)一條學(xué)生記錄中的相應(yīng)的SN值,從而不會(huì)發(fā)生修改異常。SNOSNS1中的函數(shù)依賴關(guān)系SNOCNOSCORES2中的函數(shù)依賴關(guān)系2.3關(guān)系規(guī)范化4.BC范式(BCNF)可以將SNC2.4關(guān)系模式的分解準(zhǔn)則關(guān)系規(guī)范化的目的:解決關(guān)系模式中存在的插入、刪除、更新操作異常,數(shù)據(jù)冗余問題.關(guān)系規(guī)范化的方法:圍繞函數(shù)依賴的主線,對(duì)一個(gè)關(guān)系模式進(jìn)行分解,使關(guān)系從較低級(jí)范式變換到較高級(jí)范式。(模式分解)分解關(guān)系模式,逐步消除不合適的函數(shù)依賴1NF2NF3NFBCNF消除非主屬性對(duì)碼的部分函數(shù)依賴消除非主屬性對(duì)碼的傳遞函數(shù)依賴消除主屬性對(duì)碼的部分和傳遞函數(shù)依賴2.4關(guān)系模式的分解準(zhǔn)則關(guān)系規(guī)范化的目的:解決關(guān)系模式中存2.4關(guān)系模式的分解準(zhǔn)則模式分解的準(zhǔn)則:模式分解具有無損連接性:分解后的關(guān)系通過自然連接可以恢復(fù)成原來的關(guān)系,即通過自然連接得到的關(guān)系與原來的關(guān)系相比,既不多出信息、又不丟失信息。模式分解能夠保持函數(shù)依賴:
在模式的分解過程中,函數(shù)依賴不能丟失的特性,即模式分解不能破壞原來的語義。2.4關(guān)系模式的分解準(zhǔn)則模式分解的準(zhǔn)則:2.4關(guān)系模式的分解準(zhǔn)則例:S-D-L(Sno,Dept,Loc)有函數(shù)依賴:
Sno→Dept,Dept→Loc
不是第三范式的。至少可以有三種分解方案,分別為:方案1:S-L(Sno,Loc),D-L(Dept,Loc)方案2:S-D(Sno,Dept),S-L(Sno,Loc)方案3:S-D(Sno,Dept),D-L(Dept,Loc)
這三種分解方案得到的關(guān)系模式都是第三范式的,那么如何比較這三種方案的好壞呢?由此在將一個(gè)關(guān)系模式分解為多個(gè)關(guān)系模式時(shí)除了提高規(guī)范化程度之外,還需要遵守一定的準(zhǔn)則.三種分解方案是否都滿足分解準(zhǔn)則呢?2.4關(guān)系模式的分解準(zhǔn)則例:S-D-L(Sno,Dept,2.4關(guān)系模式的分解準(zhǔn)則假設(shè)此關(guān)系模式的數(shù)據(jù)如表2-1所示,此關(guān)系用r表示。Sno
Dept
Loc
S01D1L1S02D2L2S03D2L2S04D3L1表2-12.4關(guān)系模式的分解準(zhǔn)則假設(shè)此關(guān)系模式的數(shù)據(jù)如表2-1所示2.4關(guān)系模式的分解準(zhǔn)則方案1:將S-D-L分解投影得到S-L和D-L關(guān)系Sno
Loc
S01L1S02L2S03L2S04L1Dept
Loc
D1L1D2L2D3L1S-LD-LSno
Dept
Loc
S01D1L1S01D3L1S02D2L2S03D2L2S04D1L1S04D3L1表2-2結(jié)論:方案1不滿足無損連接性自然連接2.4關(guān)系模式的分解準(zhǔn)則方案1:將S-D-L分解投影得到S2.4關(guān)系模式的分解準(zhǔn)則方案2:將S-D-L分解投影得到S-D和S-L關(guān)系Sno
DeptS01D1S02D2S03D2S04D3Sno
Loc
S01L1S02L2S03L2S04L1S-DS-LSno
Dept
Loc
S01D1L1S02D2L2S03D2L2S04D3L1表2-3結(jié)論:方案2滿足無損連接性,但沒有保持原有的函數(shù)依賴關(guān)系.但如果假設(shè)學(xué)生S03從D2系轉(zhuǎn)到了D3系,則需在表S-D(S03,D2)改為(S03,D3),同時(shí)還需要在表S-L(S03,L2)改為(S03,L1)。如果這兩個(gè)修改沒有同時(shí)進(jìn)行,則數(shù)據(jù)庫中就會(huì)出現(xiàn)不一致信息。這是由于這樣分解得到的兩個(gè)關(guān)系模式?jīng)]有保持原來的函數(shù)依賴關(guān)系造成的。原有的函數(shù)依賴Dept→Loc在分解后跨在了兩個(gè)關(guān)系模式上。因此分解方案2沒有保持原有的函數(shù)依賴關(guān)系,也不是好的分解方法。自然連接2.4關(guān)系模式的分解準(zhǔn)則方案2:將S-D-L分解投影得到2.4關(guān)系模式的分解準(zhǔn)則方案3:將S-D-L分解投影得到S-D和D-L關(guān)系Dept
Loc
D1L1D2L2D3L1S-DD-LSno
Dept
Loc
S01D1L1S02D2L2S03D2L2S04D3L1表2-4結(jié)論:方案3既滿足無損連接性,又保持原有的函數(shù)依賴關(guān)系. 故它是一個(gè)好的分解方法Sno
DeptS01D1S02D2S03D2S04D3自然連接2.4關(guān)系模式的分解準(zhǔn)則方案3:將S-D-L分解投影得到S2.4關(guān)系模式的分解準(zhǔn)則分解具有無損連接性和分解保持函數(shù)依賴是兩個(gè)獨(dú)立的標(biāo)準(zhǔn)。具有無損連接性的分解不一定保持函數(shù)依賴;保持函數(shù)依賴的分解不一定具有無損連接性。一般情況下,在進(jìn)行模式分解時(shí),應(yīng)將有直接依賴關(guān)系的屬性放置在一個(gè)關(guān)系模式中,這樣得到的分解結(jié)果一般能具有無損連接性,并能保持函數(shù)依賴關(guān)系不變。
2.4關(guān)系模式的分解準(zhǔn)則分解具有無損連接性和分解保持函數(shù)2.5小結(jié)關(guān)系規(guī)范化理論是設(shè)計(jì)沒有操作異常的關(guān)系數(shù)據(jù)庫的基本原則.規(guī)范化理論主要是研究關(guān)系中各屬性之間的依賴關(guān)系,根據(jù)依賴關(guān)系的不同,我們介紹了不包含子屬性的第一范式,到消除了屬性間的部分依賴關(guān)系的第二范式,再到消除了屬性間的傳遞依賴關(guān)系的第三范式,最后到每個(gè)決定因子都必須是候選碼的BCNF。
范式的每一次升級(jí)都是通過模式分解實(shí)現(xiàn)的,在進(jìn)行模式分解時(shí)應(yīng)注意保持分解后的關(guān)系能夠具有無損連接性并能保持原有的函數(shù)依賴關(guān)系。
對(duì)于一般的數(shù)據(jù)庫應(yīng)用來說,設(shè)計(jì)到第三范式就足夠了。因?yàn)橐?guī)范化程度越高,分解得越細(xì),表的個(gè)數(shù)越多,則在檢索操作時(shí)會(huì)因連接而降低檢索效率。
2.5小結(jié)關(guān)系規(guī)范化理論是設(shè)計(jì)沒有操作異常的關(guān)系數(shù)據(jù)庫的基第二章關(guān)系數(shù)據(jù)庫規(guī)范化理論
建立在關(guān)系模型基礎(chǔ)上實(shí)現(xiàn)的數(shù)據(jù)庫系統(tǒng)稱為關(guān)系數(shù)據(jù)庫,相應(yīng)的DBMS稱為關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。如何設(shè)計(jì)一個(gè)適合的關(guān)系數(shù)據(jù)庫系統(tǒng),關(guān)鍵是關(guān)系數(shù)據(jù)庫模式的設(shè)計(jì),一個(gè)好的關(guān)系數(shù)據(jù)庫模式應(yīng)該包括多少關(guān)系模式,而每一個(gè)關(guān)系模式又應(yīng)該包括哪些屬性,又如何將這些相互關(guān)聯(lián)的關(guān)系模式組建一個(gè)適合的關(guān)系模型,這些工作決定了到整個(gè)系統(tǒng)運(yùn)行的效率,也是系統(tǒng)成敗的關(guān)鍵所在。要設(shè)計(jì)一個(gè)好的關(guān)系數(shù)據(jù)庫,必須需要一定理論努指導(dǎo)。關(guān)系數(shù)據(jù)庫的規(guī)范化理論就是數(shù)據(jù)庫設(shè)計(jì)的一個(gè)理論指導(dǎo)。本章主要討論關(guān)系數(shù)據(jù)庫規(guī)范化理論,討論一個(gè)好的關(guān)系模式的標(biāo)準(zhǔn),以及如何將不好的關(guān)系模式轉(zhuǎn)換成好的關(guān)系模式第二章關(guān)系數(shù)據(jù)庫規(guī)范化理論建立在關(guān)系模型基礎(chǔ)上實(shí)現(xiàn)第二章關(guān)系數(shù)據(jù)庫規(guī)范化理論
2.1規(guī)范化問題的提出2.2函數(shù)依賴2.3關(guān)系規(guī)范化2.4關(guān)系模式的分解準(zhǔn)則2.5小結(jié)第二章關(guān)系數(shù)據(jù)庫規(guī)范化理論2.1規(guī)范化問題的提出2.1規(guī)范化問題的提出關(guān)系數(shù)據(jù)庫的規(guī)范化理論最早是由關(guān)系數(shù)據(jù)庫的創(chuàng)始人E.F.Codd提出的,后經(jīng)許多專家學(xué)者對(duì)關(guān)系數(shù)據(jù)庫理論作了深入的研究和發(fā)展,形成了一整套有關(guān)關(guān)系數(shù)據(jù)庫設(shè)計(jì)的理論。關(guān)系數(shù)據(jù)庫的規(guī)范化理論主要包括三個(gè)方面的內(nèi)容:函數(shù)信賴范式(NormalForm)模式設(shè)計(jì)和模式分解其中,函數(shù)信賴起著核心的作用,是模式分解和模式設(shè)計(jì)的基礎(chǔ),范式是模式分解的標(biāo)準(zhǔn)。
2.1規(guī)范化問題的提出關(guān)系數(shù)據(jù)庫的規(guī)范化理論最早是由關(guān)系2.1規(guī)范化問題的提出數(shù)據(jù)庫的設(shè)計(jì)為什么要遵循一定的規(guī)范化理論?什么是好的關(guān)系模式?某些不好的關(guān)系模式可能導(dǎo)致哪些問題?下面通過例子進(jìn)行分析:例如,設(shè)有描述學(xué)生修課及住宿情況的關(guān)系模式:S-L-C(Sno,Sdept,Sloc,Cno,Grade)Sno表示學(xué)生學(xué)號(hào),Sdept表示學(xué)生所在的系,Sloc表示學(xué)生所住宿舍樓,Cno表示課程號(hào),Grade表示成績。2.1規(guī)范化問題的提出數(shù)據(jù)庫的設(shè)計(jì)為什么要遵循一定的規(guī)范2.1規(guī)范化問題的提出SnoSdeptSLOCCnoGrade9812101計(jì)算機(jī)2公寓DB809812101計(jì)算機(jī)2公寓OS859821101信息1公寓C909821101信息1公寓DS849821102信息1公寓OS78S-L-C關(guān)系模式實(shí)例分析以上關(guān)系中的數(shù)據(jù),我們可以看出:(SNO,CNO)屬性的組合能唯一標(biāo)識(shí)一個(gè)元組,所以(SNO,CNO)是該關(guān)系模式的主碼。2.1規(guī)范化問題的提出SnoSdeptSLOCCn3.刪除異常如果某個(gè)學(xué)生不再選修C課程,本應(yīng)該只刪去C,但C是主關(guān)系鍵的一部分,為保證實(shí)體完整性,必須將整個(gè)元組一起刪掉,這樣有關(guān)該學(xué)生的其它信息也隨之丟失。2.1規(guī)范化問題的提出但在進(jìn)行數(shù)據(jù)庫的操作時(shí),會(huì)出現(xiàn)以下幾方面的問題:1.數(shù)據(jù)冗余 學(xué)生所在的系名和這個(gè)系所對(duì)應(yīng)的宿舍樓名字存儲(chǔ)的次數(shù)等于該系的學(xué)生人數(shù)乘以每個(gè)學(xué)生選修的課程門數(shù),數(shù)據(jù)的冗余度很大,浪費(fèi)了存儲(chǔ)空間。2.插入異常
如果某個(gè)學(xué)生尚未選課,則學(xué)生所在的系名和這個(gè)系所對(duì)應(yīng)的宿舍樓無法插入到數(shù)據(jù)庫中。因?yàn)樵谶@個(gè)關(guān)系模式中,(SNO,CNO)是主關(guān)系鍵。根據(jù)關(guān)系的實(shí)體完整性約束,主關(guān)系鍵的值不能為空,當(dāng)某個(gè)學(xué)生尚未選課,即Cno為空,因此不能進(jìn)行插入操作。3.刪除異常2.1規(guī)范化問題的提出但在進(jìn)行數(shù)據(jù)庫的操作2.1規(guī)范化問題的提出4.更新異常如果某一學(xué)生從計(jì)算機(jī)系轉(zhuǎn)到信息系,那么不但要修改此學(xué)生的Sdept列的值,而且還要修改其Sloc的值,稍有不慎,就有可能漏改某些記錄,這就會(huì)造成數(shù)據(jù)的不一致性,破壞了數(shù)據(jù)的完整性。由于存在以上問題,我們說,S-L-C是一個(gè)不好的關(guān)系模式。那么,怎樣才能得到一個(gè)好的關(guān)系模式呢?我們把關(guān)系模式S-L-C分解為下面三個(gè)結(jié)構(gòu)簡單的關(guān)系模式,如圖所示。2.1規(guī)范化問題的提出4.更新異常由于存在以上問題,我SnoSdeptSLOCCnoGrade9812101計(jì)算機(jī)2公寓DB809812101計(jì)算機(jī)2公寓OS859821101信息1公寓C909821101信息1公寓DS849821102信息1公寓OS78SnoCnoGrade9812101DB809812101OS859821101C909821101DS849821102OS78SdeptSloc計(jì)算機(jī)2公寓信息1公寓SnoSdept9812101計(jì)算機(jī)9821102信息2.1規(guī)范化問題的提出S-LS-DS-C學(xué)生關(guān)系S-D(Sno,Sdept)選課關(guān)系S-C(Sno,Cno,Grade)系關(guān)系S-L(Sdept,Sloc)SnoSdeptSLOCCnoGrade981212.1規(guī)范化問題的提出在以上三個(gè)關(guān)系模式中,實(shí)現(xiàn)了信息的某種程度的分離,
S-D中存儲(chǔ)學(xué)生基本信息,與所選課程及宿舍無關(guān);S-L中存儲(chǔ)系的有關(guān)信息,與學(xué)生無關(guān);S-C中存儲(chǔ)學(xué)生選課的信息,而與學(xué)生及系的有關(guān)信息無關(guān)。與S-L-C相比,分解為三個(gè)關(guān)系模式后,數(shù)據(jù)的冗余度明顯降低。當(dāng)新插入一個(gè)系時(shí),只要在關(guān)系S-L中添加一條記錄。當(dāng)某個(gè)學(xué)生尚未選課,只要在關(guān)系S-D中添加一條學(xué)生記錄,而與選課關(guān)系無關(guān),這就避免了插入異常。當(dāng)某個(gè)學(xué)生選課后又退選,只需在S-C中刪除該學(xué)生記錄,而關(guān)系S-D中有關(guān)該學(xué)生的信息仍然保留,從而不會(huì)引起刪除異常。同時(shí),由于數(shù)據(jù)冗余度的降低,數(shù)據(jù)沒有重復(fù)存儲(chǔ),也不會(huì)引起更新異常。2.1規(guī)范化問題的提出在以上三個(gè)關(guān)系模式中,實(shí)現(xiàn)了信息的2.1規(guī)范化問題的提出經(jīng)過上述分析,我們說分解后的關(guān)系模式是一個(gè)好的關(guān)系數(shù)據(jù)庫模式。一個(gè)好的關(guān)系模式應(yīng)該具備以下四個(gè)條件:盡可能少的數(shù)據(jù)冗余沒有插入異常沒有刪除異常沒有更新異常如何按照一定的規(guī)范設(shè)計(jì)關(guān)系模式,將結(jié)構(gòu)復(fù)雜的關(guān)系分解成結(jié)構(gòu)簡單的關(guān)系,從而把不好的關(guān)系數(shù)據(jù)庫模式轉(zhuǎn)變?yōu)楹玫年P(guān)系數(shù)據(jù)庫模式,這就是關(guān)系的規(guī)范化。規(guī)范化又可以根據(jù)不同的要求而分成若干級(jí)別。我們要設(shè)計(jì)的關(guān)系模式中的各屬性是相互依賴、相互制約的,這樣才構(gòu)成了一個(gè)結(jié)構(gòu)嚴(yán)謹(jǐn)?shù)恼w。因此在設(shè)計(jì)關(guān)模式時(shí),必須從語義上分析這些依賴關(guān)系。2.1規(guī)范化問題的提出經(jīng)過上述分析,我們說分解后的關(guān)系模2.2函數(shù)依賴1.函數(shù)依賴的定義函數(shù)對(duì)我們來說已經(jīng)是非常熟悉的概念,對(duì)公式:
Y=f(X)給定一個(gè)X值,都會(huì)有一個(gè)Y值和它對(duì)應(yīng),也可以說X函數(shù)決定Y,或Y函數(shù)依賴于X。在關(guān)系數(shù)據(jù)庫中討論函數(shù)或函數(shù)依賴注重的是語義上的關(guān)系,比如:省=f(城市)如果“城市”是自變量X,“省”是因變量或函數(shù)值Y。并且把X決定Y,或Y函數(shù)依賴于X表示為:
X→Y2.2函數(shù)依賴1.函數(shù)依賴的定義2.2函數(shù)依賴函數(shù)依賴定義:如果有一個(gè)關(guān)系模式R(A1,A2,…,An),X和Y為{A1,A2,…,An}的子集,那么對(duì)于關(guān)系R中的任意一個(gè)X值,都只有一個(gè)Y值與之對(duì)應(yīng),則稱X函數(shù)決定Y,或Y函數(shù)依賴于X。例如:對(duì)學(xué)生關(guān)系模式:Student(Sno,SName,Sdept,Sage)
有:Sno→SName,Sno→Sdept,Sno→Sage
對(duì)學(xué)生修課關(guān)系模式:SC(Sno,Cno,Grade)
有:(Sno,Cno)→Grade2.2函數(shù)依賴函數(shù)依賴定義:如果有一個(gè)關(guān)系模式R(A1,2.2函數(shù)依賴2.函數(shù)依賴與屬性之間的聯(lián)系類型有關(guān)(1)在一個(gè)關(guān)系模式中,如果屬性X與Y有1:1聯(lián)系時(shí),則存在函數(shù)依賴X→Y,Y→X,即
XY(2)如果屬性X與Y有1:m的聯(lián)系時(shí),則只存在函數(shù)依賴X→Y。
例如,Sno與Sage,Sdept之間均為1:m聯(lián)系,所以有 SNO→Sage,Sno→Sdept。(3)如果屬性X與Y有m:n的聯(lián)系時(shí),則X與Y之間不存在任何函數(shù)依賴關(guān)系。例如,一個(gè)學(xué)生可以選修多門課程,一門課程又可以為多個(gè)學(xué)生選修,所以SNO與CNO之間不存在函數(shù)依賴關(guān)系。由于函數(shù)依賴與屬性之間的聯(lián)系類型有關(guān),所以在確定屬性間的函數(shù)依賴關(guān)系時(shí),可以從分析屬性間的聯(lián)系類型入手,便可確定屬性間的函數(shù)依賴。例如,當(dāng)學(xué)生無重名時(shí),SNOSN2.2函數(shù)依賴2.函數(shù)依賴與屬性之間的聯(lián)系類型有關(guān)XY2.2函數(shù)依賴3.一些術(shù)語和符號(hào)
設(shè)有關(guān)系模式R(A1,A2,…,An),X和Y均為{A1,A2,…,An}的子集如果X→Y,但Y不包含于X,則稱X→Y是非平凡的函數(shù)依賴。如果X→Y,則稱X為決定因子。fX→YX→Yp如果Y函數(shù)不依賴于X,則記作XY。如果對(duì)X的某個(gè)真子集X′,有X′→Y,則稱Y部分函數(shù)依賴于X,(或稱Y對(duì)X部分函數(shù)依賴)記作
。
如果X→Y,并且Y→X,則記作X?Y。如果X→Y,并且對(duì)于X的一個(gè)任意真子集X/
都有X/
Y,則稱Y完全函數(shù)依賴于X(Y對(duì)X完全函數(shù)依賴),記作2.2函數(shù)依賴3.一些術(shù)語和符號(hào)fX→YX→Yp如果2.2函數(shù)依賴?yán)?:有關(guān)系模式:SC(Sno,Sname,Cno,Credit,Grade)各屬性分別為:學(xué)號(hào)、姓名、課程號(hào)、學(xué)分、成績,主碼為(Sno,Cno)f→→p函數(shù)依賴關(guān)系有:Sno→Sname
姓名函數(shù)依賴于學(xué)號(hào)因?yàn)镾noGrade,CnoGrade,(Sno,Cno)→Grade,所以有(Sno,Cno)Grade成績完全函數(shù)依賴于學(xué)號(hào)和課程號(hào)(Sno,Cno)Sname
姓名部分函數(shù)依賴于學(xué)號(hào)和課程號(hào)2.2函數(shù)依賴?yán)?:有關(guān)系模式:SC(Sno,Snam2.2函數(shù)依賴如果X→Y(非平凡函數(shù)依賴,并且Y
X)、Y→Z,則稱Z傳遞函數(shù)依賴于X(或稱Z對(duì)X傳遞函數(shù)依賴)。
例如:在關(guān)系模式:S(Sno,Sname,Dept,Dept_master)中,各屬性分別為:學(xué)號(hào)、姓名、所在系和系主任(假設(shè)一個(gè)系只有一 個(gè)主任),主碼為Sno。
傳遞函數(shù)依賴關(guān)系有:
Sno→Sname
由于:Sno→Dept,Dept→Dept_master
所以有:Sno→Dept_master(系主任傳遞函數(shù)依賴于學(xué)號(hào))2.2函數(shù)依賴如果X→Y(非平凡函數(shù)依賴,并且YX一.關(guān)系模式中的碼
1.候選碼設(shè)K為R(U,F)中的屬性或?qū)傩越M,若KU,則K為R候選碼。(U-表示關(guān)系R的屬性全集,F-表示關(guān)系R上的依賴函數(shù)集)主碼:關(guān)系R(U,F)中可能有多個(gè)候選碼,則選其中一個(gè)作為 主碼全碼:候選碼為整個(gè)屬性組。主屬性與非主屬性:在R(U,F)中,包含在任一候選碼中的屬性稱為主屬性,不包含在任一候選碼中的屬性稱為非主屬性。例1:SC(Sno,Cno,Grade)
其候選碼為:(Sno,Cno),也為主碼
則主屬性為:Sno,Cno,Grade為非主屬性。
2.3關(guān)系規(guī)范化f→一.關(guān)系模式中的碼2.3關(guān)系規(guī)范化f→2.3關(guān)系規(guī)范化一.關(guān)系模式中的碼
例2:R(P,W,A)
其中各屬性含義分別為:演奏者,作品和聽眾。其語義為:一個(gè)演奏者可演奏多個(gè)作品,某一作品可被多個(gè)演奏者演奏;聽眾也可欣賞不同演奏者個(gè)不同作品。
其候選碼為:(P,W,A),因?yàn)橹挥羞@三者才能確定一場(chǎng)音樂會(huì)。我們稱全部屬性均為主碼的表為全碼表。2.外碼定義:若R(U,F(xiàn))的屬性(組)X(X屬于U)是另一個(gè)關(guān)系S的主碼,則稱X為R的外碼。例3:學(xué)生關(guān)系SD(Sno,Sdept)和選課關(guān)系SC(Sno,Cno,Grade),SC中的Sno是SD中的主碼,則Sno是SC的外碼
2.3關(guān)系規(guī)范化一.關(guān)系模式中的碼2.3關(guān)系規(guī)范化二.范式規(guī)范化的基本思想是消除關(guān)系模式中的數(shù)據(jù)冗余,消除數(shù)據(jù)依賴中的不合適的部分,解決數(shù)據(jù)插入、更新、刪除時(shí)發(fā)生異?,F(xiàn)象。這就要求關(guān)系數(shù)據(jù)庫設(shè)計(jì)出來的關(guān)系模式要滿足一定的條件。我們把關(guān)系數(shù)據(jù)庫的規(guī)范化過程中為不同程度的規(guī)范化要求設(shè)立的不同標(biāo)準(zhǔn)稱為范式(NormalForm)。由于規(guī)范化的程度不同,就產(chǎn)生了不同的范式。滿足最基本規(guī)范化要求的關(guān)系模式叫第一范式(1NF)在第一范式中進(jìn)一步滿足一些要求為第二范式(2NF)以此類推就產(chǎn)生了第三范式(3NF)等概念。每種范式都規(guī)定了一些限制約束條件。
2.3關(guān)系規(guī)范化二.范式2.3關(guān)系規(guī)范化二.范式范式的概念最早由E.F.Codd提出。從1971年起,Codd相繼提出了關(guān)系的三級(jí)規(guī)范化形式,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。1974年,Codd和Boyce以共同提出了一個(gè)新的范式的概念,即Boyce-Codd范式,簡稱BC范式。1976年Fagin提出了第四范式,后來又有人定義了第五范式。至此在關(guān)系數(shù)據(jù)庫規(guī)范中建立了一個(gè)范式系列:1NF,2NF,3NF,BCNF,4NF,5NF,一級(jí)比一級(jí)有更嚴(yán)格的要求。2.3關(guān)系規(guī)范化二.范式2.3關(guān)系規(guī)范化
4NF5NFBCNF3NF2NF1NF規(guī)范與非規(guī)范關(guān)系各個(gè)范式之間的聯(lián)系可以表示為:
5NF?4NF?BCNF?3NF?2NF?1NF2.3關(guān)系規(guī)范化4NF5NFBCNF3NF2NF1NF規(guī)范2.3關(guān)系規(guī)范化1.第一范式第一范式(FirstNormalForm)是最基本的規(guī)范形式,即關(guān)系中每個(gè)屬性都是不可再分的簡單項(xiàng)。定義:如果關(guān)系模式R,其所有的屬性均為簡單屬性,即每個(gè)屬性都是不可再分的,則稱R屬于第一范式,簡稱1NF,記作R1NF。
系名稱高級(jí)職稱人數(shù)教授副教授計(jì)算機(jī)系610信息管理系35電子與通訊系48系名稱教授副教授計(jì)算機(jī)系610信息管理系35電子與通訊系482.3關(guān)系規(guī)范化1.第一范式系名稱2.3關(guān)系規(guī)范化2.第二范式
定義:如果關(guān)系模式R∈1NF,并且R中的每個(gè)非主屬性都完全函數(shù) 依賴于主碼,則R∈2NF。
例:S-L-C(Sno,Sdept,Sloc,Cno,Grade)就不是2NF的。 因?yàn)椋⊿no,Cno)是主碼,而又有:Sno→Sdept,
因此有:(Sno,Cno)Sdept
→p即存在非主屬性對(duì)主碼的部分函數(shù)依賴,所以S-L-C不是2NF。2.3關(guān)系規(guī)范化2.第二范式→p即存2.3關(guān)系規(guī)范化2.第二范式分解過程為:首先,對(duì)于組成主碼的屬性集合的每一個(gè)子集,用它作為主碼構(gòu)成一個(gè)表。S-C(Sno,Cno…),S(Sno…),C(Cno…)
f→f→f→對(duì)于每個(gè)表,將依賴于此主碼的屬性放置到此表中。
S-L-C關(guān)系模式分解后的形式為:
S-L(Sno,Sdept,Sloc)和S-C(Sno,Cno,Grade)S-L有:SnoSdept,SnoSLOC:是2NFS-C有:(Sno,Cno)Grade:是2NF2.3關(guān)系規(guī)范化2.第二范式f→f→f→對(duì)于每個(gè)表2.3關(guān)系規(guī)范化2.第二范式
2NF的缺點(diǎn)2NF的關(guān)系模式在進(jìn)行數(shù)據(jù)操作時(shí),仍然存在著一些問題:數(shù)據(jù)冗余每個(gè)系名和所在的宿舍樓名字存儲(chǔ)的次數(shù)等于該系的學(xué)生人數(shù)。插入異常當(dāng)一個(gè)新系沒有招生時(shí),有關(guān)該系的信息無法插入。刪除異常某系學(xué)生全部畢業(yè)而沒有招生時(shí),刪除全部學(xué)生的記錄也隨之刪除了該系的有關(guān)信更新異常更換系所在宿舍樓名字時(shí),仍需改動(dòng)較多的學(xué)生記錄。之所以存在這些問題,是由于在S-L表中存在著非主屬性對(duì)主碼的傳遞依賴。分析S-L表中函數(shù)依賴關(guān)系,Sno→Sdept,Sdept→Sloc,Sno→Sloc,非主屬性Sloc對(duì)主碼Sno傳遞依賴。為此,對(duì)關(guān)系模式還需進(jìn)一步簡化,消除這種傳遞依賴,得到3NF。
2.3關(guān)系規(guī)范化2.第二范式S-L分解后的關(guān)系模式為:S-D(Sno,Sdept)和D-L(Sdept,Sloc)
對(duì)S-D,有:SnoSdept,因此S-D是3NF的對(duì)D-L,有:SdeptSloc,因此D-L也是3NF的2.3關(guān)系規(guī)范化3.第三范式定義:如果R(U,F)∈2NF,并且所有非主屬性都不傳遞依賴于主碼,則R(U,F)∈3NF。
f→f→關(guān)系模式S-L(Sno,Sdept,Sloc)不是3NF。分解過程為:
(1)對(duì)于不是候選碼的每個(gè)決定因子,從表中刪去依賴于它的所有屬性;得到S-D(Sno,Sdept)(2)新建一個(gè)表,新表中包含在原表中所有依賴于該決定因子的屬性;(3)將決定因子作為新表的主碼。新建的表:D-L(Sdept,Sloc)
S-L分解后的關(guān)系模式為:S-D(Sno,Sdept)和D-2.3關(guān)系規(guī)范化3.第三范式
關(guān)系模式S-L由2NF分解為3NF后,函數(shù)依賴關(guān)系變得更加簡單,既沒有非主屬性對(duì)主碼的部分依賴,也沒有非主屬性對(duì)主碼的傳遞依賴,解決了2NF中存在的四個(gè)問題。數(shù)據(jù)冗余降低。系所在的宿舍樓名字存儲(chǔ)次數(shù)與該系的學(xué)生人數(shù)無關(guān),只在關(guān)系D-L中存儲(chǔ)一次不存在插入異常。當(dāng)一個(gè)新系沒有學(xué)生時(shí),該系的信息可以直接插入到關(guān)系D-L中,而與學(xué)生關(guān)系S-D無關(guān)不存在刪除異常。要?jiǎng)h除某系的全部學(xué)生而仍然保留該系的有關(guān)信息時(shí),可以只刪除學(xué)生關(guān)系S-D中的相關(guān)學(xué)生記錄,而不影響系關(guān)系D-L中的數(shù)據(jù)。不存在更新異常。更換所在的宿舍樓時(shí),只需修改關(guān)系D-L中一個(gè)相應(yīng)元組的Sloc屬性值,從而不會(huì)出現(xiàn)數(shù)據(jù)的不一致現(xiàn)象。S-L-C規(guī)范到3NF后,所存在的異常現(xiàn)象已經(jīng)全部消失。通常在數(shù)據(jù)庫設(shè)計(jì)中,一般要求要達(dá)到3NF。2.3關(guān)系規(guī)范化3.第三范式3.第三范式
但是3NF只限制了非主屬性對(duì)碼的依賴關(guān)系,而沒有限制主屬性對(duì)碼的依賴關(guān)系。
例如:設(shè)關(guān)系模式SNC(SNO,SN,CN0,SCORE),其中SNO代表學(xué)號(hào),SN代表學(xué)生姓名并假設(shè)沒有重名,CNO代表課程號(hào),SCORE代表成績??梢耘卸?,SNC有兩個(gè)候選碼(SNO,CNO)和(SN,CNO),其函數(shù)依賴如下:
SNO?SN (SNO,CNO)→SCORE (SN,CNO)→SCORE如某個(gè)同學(xué)需要改名,則需要將該學(xué)生的所有記錄都要進(jìn)行修改,稍有不慎,就有可能漏改某些記錄,這就會(huì)造成數(shù)據(jù)的不一致性。產(chǎn)生操作異常的原因:(SNO,CNO)SN,即存在主屬性對(duì)碼的部分函數(shù)依賴為了解決這種問題,Boyce與Codd共同提出了一個(gè)新范式的定義,這就是Boyce-Codd范式,通常簡稱BCNF或BC范式。它彌補(bǔ)了3NF的不足。2.3關(guān)系規(guī)范化→p3.第三范式2.3關(guān)系規(guī)范化→p
但是,因?yàn)镾NO?SN,即決定因素SNO或SN不包含候選碼,從另一個(gè)角度說,存在著主屬性對(duì)碼的部分函數(shù)依賴:(SNO,CNO)SN,(SN,CNO)SNO,所以SNC不是BCNF。2.3關(guān)系規(guī)范化4.BC范式(BCNF)定義:若關(guān)系模式R∈1NF,對(duì)于關(guān)系R的每個(gè)函數(shù)依賴X→Y且YX,X必含有候選碼,則R∈BCNF。即每個(gè)決定屬性集都包含候選碼。上面例子中唯一的非主屬性SCORE對(duì)碼不存在部分函數(shù)依賴,也不存在傳遞函數(shù)依賴。所以SNC3NF?!鷓→p但是,因?yàn)镾NO?SN,即決定因素SNO或SN不包含2.3關(guān)系規(guī)范化4.BC范式(BCNF)解決這一問題的辦法仍然是通過投影分解進(jìn)一步提高SNC的范式等級(jí),將SNC規(guī)范到BCNF。
可以將SNC分解成如下兩個(gè)關(guān)系:S1(SNO,SN),S2(SNO,CNO,SCORE)
對(duì)于S1,有兩個(gè)候選碼SNO和SN,對(duì)于S2,主碼為(SNO,CNO)。在這兩個(gè)關(guān)系中,每個(gè)決定屬性集都包含候選碼(即無論主屬性還是非主屬性都不存在對(duì)碼的部分依賴和傳遞依賴),S1BCNF,S2BCNF。關(guān)系SNC轉(zhuǎn)換成BCNF后,數(shù)據(jù)冗余度明顯降低。學(xué)生的姓名只在關(guān)系S1中存儲(chǔ)一次,學(xué)生要改名時(shí),只需改動(dòng)一條學(xué)生記錄中的相應(yīng)的SN值,從而不會(huì)發(fā)生修改異常。SNOSNS1中的函數(shù)依賴關(guān)系SNOCNOSCORES2中的函數(shù)依賴關(guān)系2.3關(guān)系規(guī)范化4.BC范式(BCNF)可以將SNC2.4關(guān)系模式的分解準(zhǔn)則關(guān)系規(guī)范化的目的:解決關(guān)系模式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 代理服務(wù)雇傭合同范本
- 汽車司機(jī)雇傭合同范本
- 合伙風(fēng)險(xiǎn)合同范例
- 加盟訂金合同范本
- 廠房設(shè)備租賃安全合同范本
- 廠房修建總包合同范本
- 兄弟分地合同范本模板
- 企業(yè)能源托管合同范本
- 產(chǎn)品設(shè)計(jì)費(fèi) 合同范本
- 印刷月結(jié)合同范例
- 2025年黑龍江林業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測(cè)試題庫審定版
- 生物-天一大聯(lián)考2025屆高三四省聯(lián)考(陜晉青寧)試題和解析
- 天津2025年天津市住房公積金管理中心招聘9人筆試歷年參考題庫附帶答案詳解-1
- 2025成人禮暨高三百日誓師校長演講稿-追夢(mèng)不覺天涯遠(yuǎn) 奮斗深感百日短
- 小學(xué)科學(xué)新課標(biāo)科學(xué)課程標(biāo)準(zhǔn)解讀
- DeepSeek科普課件深度解析
- 湖南省長沙市北雅中學(xué)2024-2025學(xué)年九年級(jí)下學(xué)期開學(xué)考試英語試題(含答案含聽力原文無音頻)
- 2024年02月北京2024年江蘇銀行北京分行春季校園招考筆試歷年參考題庫附帶答案詳解
- 2025年駐村個(gè)人工作計(jì)劃
- 重磅!2024年中國載人飛艇行業(yè)發(fā)展前景及市場(chǎng)空間預(yù)測(cè)報(bào)告(智研咨詢)
- 全球氣候變化與應(yīng)對(duì)措施
評(píng)論
0/150
提交評(píng)論