【學(xué)習(xí)課件】第4章關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論_第1頁
【學(xué)習(xí)課件】第4章關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論_第2頁
【學(xué)習(xí)課件】第4章關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論_第3頁
【學(xué)習(xí)課件】第4章關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論_第4頁
【學(xué)習(xí)課件】第4章關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第4章 關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論前面介紹了關(guān)系數(shù)據(jù)庫、關(guān)系模型的基本概念以及關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言SQL。使用關(guān)系模型設(shè)計(jì)關(guān)系數(shù)據(jù)庫,也就是面對一個(gè)現(xiàn)實(shí)問題,如何選擇一個(gè)比較好的關(guān)系模式的集合,每個(gè)關(guān)系模式又應(yīng)該由哪些屬性組成。這屬于數(shù)據(jù)庫設(shè)計(jì)的問題,確切地講是數(shù)據(jù)庫邏輯設(shè)計(jì)的問題。本章講述關(guān)系數(shù)據(jù)庫規(guī)范化理論,這是數(shù)據(jù)庫邏輯設(shè)計(jì)的理論依據(jù)。本章要求1、數(shù)據(jù)依賴:理解函數(shù)依賴,碼;2、掌握范式(1NF,2NF,3NF,BCNF),靈活應(yīng)用;3、關(guān)系模式的規(guī)范化1本章概要前面介紹了關(guān)系數(shù)據(jù)庫、關(guān)系模型的基本概念以及關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言SQL。如何使用關(guān)系模型設(shè)計(jì)關(guān)系數(shù)據(jù)庫,也就是面對一個(gè)現(xiàn)實(shí)問題,如何選

2、擇一個(gè)比較好的關(guān)系模式的集合,每個(gè)關(guān)系又應(yīng)該由哪些屬性組成。這屬于數(shù)據(jù)庫設(shè)計(jì)的問題,確切地講是數(shù)據(jù)庫邏輯設(shè)計(jì)的問題。本章講述關(guān)系數(shù)據(jù)庫規(guī)范化理論,這是數(shù)據(jù)庫邏輯設(shè)計(jì)的理論依據(jù)。要求了解規(guī)范化理論的研究動(dòng)機(jī)及其在數(shù)據(jù)庫設(shè)計(jì)中的作用,掌握函數(shù)依賴的有關(guān)概念,第一范式、第二范式、第三范式及BCNF的定義對關(guān)系進(jìn)行規(guī)范化2圖4.1 關(guān)系SCDSNOSNAGEDEPTMNCNOSCORES1趙亦17計(jì)算機(jī)劉偉C190S1趙亦17計(jì)算機(jī)劉偉C285S2錢爾18信息王平C557S2錢爾18信息王平C680S2錢爾18信息王平C770S2錢爾18信息王平C570S3孫珊20信息王平C10S3孫珊20信息王平C

3、270S3孫珊20信息王平C485S4李思男自動(dòng)化劉偉C1933根據(jù)上述的語義規(guī)定,并分析以上關(guān)系中的數(shù)據(jù),我們可以看出:(SNO,CNO)屬性的組合能唯一標(biāo)識(shí)一個(gè)元組,所以(SNO,CNO)是該關(guān)系模式的主關(guān)系碼。但在進(jìn)行數(shù)據(jù)庫的操作時(shí),會(huì)出現(xiàn)以下幾方面的問題。1. 數(shù)據(jù)冗余。每個(gè)系名和系主任的名字存儲(chǔ)的次數(shù)等于該系的學(xué)生人數(shù)乘以每個(gè)學(xué)生選修的課程門數(shù),同時(shí)學(xué)生的姓名、年齡也都要重復(fù)存儲(chǔ)多次,數(shù)據(jù)的冗余度很大,浪費(fèi)了存儲(chǔ)空間。2. 插入異常。如果某個(gè)新系沒有招生,尚無學(xué)生時(shí),則系名和系主任的信息無法插入到數(shù)據(jù)庫中。因?yàn)樵谶@個(gè)關(guān)系模式中,(SNO,CNO)是主關(guān)系碼。根據(jù)關(guān)系的實(shí)體完整性約束,

4、主關(guān)系碼的值不能為空,而這時(shí)沒有學(xué)生,SNO和CNO均無值,因此不能進(jìn)行插入操作。另外,當(dāng)某個(gè)學(xué)生尚未選課,即CNO未知,實(shí)體完整性約束還規(guī)定,主關(guān)系碼的值不能部分為空,同樣不能進(jìn)行插入操作。43. 刪除異常。某系學(xué)生全部畢業(yè)而沒有招生時(shí),刪除全部學(xué)生的記錄則系名、系主任也隨之刪除,而這個(gè)系依然存在,在數(shù)據(jù)庫中卻無法找到該系的信息。另外,如果某個(gè)學(xué)生不再選修C1課程,本應(yīng)該只刪去C1,但C1是主關(guān)系碼的一部分,為保證實(shí)體完整性,必須將整個(gè)元組一起刪掉,這樣,有關(guān)該學(xué)生的其它信息也隨之丟失。4. 更新異常。如果學(xué)生改名,則該學(xué)生的所有記錄都要逐一修改SN;又如某系更換系主任,則屬于該系的學(xué)生記錄

5、都要修改MN的內(nèi)容,稍有不慎,就有可能漏改某些記錄,這就會(huì)造成數(shù)據(jù)的不一致,破壞了數(shù)據(jù)的完整性。5由于存在以上問題,我們說,SCD是一個(gè)不好的關(guān)系模式。產(chǎn)生上述問題的原因,直觀地說,是因?yàn)殛P(guān)系中“包羅萬象”,內(nèi)容太雜了。那么,怎樣才能得到一個(gè)好的關(guān)系模式呢?我們把關(guān)系模式SCD分解為下面三個(gè)結(jié)構(gòu)簡單的關(guān)系模式,如圖4.2所示。學(xué)生關(guān)系S(SNO,SN,AGE,DEPT)選課關(guān)系SC(SNO,CNO,SCORE)系關(guān)系D(DEPT,MN)6S SCSNOSNAGEDEPTSNOCNOSCORES1趙亦17計(jì)算機(jī)S1C190S2錢爾18信息S1C285S3孫珊20信息S2C557S4李思21自動(dòng)化

6、S2C680S2C7DS2C570DEPTMNS3C10計(jì)算機(jī)劉偉S3C270信息王平S3C485自動(dòng)化劉偉S4C193圖4.2 分解后的關(guān)系模式(三個(gè)關(guān)系)7在以上三個(gè)關(guān)系模式中,實(shí)現(xiàn)了信息的某種程度的分離,S中存儲(chǔ)學(xué)生基本信息,與所選課程及系主任無關(guān);D中存儲(chǔ)系的有關(guān)信息,與學(xué)生無關(guān);SC中存儲(chǔ)學(xué)生選課的信息,而與學(xué)生及系的有關(guān)信息無關(guān)。與SCD相比,分解為三個(gè)關(guān)系模式后,數(shù)據(jù)的冗余度明顯降低。當(dāng)新插入一個(gè)系時(shí),只要在關(guān)系D中添加一條記錄。當(dāng)某個(gè)學(xué)生尚未選課,只要在關(guān)系S中添加一條學(xué)生記錄,而與選課關(guān)系無關(guān),這就避免了插入異常。當(dāng)一個(gè)系的學(xué)生全部畢業(yè)時(shí),只需在S中刪除該系的全部學(xué)生記錄,而

7、關(guān)系D中有關(guān)該系的信息仍然保留,從而不會(huì)引起刪除異常。同時(shí),由于數(shù)據(jù)冗余度的降低,數(shù)據(jù)沒有重復(fù)存儲(chǔ),也不會(huì)引起更新異常。 8經(jīng)過上述分析,我們說分解后的關(guān)系模式是一個(gè)好的關(guān)系數(shù)據(jù)庫模式。從而得出結(jié)論,一個(gè)好的關(guān)系模式應(yīng)該具備以下四個(gè)條件:1. 盡可能少的數(shù)據(jù)冗余。2. 沒有插入異常。3. 沒有刪除異常。4. 沒有更新異常。 9但要注意,一個(gè)好的關(guān)系模式并不是在任何情況下都是最優(yōu)的,比如查詢某個(gè)學(xué)生選修課程名及所在系的系主任時(shí),要通過連接,而連接所需要的系統(tǒng)開銷非常大,因此要以實(shí)際設(shè)計(jì)的目標(biāo)出發(fā)進(jìn)行設(shè)計(jì)如何按照一定的規(guī)范設(shè)計(jì)關(guān)系模式,將結(jié)構(gòu)復(fù)雜的關(guān)系分解成結(jié)構(gòu)簡單的關(guān)系,從而把不好的關(guān)系數(shù)據(jù)庫模

8、式轉(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)系。數(shù)據(jù)庫模式的好壞和關(guān)系中各屬性間的依賴關(guān)系有關(guān),因此,我們先討論屬性間的依賴關(guān)系,然后再討論關(guān)系規(guī)范化理論。 104.1 函數(shù)依賴4.1.1函數(shù)依賴的定義及性質(zhì)關(guān)系模式中的各屬性之間相互關(guān)聯(lián)(值相等與否)、相互制約的聯(lián)系稱為數(shù)據(jù)依賴。數(shù)據(jù)依賴一般分為函數(shù)依賴、多值依賴和連接依賴。 其中,函數(shù)依賴是最重要的數(shù)據(jù)依賴。函數(shù)依賴(Functional Dependency)是

9、關(guān)系模式中屬性之間的一種邏輯依賴關(guān)系。11下面給函數(shù)依賴的形式化定義。 函數(shù)依賴的定義定義4.1設(shè)關(guān)系模式R(U,F(xiàn)),U是屬性全集,F(xiàn)是U上的函數(shù)依賴集,X和Y是U的子集,如果對于R(U)的任意一個(gè)可能的關(guān)系r,對于X的每一個(gè)具體值,Y都有唯一的具體值與之對應(yīng),則稱X決定函數(shù)Y,或Y函數(shù)依賴于X,記作XY。我們稱X為決定因素,Y為依賴因素。當(dāng)Y不函數(shù)依賴于X時(shí),記作:X Y。當(dāng)XY且YX時(shí),則記作:X Y。對于關(guān)系模式SCDU=SNO,SN,AGE,DEPT,MN,CNO,SCOREF=SNOSN,SNOAGE,SNODEPT一個(gè)SNO有多個(gè)SCORE的值與其對應(yīng),因此SCORE不能唯一地確

10、定,即SCORE不能函數(shù)依賴于SNO,所以有: SNO SCORE。但是SCORE可以被(SNO,CNO)唯一地確定。所以可表示為:(SNO,CNO)SCORE。 12有關(guān)函數(shù)依賴的幾點(diǎn)說明:1平凡的函數(shù)依賴與非平凡的函數(shù)依賴。當(dāng)屬性集Y是屬性集X的子集時(shí),存在著函數(shù)依賴XY,這種類型的函數(shù)依賴稱為平凡的函數(shù)依賴。如果Y不是X的子集,則稱XY為非平凡的函數(shù)依賴。若不特別聲明,我們討論的都是非平凡的函數(shù)依賴。2函數(shù)依賴是語義范疇的概念。我們只能根據(jù)語義來確定一個(gè)函數(shù)依賴,而不能按照其形式化定義來證明一個(gè)函數(shù)依賴是否成立。例如,對于關(guān)系模式S,當(dāng)學(xué)生不存在重名的情況下,可以得到:SNAGESNDE

11、PT這種函數(shù)依賴關(guān)系,必須是在沒有重名的學(xué)生條件下才成立的,否則就不存在函數(shù)依賴了。所以函數(shù)依賴反映了一種語義完整性約束。 133函數(shù)依賴與屬性之間的聯(lián)系類型有關(guān)。(1)在一個(gè)關(guān)系模式中,如果屬性X與Y有1:1聯(lián)系時(shí),則存在函數(shù)依賴XY,YX,即X Y。 例如,當(dāng)學(xué)生無重名時(shí),SNO SN。(2)如果屬性X與Y有1:m的聯(lián)系時(shí),則只存在函數(shù)依賴XY。 例如,SNO與AGE,DEPT之間均為1:m聯(lián)系,所以有SNOAGE,SNODEPT。(3)如果屬性X與Y有m: n的聯(lián)系時(shí),則X與Y之間不存在任何函數(shù)依賴關(guān)系。 例如,一個(gè)學(xué)生可以選修多門課程,一門課程又可以為多個(gè)學(xué)生選修,所以SNO與CNO之

12、間不存在函數(shù)依賴關(guān)系。由于函數(shù)依賴與屬性之間的聯(lián)系類型有關(guān),所以在確定屬性間的函數(shù)依賴關(guān)系時(shí),可以從分析屬性間的聯(lián)系類型入手,便可確定屬性間的函數(shù)依賴。 144.1.2 完全函數(shù)依賴與部分函數(shù)依賴定義4.2 設(shè)關(guān)系模式R(U),U是屬性全集,X和Y是U的子集,如果XY,并且對于X的任何一個(gè)真子集X,都有X Y,則稱Y對X完全函數(shù)依賴(Full Functional Dependency),記作 X Y。如果對X的某個(gè)真子集X,有XY,則稱Y對X部分函數(shù)依賴(Partial Functional Dependency),記作X Y。例如,在關(guān)系模式SCD中,因?yàn)镾NO SCORE,且CNO SC

13、ORE,所以有:(SNO,CNO) SCORE 。 而SNOAGE,所以(SNO,CNO) AGE。由定義4.2可知:只有當(dāng)決定因素是組合屬性時(shí),討論部分函數(shù)依賴才有意義,當(dāng)決定因素是單屬性時(shí),只能是完全函數(shù)依賴。例如,在關(guān)系模式S(SNO,SN,AGE,DEPT),決定因素為單屬性SNO,有SNO(SN,AGE,DEPT),不存在部分函數(shù)依賴。154.1.3 傳遞函數(shù)依賴定義4.3 設(shè)有關(guān)系模式R(U),U是屬性全集,X,Y,Z是U的子集,若XY,但Y X,而YZ(Y X,Z Y),則稱Z對X傳遞函數(shù)依賴(Transitive Functional Dependency)。如果YX,則X Y

14、,這時(shí)稱Z對X直接函數(shù)依賴,而不是傳遞函數(shù)依賴。例如,在關(guān)系模式SCD中,SNODEPTN,但DEPTN SNO,而 傳遞t DEPTNMN,則有 SNO MN。當(dāng)學(xué)生不存在重名的情況下,有SNOSN,SNSNO,SNO SN,SNDEPTN,這時(shí)DEPTN對SNO是直接函數(shù)依賴,而不是傳遞函數(shù)依賴。綜上所述,函數(shù)依賴分為完全函數(shù)依賴、部分函數(shù)依賴和傳遞函數(shù)依賴三類,它們是規(guī)范化理論的依據(jù)和規(guī)范化程度的準(zhǔn)則,下面我們將以介紹的這些概念為基礎(chǔ),進(jìn)行數(shù)據(jù)庫的規(guī)范設(shè)計(jì)。 4.1.4 碼 候選碼、主碼、關(guān)鍵字、外部碼16規(guī)范化的基本思想是消除關(guān)系模式中的數(shù)據(jù)冗余,消除數(shù)據(jù)依賴中的不合適的部分,解決數(shù)據(jù)

15、插入、刪除時(shí)發(fā)生異常現(xiàn)象。這就要求關(guān)系數(shù)據(jù)庫設(shè)計(jì)出來的關(guān)系模式要滿足一定的條件。我們把關(guān)系數(shù)據(jù)庫的規(guī)范化過程中為不同程度的規(guī)范化要求設(shè)立的不同標(biāo)準(zhǔn)稱為范式(Normal Form),符合某一級(jí)別的關(guān)系模式的集合。由于規(guī)范化的程度不同,就產(chǎn)生了不同的范式。1NF,2NF,3NF,BCNF,4NF,5NF,一級(jí)比一級(jí)有更嚴(yán)格的要求。各個(gè)范式之間的聯(lián)系可以表示為:5NF 4NF BCNF 3NF 2NF 1NF4.2 范式 17圖4.3 各種范式之間的關(guān)系下面逐一介紹各級(jí)范式及其規(guī)范化。 4NF5NFBCNF3NF2NF1NF規(guī)范與非規(guī)范關(guān)系184.2.1 第一范式第一范式(First Normal

16、 Form)是最基本的規(guī)范形式,即關(guān)系中每個(gè)屬性都是不可再分的簡單項(xiàng)。定義4.4 如果關(guān)系模式R,其所有的屬性均為簡單屬性,即每個(gè)屬性都是不可再分的,則稱R屬于第一范式,簡稱1NF,記作R1NF。在第2章討論關(guān)系的性質(zhì)時(shí),我們把滿足這個(gè)條件的關(guān)系稱為規(guī)范化關(guān)系。在關(guān)系數(shù)據(jù)庫系統(tǒng)中只討論規(guī)范化的關(guān)系,凡是非規(guī)范化的關(guān)系模式必須轉(zhuǎn)化成規(guī)范化的關(guān)系。在非規(guī)范化的關(guān)系中去掉組合項(xiàng)就能化成規(guī)范化的關(guān)系。每個(gè)規(guī)范化的關(guān)系都屬于1NF,這也是它之所以稱為“第一”的原因。 19然而,一個(gè)關(guān)系模式僅僅屬于第一范式是不適用的。在4.1節(jié)中給出的關(guān)系模式SCD(SNO,SN,AGE,DEPT,MN,CNO,SCOR

17、E)屬于第一范式,但其具有大量的數(shù)據(jù)冗余,具有插入異常、刪除異常、更新異常等弊端。為什么會(huì)存在這種問題呢?讓我們分析一下SCD中的函數(shù)依賴關(guān)系,它的關(guān)系碼是(SNO,CNO)的屬性組合,所以有: (SNO,CNO) SCORESNOSN,(SNO,CNO) SNSNOAGE,(SNO,CNO) AGESNODEPT,(SNO,CNO) DEPTSNO MN,(SNO,CNO) MN 20我們可以用函數(shù)信賴圖表示以上函數(shù)依賴關(guān)系,如圖4.4所示。 SN,AGEMNScore圖4.4 SCD中的函數(shù)依賴關(guān)系SNOCNOPPf由此可見,在SCD中,既存在完全函數(shù)依賴,又存在部分函數(shù)依賴。這種情況往往

18、在數(shù)據(jù)庫中是不允許的,也正是由于關(guān)系中存在著復(fù)雜的函數(shù)依賴,才導(dǎo)致數(shù)據(jù)操作中出現(xiàn)了種弊端。克服這些弊端的方法是用投影運(yùn)算將關(guān)系分解,去掉過于復(fù)雜的函數(shù)依賴關(guān)系,向更高一級(jí)的范式進(jìn)行轉(zhuǎn)換。 214.2.2 第二范式第二范式的定義定義4.5 如果關(guān)系模式R1NF,且每個(gè)非主屬性都完全函數(shù)依賴于R的每個(gè)關(guān)系碼,則稱R屬于第二范式(Second Normal Form),簡稱2NF,記作R2NF。在關(guān)系模式SCD(SNO,SN,AGE,DEPT,MN,CNO,SCORE)中,SNO,CNO為主屬性,AGE,DEPT,MN,CNO,SCORE均為非主屬性,經(jīng)上述分析,存在非主屬性對關(guān)系碼的部分函數(shù)依賴,

19、所以SCD不是2NF。將SCD分解成兩個(gè)關(guān)系模式SD(SNO,SN,AGE,DEPT,MN)和SC(SNO,CNO,SCORE),其中SD的關(guān)系碼為SNO,單屬性,不可能存在部分函數(shù)依賴。而對于SC,(SNO,CNO) SCORE。所以SCD分解后,消除了非主屬性對關(guān)系碼的部分函數(shù)依賴,SD,SC均屬于2NF。 22經(jīng)以上分析,可以得到兩個(gè)結(jié)論:1從1NF關(guān)系中消除非主屬性對關(guān)系碼的部分函數(shù)依賴,則可得到2NF關(guān)系。2如果R的關(guān)系碼為單屬性,或R的全體屬性均為主屬性,則R2NF。 232NF的缺點(diǎn)2NF的關(guān)系模式解決了1NF中存在的一些問題,2NF規(guī)范化的程度比1NF前進(jìn)了一步,但2NF的關(guān)系

20、模式SD在進(jìn)行數(shù)據(jù)操作時(shí),仍然存在著一些問題: SD(SNO,SN,AGE,DEPT,MN)1數(shù)據(jù)冗余。每個(gè)系名和系主任的名字存儲(chǔ)的次數(shù)等于該系的學(xué)生人數(shù)。2插入異常。當(dāng)一個(gè)新系沒有招生時(shí),有關(guān)該系的信息無法插入。3刪除異常。某系學(xué)生全部畢業(yè)而沒有招生時(shí),刪除全部學(xué)生的記錄也隨之刪除了該系的有關(guān)信息。4更新異常。更換系主任時(shí),仍需改動(dòng)較多的學(xué)生記錄。之所以存在這些問題,是由于在SD中存在著非主屬性對主碼的傳遞依賴。分析SD中的函數(shù)依賴關(guān)系,SNOSN,SNOAGE,SNODEPT,DEPTMN,SNO MN,非主屬性MN對主碼SNO傳遞依賴。為此,對關(guān)系模式SD還需進(jìn)一步簡化,消除這種傳遞依賴

21、,得到3NF。 244.2.3 第三范式第三范式的定義定義4.6 如果關(guān)系模式R2NF,且每個(gè)非主屬性都不傳遞依賴于R的每個(gè)關(guān)系碼,則稱R屬于第三范式(Third Normal Form),簡稱3NF,記作R3NF。第三范式具有如下性質(zhì):1如果R3NF,則R也是2NF。2如果R2NF,則R不一定是3NF。3NF規(guī)范化3NF規(guī)范化是指把2NF關(guān)系模式通過投影分解轉(zhuǎn)換成3NF關(guān)系模式的集合。和2NF的規(guī)范化時(shí)遵循的原則相同,即“一事一地”,讓一個(gè)關(guān)系只描述一個(gè)實(shí)體或者實(shí)體間的聯(lián)系。將SD(SNO,SN,AGE,DEPT,MN)拆分成S(SNO,SN,AGE,DEPT)和D(DEPT,MN)251數(shù)

22、據(jù)冗余降低。系主任的名字存儲(chǔ)的次數(shù)與該系的學(xué)生人數(shù)無關(guān),只在關(guān)系D中存儲(chǔ)一次。2不存在插入異常。當(dāng)一個(gè)新系沒有學(xué)生時(shí),該系的信息可以直接插入到關(guān)系D中,而與學(xué)生關(guān)系S無關(guān)。3不存在刪除異常。要?jiǎng)h除某系的全部學(xué)生而仍然保留該系的有關(guān)信息時(shí),可以只刪除學(xué)生關(guān)系S中的相關(guān)學(xué)生記錄,而不影響系關(guān)系D中的數(shù)據(jù)。 4不存在更新異常。更換系主任時(shí),只需修改關(guān)系D中一個(gè)相應(yīng)元組的MN屬性值,從而不會(huì)出現(xiàn)數(shù)據(jù)的不一致現(xiàn)象。SCD規(guī)范到3NF后,所存在的異常現(xiàn)象已經(jīng)全部消失。但是,3NF只限制了非主屬性對碼的依賴關(guān)系,而沒有限制主屬性對碼的依賴關(guān)系。如果發(fā)生了這種依賴,仍有可能存在數(shù)據(jù)冗余、插入異常、刪除異常和修

23、改異常。這時(shí),則需對3NF進(jìn)一步規(guī)范化,消除主屬性對碼的依賴關(guān)系,為了解決這種問題,Boyce與Codd共同提出了一個(gè)新范式的定義,這就是Boyce-Codd范式,通常簡稱BCNF或BC范式。它彌補(bǔ)了3NF的不足。264.3 關(guān)系模式的規(guī)范化 到目前為止,規(guī)范化理論已經(jīng)提出了六類范式(有關(guān)4NF和5NF的內(nèi)容不再詳細(xì)介紹)。各范式級(jí)別是在分析函數(shù)依賴條件下對關(guān)系模式分離程度的一種測度,范式級(jí)別可以逐級(jí)升高。一個(gè)低一級(jí)范式的關(guān)系模式,通過模式分解轉(zhuǎn)化為若干個(gè)高一級(jí)范式的關(guān)系模式的集合,這種分解過程叫作關(guān)系模式的規(guī)范化(Normalization)。4.3.1 關(guān)系模式規(guī)范化的目的和原則一個(gè)關(guān)系只

24、要其分量都是不可分的數(shù)據(jù)項(xiàng),就可稱作規(guī)范化的關(guān)系,但這只是最基本的規(guī)范化。這樣的關(guān)系模式是合法的。但人們發(fā)現(xiàn)有些關(guān)系模式存在插入、刪除、修改異常、數(shù)據(jù)冗余等弊病。規(guī)范化的目的就是使結(jié)構(gòu)合理,消除存儲(chǔ)異常,使數(shù)據(jù)冗余盡量小,便于插入、刪除和更新。 27規(guī)范化的基本原則就是遵從概念單一化“一事一地”的原則,即一個(gè)關(guān)系只描述一個(gè)實(shí)體或者實(shí)體間的聯(lián)系。若多于一個(gè)實(shí)體,就把它“分離”出來。因此,所謂規(guī)范化,實(shí)質(zhì)上是概念的單一化,即一個(gè)關(guān)系表示一個(gè)實(shí)體。4.3.2 關(guān)系模式規(guī)范化的步驟規(guī)范化就是對原關(guān)系進(jìn)行投影,消除決定屬性不是候選碼的任何函數(shù)依賴。具體可以分為以下幾步:1對1NF關(guān)系進(jìn)行投影,消除原關(guān)系

25、中非主屬性對碼的部分函數(shù)依賴,將1NF關(guān)系轉(zhuǎn)換成若干個(gè)2NF關(guān)系。2對2NF關(guān)系進(jìn)行投影,消除原關(guān)系中非主屬性對碼的傳遞函數(shù)依賴,將2NF關(guān)系轉(zhuǎn)換成若干個(gè)3NF關(guān)系。3對3NF關(guān)系進(jìn)行投影,消除原關(guān)系中主屬性對碼的部分函數(shù)依賴和傳遞函數(shù)依賴,也就是說使決定因素都包含一個(gè)候選碼。得到一組BCNF關(guān)系。 28關(guān)系規(guī)范化的基本步驟如圖4.5所示。 1NF2NF3NFBCNF消除決定屬性不是候選碼的非平凡的函數(shù)依賴消除非主屬性對碼的部分函數(shù)依賴消除非主屬性對碼的傳遞函數(shù)依賴消除主屬性對碼的部分和傳遞函數(shù)依賴圖4.5 規(guī)范化過程 一般情況下,我們說沒有異常弊病的數(shù)據(jù)庫設(shè)計(jì)是好的數(shù)據(jù)庫設(shè)計(jì),一個(gè)不好的關(guān)系

26、模式也總是可以通過分解轉(zhuǎn)換成好的關(guān)系模式的集合。但是在分解時(shí)要全面衡量,綜合考慮,視實(shí)際情況而定。對于那些只要求查詢而不要求插入、刪除等操作的系統(tǒng),幾種異常現(xiàn)象的存在并不影響數(shù)據(jù)庫的操作。這時(shí)便不宜過度分解,否則當(dāng)要對整體查詢時(shí),需要更多的多表連接操作,這有可能得不償失。在實(shí)際應(yīng)用中,最有價(jià)值的是3NF和BCNF,在進(jìn)行關(guān)系模式的設(shè)計(jì)時(shí),通常分解到3NF就足夠了。 294.3.2 關(guān)系模式規(guī)范化的要求關(guān)系模式的規(guī)范化過程是通過對關(guān)系模式的投影分解來實(shí)現(xiàn)的,但是投影分解方法不是唯一的,不同的投影分解會(huì)得到不同的結(jié)果。在這些分解方法中,只有能夠保證分解后的關(guān)系模式與原關(guān)系模式等價(jià)的方法才是有意義的

27、。下面先給出兩個(gè)定義:無損連接性(Lossless Join):設(shè)關(guān)系模式R(U,F(xiàn))被分解為若干個(gè)關(guān)系模式R1(U1,F(xiàn)1),R2(U2,F(xiàn)2),, Rn(Un,F(xiàn)n),其中U=U1U2Un,且不存在UiUj式,F(xiàn)i為F在Uj上的投影,如果R與R1,R2,Rn自然連接的結(jié)果相等,則稱關(guān)系模式R的分解具有無損連接性。函數(shù)依賴可以保證關(guān)系分解的無損連接性。函數(shù)依賴保持性(Preserve Dependency):設(shè)關(guān)系模式R(U,F(xiàn))被分解為若干個(gè)關(guān)系模式R1(U1,F(xiàn)1),R2(U2,F(xiàn)2),, Rn(Un,F(xiàn)n),其中U=U1U2Un,且不存在Ui Uj式,F(xiàn)i為F在Uj上的投影,如果F所蘊(yùn)

28、含的函數(shù)依賴一定也由分解得到的某個(gè)關(guān)系模式中的函數(shù)依賴Fi所蘊(yùn)含,則稱關(guān)系模式R的分解具有函數(shù)依賴保持性。 30判斷對關(guān)系模式的一個(gè)分解是否與原關(guān)系模式等價(jià)可以有三種不同的標(biāo)準(zhǔn):1分解要具有無損連接性。2分解要具有函數(shù)依賴保持性。3分解既要具有無損連接性,又要具有函數(shù)依賴保持性。規(guī)范化理論提供了一套完整的模式分解方法,按照這套算法可以做到:如果要求分解既具有無損連接性,又具有函數(shù)依賴保持性,則分解一定能夠達(dá)到3NF,但不一定能夠達(dá)到BCNF。所以在3NF的規(guī)范化中,既要檢查分解是否具有無損連接性,又要檢查分解是否具有函數(shù)依賴保持性。只有這兩條都滿足,才能保證分解的正確性和有效性,才既不會(huì)發(fā)生信

29、息丟失,又保證關(guān)系中的數(shù)據(jù)滿足完整性約束。 31例1 考察一個(gè)學(xué)生選修課程的關(guān)系 SC1由于課程屬性的值是可分解的故SC1 1NF解決辦法:將課程屬性的值拆開,形成如下關(guān)系形式: SC2 學(xué)號(hào) 課程 0101高數(shù),數(shù)據(jù)庫技術(shù)0315網(wǎng)絡(luò)營銷,英語學(xué)號(hào)課程0101高數(shù)0101數(shù)據(jù)庫技術(shù)0315網(wǎng)絡(luò)營銷0315英語32例2 考察關(guān)系模式: A ( 學(xué)號(hào),姓名,班級(jí)編號(hào),班主任,課程編號(hào),課程名稱,課時(shí),成績 ) A中有以下函數(shù)依賴關(guān)系: ( 學(xué)號(hào),課程編號(hào) ) 成績 學(xué)號(hào) 姓名 學(xué)號(hào) 班級(jí)編號(hào) 學(xué)號(hào) 班主任 課程編號(hào) 課程名稱 課程編號(hào) 課時(shí)這些非主屬性中,只有成績屬性是完全函數(shù)依賴于碼,其它屬性由于只依賴于學(xué)號(hào)屬性或課程編號(hào),故都是部分函數(shù)依賴于碼,因此A 2NF。正是這種部分函數(shù)依賴,造成了當(dāng)50個(gè)學(xué)生選修同一門課程時(shí),課程的編號(hào)、名稱、課時(shí)等信息被重復(fù)了50次。33要將關(guān)系的范式等級(jí)從1NF提升到2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論