版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論本章學(xué)習(xí)目標(biāo)本章主要講解函數(shù)依賴和以函數(shù)為基礎(chǔ)的幾種關(guān)系范式。通過本章的學(xué)習(xí),讀者應(yīng)掌握以下內(nèi)容:函數(shù)依賴
關(guān)系范式1NF、2NF、3NF關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論17.1引言7.1.1討論范圍數(shù)據(jù)庫是一組相關(guān)數(shù)據(jù)的集合。它不僅包括數(shù)據(jù)本身,而且還包括數(shù)據(jù)之間的聯(lián)系,即數(shù)據(jù)模型。給出一組數(shù)據(jù),如何構(gòu)造一個(gè)適當(dāng)?shù)臄?shù)據(jù)模型,在關(guān)系數(shù)據(jù)庫中應(yīng)該組織成幾個(gè)關(guān)系模式,每個(gè)關(guān)系模式包括哪些屬性,這些都是數(shù)據(jù)庫邏輯設(shè)計(jì)要解決的問題。在具體數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)之前,尚未錄入實(shí)際數(shù)據(jù)時(shí),組建較好的數(shù)據(jù)模型是關(guān)系到整個(gè)系統(tǒng)運(yùn)行效率,甚至系統(tǒng)成敗的關(guān)鍵。在以關(guān)系模型為基礎(chǔ)的數(shù)據(jù)庫中,用關(guān)系來描述現(xiàn)實(shí)世界。關(guān)系具有概念單一性的特點(diǎn),一個(gè)關(guān)系既可以描述一個(gè)實(shí)體,也可以描述實(shí)體間的聯(lián)系。一個(gè)關(guān)系模型包括一組關(guān)系模式,各個(gè)關(guān)系不是完全孤立的。只有它們相互間存在關(guān)聯(lián),才能構(gòu)成一個(gè)模型。這些關(guān)系模式的全體定義構(gòu)成關(guān)系數(shù)據(jù)庫模式。關(guān)系模型有嚴(yán)格的理論基礎(chǔ),也是目前應(yīng)用最廣泛的數(shù)據(jù)模型,指導(dǎo)數(shù)據(jù)庫邏輯設(shè)計(jì)的是關(guān)系數(shù)據(jù)庫規(guī)范化理論。關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論主要包括三個(gè)方面的內(nèi)容:數(shù)據(jù)依賴、范式和模式設(shè)計(jì)方法。數(shù)據(jù)依賴起著核心的作用。我們重點(diǎn)討論函數(shù)依賴的概念,然后再介紹模式分解的標(biāo)準(zhǔn),即范式,為數(shù)據(jù)庫的設(shè)計(jì)準(zhǔn)備一定的基本理論基礎(chǔ)。這里力求以大家都熟悉的實(shí)例說明問題。7.1引言27.1引言7.1.2存儲異常問題有“教學(xué)”關(guān)系模式:教學(xué)(教師號,教師姓名,職稱,教師地址,系號,系名稱,系地址,課程號,課程名,教學(xué)水平,學(xué)分)。
表7-1“教學(xué)”關(guān)系教師號教師姓名職稱教師地址系號系名稱系地址課程號課程名教學(xué)
水平學(xué)分T1MAPRFA1D1DEPT1L1C1COMPUGOOD3T1MAPRFA1D1DEPT1L1C2PROGREXCEL3T1MAPRFA1D1DEPT1L1C3DBOK4T2LIAPA2D1DEPT1L1C3DBGOOD4T2LIAPA2D1DEPT1L1C4OSGOOD4T3CHENPRFA3D1DEPT1L1C4OSOK2T3CHENPRFA3D1DEPT1L1C1COMPUOK3T3CHENPRFA3D1DEPT1L1C5DSTRUEXCEL3T4ZHOUAPA4D2DEPT2L2C6MATHGOOD57.1引言教師號教師職稱教師系號系名稱系地址課程號課程名37.1引言7.1.2存儲異常問題主碼是(教師號,課程號),但該關(guān)系在使用過程中存在以下幾個(gè)問題:(1)數(shù)據(jù)冗余。每當(dāng)教師開設(shè)一門課程時(shí),該教師的職稱、地址等信息就重復(fù)存儲一次。一般一個(gè)系有很多教師,每位教師都開設(shè)多門課,每位教師的職稱、地址要多次重復(fù)存儲,這樣會使關(guān)系中的數(shù)據(jù)冗余度很大。(2)更新異常。由于數(shù)據(jù)的重復(fù)存儲,會給更新帶來麻煩。如果一位任3門課的教師改變了地址,3個(gè)元組的地址都要更新,一旦一個(gè)元組的地址未修改就會導(dǎo)致數(shù)據(jù)不一致。如果某個(gè)系改變辦公地址,所要修改的數(shù)據(jù)量會更大。(3)插入異常。如果學(xué)校新調(diào)入一個(gè)教師,暫時(shí)未主講任何課程。由于缺少主碼的一部分,而主碼不允許出現(xiàn)空值,新教師的相關(guān)信息就不能插入到此關(guān)系中去。只有當(dāng)他開設(shè)了課程之后才能插入,這是不合理的。(4)刪除異常。與插入異常相反,如果某些教師致力于科研,不擔(dān)任教學(xué)任務(wù)了,就要從當(dāng)前數(shù)據(jù)庫中刪除有關(guān)記錄。那么關(guān)于這些教師的其他信息將無法記載,這也是極不合理的。7.1引言47.1引言7.1.2存儲異常問題用下面4個(gè)關(guān)系模式代替原來的一個(gè)關(guān)系模式,上述4個(gè)方面的問題就基本解決了。教師(教師號,教師姓名,職稱,教師地址,系號)系(系號,系名稱,系地址)課程(課程號,課程名,學(xué)分)選修(教師號,課程號,教學(xué)水平)新關(guān)系模型包括4個(gè)關(guān)系模式,“教師”和“系”通過“教師”中的外碼“系號”相聯(lián)系;“教師”與“課程”之間多對多的聯(lián)系可以通過“選修”中的外碼(教師號,課程號)相聯(lián)系,需要時(shí)再進(jìn)行自然聯(lián)接,則恢復(fù)了原來的關(guān)系。但是將“教學(xué)”分解成“教師”、“系”、“課程”、“選修”四個(gè)模式是否最佳,并不是絕對的。例如,要頻繁地查詢講授某門課程教師的情況,就要對這兩個(gè)關(guān)系做聯(lián)接操作,而聯(lián)接是以機(jī)時(shí)為代價(jià)的。在原來的關(guān)系模式中則可以直接查到。到底哪個(gè)關(guān)系模型更好,要根據(jù)數(shù)據(jù)庫的規(guī)模、數(shù)據(jù)的共享程度和應(yīng)用需求來權(quán)衡。7.1引言57.2函數(shù)依賴7.2.1屬性之間的聯(lián)系實(shí)體內(nèi)部各屬性間的聯(lián)系分為3類:一對一、一對多和多對多。設(shè)圖書管理關(guān)系數(shù)據(jù)模型包括以下3個(gè)關(guān)系模式:圖書(總編號,分類號,書名,作者,出版單位,單價(jià))讀者(借書證號,姓名,性別,單位,職稱,地址)借閱(借書證號,總編號,借閱日期,備注)1.一對一聯(lián)系在讀者關(guān)系中,借書證號是惟一的。設(shè)X、Y為關(guān)系中的屬性或?qū)傩越M,它們的所有可能取值組成兩個(gè)集合。為簡便起見,也叫X、Y,如果對于X中的任一具體值,Y中至多有一個(gè)值與之對應(yīng),并且對于Y中的任一具體值,X中也至多有一個(gè)值與之對應(yīng),稱X、Y這兩個(gè)屬性之間是一對一聯(lián)系。
7.2函數(shù)依賴67.2函數(shù)依賴7.2.1屬性之間的聯(lián)系2.一對多聯(lián)系在圖書關(guān)系中,一本書有若干副本,它們有相同的書名、作者、分類號等,但每本書有惟一的總編號。書名與總編號之間是1:m,即同一個(gè)書名有多個(gè)總編號與之對應(yīng)。如果屬性值集合X中的任一具體值,至多與Y中的一個(gè)值對應(yīng),而Y中的任一具體值卻可以和X中的多個(gè)值相對應(yīng),則稱兩個(gè)屬性間從X到Y(jié)為m:1的聯(lián)系?;驈腨到X是1:m的聯(lián)系。3.多對多聯(lián)系在借閱關(guān)系中,一個(gè)讀者可以借閱多本書,即同一個(gè)借書證號有若干個(gè)圖書總編號與之對應(yīng)。由總編號標(biāo)識的一本書在不同日期可以被不同的讀者借閱。又如在選修關(guān)系中一個(gè)學(xué)生可以選修幾門課,同一門課有多個(gè)學(xué)生同時(shí)選修。在X、Y兩個(gè)屬性值集中,如果任一個(gè)值都可以至多和另一個(gè)屬性集中的多個(gè)值對應(yīng),反之亦然,則稱屬性X和Y是m:n關(guān)系。顯然,3類聯(lián)系之間存在著包含關(guān)系,1:1是1:m的特例;1:m又是m:n的特例。關(guān)系中屬性值之間這種相互依賴又相互制約的聯(lián)系稱為數(shù)據(jù)依賴。數(shù)據(jù)依賴主要有兩種:函數(shù)依賴和多值依賴。7.2函數(shù)依賴77.2函數(shù)依賴7.2.2函數(shù)依賴1.函數(shù)依賴的概念定義7.1用U表示屬性集的全集{A1,A2,……,An},設(shè)R(U)是屬性集U上的關(guān)系模式,X和Y是U的子集。對于R(U)的所有具體關(guān)系r都滿足如下約束:對于X的每一個(gè)具體值,Y有惟一的具體值與之對應(yīng),則稱“X函數(shù)確定Y”或“Y函數(shù)依賴于X”,記作X→Y,X稱做決定因素。在關(guān)系模式R(U)中,對于U的子集X和Y,如果X→Y,但YX,則稱X→Y是非平凡依賴。若YX,則稱X→Y為平凡依賴。例1有關(guān)系工資(職工號,基本工資,獎(jiǎng)金),一個(gè)職工號惟一確定一個(gè)基本工資數(shù)額或一個(gè)獎(jiǎng)金額,即一個(gè)人不能拿兩種工資或獎(jiǎng)金,但幾個(gè)人的工資可能相同。具體數(shù)字如表7-2所示。表7-2“工資”表職工號基本工資獎(jiǎng)金051390500524205005327070054…390…70…7.2函數(shù)依賴職工號基本工資獎(jiǎng)金0513905005287.2函數(shù)依賴7.2.2函數(shù)依賴設(shè)屬性A是職工號,屬性B是基本工資,屬性C是獎(jiǎng)金,可以看出,每個(gè)A的值對應(yīng)一個(gè)B的值和一個(gè)C的值。因此,屬性B和C都函數(shù)依賴于屬性A。但反過來則不存在這種關(guān)系,如基本工資390對應(yīng)兩個(gè)職工號051和054。用符號表示為:A→B,A→C,B→\A,C→\A,B→\C。根據(jù)函數(shù)依賴的定義,可以找出下面規(guī)律:(1)在一個(gè)關(guān)系模式中,如果屬性X、Y有1:1聯(lián)系,則存在函數(shù)依賴X→Y、Y→X??捎涀鱔Y。(2)如果屬性X、Y是1:m的聯(lián)系,則存在函數(shù)依賴Y→X,但X→\Y。(3)如果屬性X、Y是n:m的聯(lián)系,則X與Y之間不存在任何函數(shù)依賴。必須注意,函數(shù)依賴是指關(guān)系R模式的所有元組均應(yīng)滿足的約束條件,而不是指關(guān)系模式R的某個(gè)或某些元組滿足的約束條件。當(dāng)關(guān)系中的元組增加或者更新后都不能破壞函數(shù)依賴。因此,必須根據(jù)語義來確定數(shù)據(jù)之間的函數(shù)依賴,而不能單憑某一時(shí)刻關(guān)系中的實(shí)際數(shù)據(jù)值來判斷。7.2函數(shù)依賴97.2函數(shù)依賴7.2.2函數(shù)依賴2.完全函數(shù)依賴與部分函數(shù)依賴定義7.2設(shè)X→Y是關(guān)系模式R(U)的一個(gè)函數(shù)依賴,如果存在X的真子集X,使得X→Y成立,則稱Y部分依賴于X,記作。否則稱Y完全依賴于X,記作。例2設(shè)有關(guān)系模式選課(學(xué)號,課程號,成績,學(xué)分)在“選課”關(guān)系中,由于一個(gè)學(xué)生可以選修多門課程,一門課程可有多個(gè)學(xué)生選修,因此“學(xué)號”或“課程號”都不能單獨(dú)確定“成績”。“成績”只能由屬性組合(學(xué)號,課程號)來確定?!皩W(xué)分”可由“課程號”來確定,由此可知:(學(xué)號,課程號)成績(學(xué)號,課程號)學(xué)分3.傳遞依賴定義7.3在同一關(guān)系模式R(U)中,如果存在非平凡函數(shù)依賴X→Y,Y→Z,且Y→\X,則X→Z,即稱Z傳遞依賴于X。例3設(shè)關(guān)系模式學(xué)生(學(xué)號,姓名,系號,系名,系地址)。存在函數(shù)依賴:學(xué)號→系號,系號→\學(xué)號,系號→系地址。根據(jù)傳遞依賴的定義可知:學(xué)號→系地址實(shí)際上,部分依賴必然是傳遞依賴。在選修(學(xué)號,課程號,成績,學(xué)分)關(guān)系中:(學(xué)號,課程號)→課程號,課程號→學(xué)分,形成傳遞依賴(學(xué)號,課程號)→學(xué)分。7.2函數(shù)依賴107.2函數(shù)依賴7.2.4碼1.主碼、候選碼、外碼定義7.5關(guān)系模式R(U)中,K是U中的屬性或?qū)傩越M,如果KU,則稱K為R(U)的一個(gè)候選碼。若關(guān)系模式R(U)中有多個(gè)候選碼,可以選中其中的一個(gè)做為主碼。若K不是本關(guān)系的主碼,而是其他關(guān)系的主碼,則稱K為外碼。候選碼有兩個(gè)性質(zhì):(1)標(biāo)識的惟一性:對于R(U)中的每一個(gè)元組,K的值確定后,該元組就相應(yīng)地確定了。(2)無冗余性:當(dāng)K是屬性組的情況下,K的任何一部分都不能惟一標(biāo)識該元組。這是定義中完全依賴的意義。2.主屬性和非主屬性定義7.6包含在任意一個(gè)候選碼中的屬性,稱為主屬性。不包含在任何候選碼中的屬性稱為非主屬性。關(guān)系選修(學(xué)號,課程號,成績),(學(xué)號,課程號)是候選碼也是主碼?!皩W(xué)號”,“課程號”是主屬性,“成績”是非主屬性。
7.2函數(shù)依賴117.3關(guān)系模式的規(guī)范化7.3.1第一范式(INF)定義7.7在關(guān)系模式R中的每一個(gè)具體關(guān)系r中,如果每個(gè)屬性值都是不可再分的最小數(shù)據(jù)單位,則稱R是第一范式的關(guān)系,記為R1NF。不是1NF的關(guān)系稱為非規(guī)范化關(guān)系。數(shù)據(jù)庫理論研究的都是規(guī)范化關(guān)系,如何將普通的復(fù)式表格規(guī)范為關(guān)系呢?下面通過例子來說明。例1表7-3所示的數(shù)據(jù)不是1NF,因?yàn)椤半娫捥柎a”可以分為“辦公室電話”和“家庭電話”兩個(gè)屬性。請將表7-3規(guī)范成1NF。表7-3非規(guī)范化“職工”表職工號姓名電話號碼1001李明5362633(O)、5366677(H)1002張敏50012771003劉大維5677901(O)、5679971(H)1004章良弟65432101005何為民47765327.3關(guān)系模式的規(guī)范化職工號姓名電話號碼1001李明53127.3關(guān)系模式的規(guī)范化7.3.1第一范式(INF)將上表規(guī)范成1NF可以有三種方法。第一種方法:重復(fù)存儲職工號和姓名,如表7-3(a)所示。在這樣的關(guān)系中,主碼只能是電話號碼。如果單獨(dú)查閱此關(guān)系問題不大,若通過職工號與其他關(guān)系聯(lián)接,由于職工號不是主碼,則可能造成大量冗余。表7-3(a)規(guī)范化“職工1”表職工號姓名電話號碼1001李明53626331001李明53666771002張敏50012771003劉大維56779011003劉大維56799711004章良弟65432101005何為民47765327.3關(guān)系模式的規(guī)范化職工號姓名電話號碼1001李明53137.3關(guān)系模式的規(guī)范化7.3.1第一范式(INF)第二種方法:保留職工號的主碼地位,把電話號碼拆分成單位電話和住宅電話兩個(gè)屬性,如表7-7(b)所示。這樣會使只有一個(gè)電話號碼的元組出現(xiàn)空屬性值,由于電話號碼不是候選碼,允許有空值。表7-7(b)規(guī)范化“職工2”表職工號姓名單位電話住宅電話1001李明536263353666771002張敏50012771003劉大維567790156799711004章良弟65432101005何為民47765327.3關(guān)系模式的規(guī)范化職工號姓名單位電話住宅電話1001147.3關(guān)系模式的規(guī)范化7.3.1第一范式(INF)第三種方法:保留職工號的主碼地位,維持原模式不變,但強(qiáng)制每個(gè)元組只能錄入一個(gè)電話號碼,如表7-3(c)所示。表7-3(c)規(guī)范化“職工3”表職工號姓名電話號碼1001李明53626331002張敏50012771003劉大維56779011004章良弟65432101005何為民47765327.3關(guān)系模式的規(guī)范化職工號姓名電話號碼1001李明53157.3關(guān)系模式的規(guī)范化7.3.2第二范式(2NF)滿足第一范式的關(guān)系仍有可能出現(xiàn)問題。例2設(shè)有關(guān)系模式選修(學(xué)號,課程號,成績,學(xué)分)存在函數(shù)依賴:(學(xué)號,課程號)→成績,(學(xué)號,課程號)→學(xué)分,主碼是(學(xué)號,課程號)。如表3-4所示。7.3關(guān)系模式的規(guī)范化167.3關(guān)系模式的規(guī)范化7.3.2第二范式(2NF)滿足第一范式的關(guān)系仍有可能出現(xiàn)問題。例2設(shè)有關(guān)系模式選修(學(xué)號,課程號,成績,學(xué)分)存在函數(shù)依賴:(學(xué)號,課程號)→成績,(學(xué)號,課程號)→學(xué)分,主碼是(學(xué)號,課程號)。如表3-4所示。表3-4選修學(xué)號課程號成績學(xué)分S1C1904S1C2753S1C3702S2C2703S2C3752S2C4953S3C27537.3關(guān)系模式的規(guī)范化學(xué)號課程號成績學(xué)分S1C1904S177.3關(guān)系模式的規(guī)范化7.3.2第二范式(2NF)該關(guān)系模式在實(shí)際應(yīng)用中會再現(xiàn)下列問題:(1)數(shù)據(jù)冗余。每當(dāng)一名學(xué)生選修一門課程時(shí),該課程的“學(xué)分”就重復(fù)存儲一次。假設(shè)同一門課被40名學(xué)生選修,學(xué)分就重復(fù)40次。(2)更新異常。如果調(diào)整了課程的學(xué)分,每個(gè)相應(yīng)元組的“學(xué)分”值都必須更新。這不僅增加了更新代價(jià),更嚴(yán)重的是有潛在的數(shù)據(jù)不一致性。(3)插入異常。如果學(xué)校計(jì)劃增開新課,應(yīng)當(dāng)把新課的課程號及學(xué)分?jǐn)?shù)插入到“選修”中。但是由于缺少主碼的一部分,將不能插入。(4)刪除異常。如果學(xué)生已經(jīng)結(jié)業(yè),從當(dāng)前數(shù)據(jù)庫中刪除選修記錄,某些課程新生尚未選修,那么關(guān)于這些課程的學(xué)分記載將無法保留。這是極不合理的。定義3.7若關(guān)系模式R1NF,并且每一個(gè)非主屬性都完全依賴于R的任一候選碼,則稱關(guān)系R是第二范式的,記為R2NF。將上述非2NF的關(guān)系SC1規(guī)范化為2NF關(guān)系,通過投影分解為以下兩個(gè)關(guān)系模式:選修2(學(xué)號,課程號,成績)課程(課程號,學(xué)分)7.3關(guān)系模式的規(guī)范化187.3關(guān)系模式的規(guī)范化7.3.3第三范式(3NF)
滿足第二范式的關(guān)系仍然可能出現(xiàn)問題,其原因是由于關(guān)系中存在傳遞依賴:定義3.9如果關(guān)系模式R(U,F(xiàn))中的所有非主屬性對任何碼都不存在傳遞依賴,則稱關(guān)系R是第三范式的,記為R3NF。通過投影分解將“學(xué)生2”分解成如下兩個(gè)關(guān)系后,則滿足3NF的要求。學(xué)生(學(xué)號,姓名,系號)系(系號,系名,系地址)由于部分依賴必然是傳遞依賴,所以如果一個(gè)關(guān)系模式不存在傳遞依賴,則必不存在部分依賴。換言之,滿足3NF的關(guān)系模式必然滿足2NF。對關(guān)系規(guī)范化的分解過程體現(xiàn)了“一事一地”的原則,即一個(gè)關(guān)系反映一個(gè)實(shí)體或一個(gè)聯(lián)系,不應(yīng)當(dāng)把幾樣?xùn)|西混放在一起?;娟P(guān)系模式切忌“大而全”,在若干個(gè)基本關(guān)系模式組成的關(guān)系模型的基礎(chǔ)上,“教學(xué)”關(guān)系模型包括如下4個(gè)關(guān)系模式:選修(學(xué)號,課程號,成績)課程(課程號,課程名,學(xué)分)學(xué)生(學(xué)號,姓名,系號)系(系號,系名,系地址)7.3關(guān)系模式的規(guī)范化197.3關(guān)系模式的規(guī)范化7.3.4BCNF范式3NF消除了大部分存儲異常。但3NF模式仍然可能發(fā)生存儲異常現(xiàn)象。有關(guān)系:倉庫保管(倉庫號,器件號,職工號,數(shù)量),表中數(shù)據(jù)如表3-5所示:表3-5倉庫保管倉庫號器件號職工號數(shù)量W1P1E120W1P2E315W1P3E217W1P4E110W1P5E320W1P6E215W1P7E317W2P4E412W2P1E520W2P2E415W2P3E417W2P6E515W3P2E620W3P3E615W3P4E7177.3關(guān)系模式的規(guī)范化倉庫號器件號職工號數(shù)量W1P1E1207.3關(guān)系模式的規(guī)范化7.3.4BCNF范式一個(gè)倉庫有多個(gè)職工;一個(gè)職工僅在一個(gè)倉庫工作;每個(gè)倉庫里一種器件由專人負(fù)責(zé),但一個(gè)人可以管理幾種器件。根據(jù)語義可以分析出以下函數(shù)依賴:(倉庫號,器件號)→數(shù)量(倉庫號,器件號)→職工號職工號→倉庫號(職工號,器件號)→數(shù)量該關(guān)系模式屬于3NF。如果新職工被分配到倉庫工作,處于實(shí)習(xí)階段,缺少碼的一部分“器件號”而無法插入到關(guān)系中。要消除這些異常,提出更高的要求BCNF范式。定義3.10如果關(guān)系模式R(U,F(xiàn))的所有屬性都不傳遞依賴于R的任何候選碼,那么稱關(guān)系R是屬于BCNF的,記為RBCNF。與其等價(jià)的定義是:對于關(guān)系模式R,如果每個(gè)因素都包含碼(而不是被碼所包含),則R是BCNF的關(guān)系模式。將倉庫保管(倉庫號,器件號,職工號,數(shù)量)關(guān)系模式分解成工作和保管兩個(gè)關(guān)系模式,則符合BCNF的要求。保管(職工號,器件號,數(shù)量) 其主碼是:(職工號,器件號)工作(職工號,倉庫號) 其主碼是:職工號分解后的兩個(gè)關(guān)系可以通過自然聯(lián)系恢復(fù)原來的關(guān)系。這種分解具有無損聯(lián)接性。判定無損分解的法則,即無損分解的充分必要條件是:R1∩R2→R1-R2或R1∩R2→R2-R17.3關(guān)系模式的規(guī)范化217.3關(guān)系模式的規(guī)范化7.3.5多值函數(shù)依賴如果僅考慮函數(shù)依賴這一種數(shù)據(jù)依賴,屬于BCNF的關(guān)系模式已經(jīng)很完美了。但如果考慮其他數(shù)據(jù)依賴,例如多值依賴,屬于BCNF的關(guān)系模式仍然存在問題,不能算是一個(gè)完美的關(guān)系模式。例1設(shè)學(xué)校中某一門課程由多個(gè)教師講授,他們使用一套相同的參考書??梢杂靡粋€(gè)關(guān)系教學(xué)2(課程,教師,參考書),該關(guān)系如圖所示。數(shù)學(xué)鄧軍陳斯數(shù)學(xué)分析高等代數(shù)微分方程物理李平王強(qiáng)劉明普通物理光學(xué)原理……7.3關(guān)系模式的規(guī)范化數(shù)學(xué)鄧軍數(shù)學(xué)分析物理李平普通物理223.3關(guān)系模式的規(guī)范化3.3.5多值函數(shù)依賴圖3-2課程-教師-參考書之間的關(guān)系該關(guān)系可用二維表表示,如表3-6所示。表3-6教學(xué)2課程教師參考書數(shù)學(xué)數(shù)學(xué)數(shù)學(xué)數(shù)學(xué)數(shù)學(xué)數(shù)學(xué)物理物理物理物理物理物理……鄧軍鄧軍鄧軍陳斯陳斯陳斯李平李平王強(qiáng)王強(qiáng)劉明劉明……數(shù)學(xué)分析高等代數(shù)微分方程數(shù)學(xué)分析高等代數(shù)微分方程普通物理光學(xué)原理普通物理光學(xué)原理普通物理光學(xué)原理……3.3關(guān)系模式的規(guī)范化課程教師參考書數(shù)學(xué)鄧軍數(shù)學(xué)分析237.3關(guān)系模式的規(guī)范化7.3.5多值函數(shù)依賴“教學(xué)2”模式中存在一些問題:(1)數(shù)據(jù)冗余大。每一門課程的參考書是固定的,但在“教學(xué)2”關(guān)系中,有多少名任課教師,參考書就要存儲多少次,造成大量的數(shù)據(jù)冗余。(2)插入操作復(fù)雜。當(dāng)某一課程增加一名任課教師時(shí),該課程有多少本參考書,就必須插入多少個(gè)元組。(3)刪除操作復(fù)雜。某一門課要去掉一本參考書,該課程有多少名教師,就必須刪除多少個(gè)元組。(4)修改操作復(fù)雜。某一門課要修改一本參考書,該課程有多少名教師,就必須刪除多少個(gè)元組。定義3.11設(shè)R(U)是屬性集U上的一個(gè)關(guān)系模式,X,Y和Z是U的子集,并且Z=U-X-Y,多值依賴X→→Y成立當(dāng)且僅當(dāng)對R的任一關(guān)系r,r在(X,Y)上的每個(gè)值對應(yīng)一組Y的值,這組值僅僅決定于X值而與Z值無關(guān)。若X→→Y,而Z=,則稱X→→Y為平凡的多值依賴。否則稱X→→Y為非平凡的多值依賴。在“教學(xué)2”關(guān)系中,每個(gè)(課程,參考書)上的值對應(yīng)一組值,而且這種對應(yīng)與“參考書”無關(guān)。例如(課程,參考書)上的一個(gè)值(物理,光學(xué)原理)對應(yīng)一組T值{李平,王強(qiáng),劉明},這組值僅僅決定于“課程”上的值,也就是說對于(課程,參考書)上的另一個(gè)值(物理,普通物理),它對應(yīng)一組T值仍是{李平,王強(qiáng),劉明},盡管這時(shí)“參考書”的值已經(jīng)改變了。因此“教師”多值依賴于“課程”,即課程→→教師。7.3關(guān)系模式的規(guī)范化247.3關(guān)系模式的規(guī)范化3.3.5多值函數(shù)依賴多值依賴具有下列性質(zhì):(1)對稱性:若X→→Y,則X→→Z,其中Z=U-X-Y。例如,在關(guān)系模式Teach(C,T,B)中,已經(jīng)知道C→→T,必然有C→→B。(2)傳遞性:若X→→Y,Y→→Z,則X→→Y∪Z。(3)函數(shù)依賴可以看作是多值依賴的特殊情況。即若X→Y,則X→→Y。這是因?yàn)楫?dāng)X→Y時(shí),對X中的每一個(gè)值,Y都有一個(gè)確定的值與之對應(yīng),所以X→→Y。(4)若X→→Y,X→→Z,則X→→Y∪Z。(5)若X→→Y,X→→Z,則X→→Y∩Z。(6)若X→→Y,X→→Z,則X→→Y-Z,X→→Z-Y。(7)多值依賴的有效性與屬性集的范圍有關(guān)。即如果X→→Y在U上成立,則在W(XYWU)上一定成立;但X→→Y在W(WU)上成立,在U上并不一定成立。(7)若多值依賴X→→Y在R(U)上成立,對于Y
Y,并不一定有X→→Y成立。但是如果函數(shù)依賴X→Y在R上成立,則對于任何Y
Y均有XY。7.3關(guān)系模式的規(guī)范化257.3關(guān)系模式的規(guī)范化7.3.6第四范式(4NF)定義3.12關(guān)系模式R(U,F(xiàn))1NF,如果對于R的每個(gè)平凡多值依賴X→→Y(Y不是X的子集),X都含有候選碼,則R4NF。4NF就是限制關(guān)系模式的屬性之間不允許有非平凡且非函數(shù)依賴的多值依賴。因?yàn)楦鶕?jù)定義,對于每一個(gè)非平凡的多值依賴X→→Y,X都含有候選碼,于是當(dāng)然X→Y,所以4NF所允許的非平凡多值依賴實(shí)際上是函數(shù)依賴。顯然,如果一個(gè)關(guān)系模式是4NF,則必滿足BCNF。7.3關(guān)系模式的規(guī)范化263.3關(guān)系模式的規(guī)范化3.3.6第四范式(4NF)前面討論過的關(guān)系模式“教學(xué)2”中存在非平凡的多值依賴課程→→教師,且“課程”不是候選碼,因此“教學(xué)”不屬于4NF。這正是它存在數(shù)據(jù)冗余大、插入和刪除操作復(fù)雜等弊病的根源??梢杂猛队胺纸夥ò选敖虒W(xué)2”分解為如下兩個(gè)4NF關(guān)系模式以減少數(shù)據(jù)冗余。授課(課程,教師)資料(課程,參考書)“授課”中雖然有課程→→教師,但這是平凡多值依賴,即“授課”中已不存在既非平凡也非函數(shù)依賴的多值依賴。所以“授課”屬于4NF。同理,“資料”也屬于4NF。分解后,“教學(xué)2”關(guān)系中的幾個(gè)問題可以得到解決。(1)參考書只需要在“資料”關(guān)系中存儲一次。(2)當(dāng)某一課程增加一名任課教師時(shí),只需要在“授課”關(guān)系中增加一個(gè)元組。(3)某一門課要去掉一本參考書,只需要在“資料”關(guān)系中刪除一個(gè)相應(yīng)的元組。3.3關(guān)系模式的規(guī)范化277.3關(guān)系模式的規(guī)范化7.3.7關(guān)系模式小結(jié)一個(gè)低一級范式的關(guān)系模式,通過模式分解可以轉(zhuǎn)換為若干個(gè)高一級范式的關(guān)系模式集合,這種過程就叫關(guān)系模式的規(guī)范化。1.關(guān)系模式規(guī)范化的步驟1NF↓消除非主屬性對碼的部分函數(shù)依賴2NF↓消除非主屬性對碼的傳遞函數(shù)依賴3NF↓消除非主屬性對碼的部分傳遞函數(shù)依賴BCNF↓消除非平凡且非函數(shù)依賴的多值依賴4NF↓消除不是候選碼所蘊(yùn)含的連接依賴5NF7.3關(guān)系模式的規(guī)范化287.3關(guān)系模式的規(guī)范化2.關(guān)系模式的分解判斷一個(gè)分解是否與原關(guān)系模式等價(jià)可以有三種不同的標(biāo)準(zhǔn):(1)分解具有無損連接性。(2)分解要保持函數(shù)依賴。(3)分解既要保持函數(shù)依賴,又要具有無損連接性。如果一個(gè)分解具有無損連接性,則它能夠保證不丟失信息。如果一個(gè)分解保持了函數(shù)依賴,則它可以減輕或解決各種情況。分解具有無損連接性和分解保持函數(shù)依賴是兩個(gè)互相獨(dú)立的標(biāo)準(zhǔn)。具有無損連接性的分解不一定能夠保持函數(shù)依賴。同樣,保持函數(shù)依賴的分解也不一定具有無損連接性。規(guī)范化的理論提供了一套完整的模式分解算法,按照這套算法可以做到:(1)若要求分解具有無損連接性,則模式分解一定能夠達(dá)到4NF。(2)若要求分解保持函數(shù)依賴,則模式分解一定能夠達(dá)到3NF,但不一定能夠達(dá)到BCNF。(3)若要求分解既具有無損連接性,又保持函數(shù)依賴,則模式分解一定能夠達(dá)到3NF,但不一定能夠達(dá)到BCNF。7.3關(guān)系模式的規(guī)范化29演講完畢,謝謝觀看!演講完畢,謝謝觀看!30關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論本章學(xué)習(xí)目標(biāo)本章主要講解函數(shù)依賴和以函數(shù)為基礎(chǔ)的幾種關(guān)系范式。通過本章的學(xué)習(xí),讀者應(yīng)掌握以下內(nèi)容:函數(shù)依賴
關(guān)系范式1NF、2NF、3NF關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論317.1引言7.1.1討論范圍數(shù)據(jù)庫是一組相關(guān)數(shù)據(jù)的集合。它不僅包括數(shù)據(jù)本身,而且還包括數(shù)據(jù)之間的聯(lián)系,即數(shù)據(jù)模型。給出一組數(shù)據(jù),如何構(gòu)造一個(gè)適當(dāng)?shù)臄?shù)據(jù)模型,在關(guān)系數(shù)據(jù)庫中應(yīng)該組織成幾個(gè)關(guān)系模式,每個(gè)關(guān)系模式包括哪些屬性,這些都是數(shù)據(jù)庫邏輯設(shè)計(jì)要解決的問題。在具體數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)之前,尚未錄入實(shí)際數(shù)據(jù)時(shí),組建較好的數(shù)據(jù)模型是關(guān)系到整個(gè)系統(tǒng)運(yùn)行效率,甚至系統(tǒng)成敗的關(guān)鍵。在以關(guān)系模型為基礎(chǔ)的數(shù)據(jù)庫中,用關(guān)系來描述現(xiàn)實(shí)世界。關(guān)系具有概念單一性的特點(diǎn),一個(gè)關(guān)系既可以描述一個(gè)實(shí)體,也可以描述實(shí)體間的聯(lián)系。一個(gè)關(guān)系模型包括一組關(guān)系模式,各個(gè)關(guān)系不是完全孤立的。只有它們相互間存在關(guān)聯(lián),才能構(gòu)成一個(gè)模型。這些關(guān)系模式的全體定義構(gòu)成關(guān)系數(shù)據(jù)庫模式。關(guān)系模型有嚴(yán)格的理論基礎(chǔ),也是目前應(yīng)用最廣泛的數(shù)據(jù)模型,指導(dǎo)數(shù)據(jù)庫邏輯設(shè)計(jì)的是關(guān)系數(shù)據(jù)庫規(guī)范化理論。關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論主要包括三個(gè)方面的內(nèi)容:數(shù)據(jù)依賴、范式和模式設(shè)計(jì)方法。數(shù)據(jù)依賴起著核心的作用。我們重點(diǎn)討論函數(shù)依賴的概念,然后再介紹模式分解的標(biāo)準(zhǔn),即范式,為數(shù)據(jù)庫的設(shè)計(jì)準(zhǔn)備一定的基本理論基礎(chǔ)。這里力求以大家都熟悉的實(shí)例說明問題。7.1引言327.1引言7.1.2存儲異常問題有“教學(xué)”關(guān)系模式:教學(xué)(教師號,教師姓名,職稱,教師地址,系號,系名稱,系地址,課程號,課程名,教學(xué)水平,學(xué)分)。
表7-1“教學(xué)”關(guān)系教師號教師姓名職稱教師地址系號系名稱系地址課程號課程名教學(xué)
水平學(xué)分T1MAPRFA1D1DEPT1L1C1COMPUGOOD3T1MAPRFA1D1DEPT1L1C2PROGREXCEL3T1MAPRFA1D1DEPT1L1C3DBOK4T2LIAPA2D1DEPT1L1C3DBGOOD4T2LIAPA2D1DEPT1L1C4OSGOOD4T3CHENPRFA3D1DEPT1L1C4OSOK2T3CHENPRFA3D1DEPT1L1C1COMPUOK3T3CHENPRFA3D1DEPT1L1C5DSTRUEXCEL3T4ZHOUAPA4D2DEPT2L2C6MATHGOOD57.1引言教師號教師職稱教師系號系名稱系地址課程號課程名337.1引言7.1.2存儲異常問題主碼是(教師號,課程號),但該關(guān)系在使用過程中存在以下幾個(gè)問題:(1)數(shù)據(jù)冗余。每當(dāng)教師開設(shè)一門課程時(shí),該教師的職稱、地址等信息就重復(fù)存儲一次。一般一個(gè)系有很多教師,每位教師都開設(shè)多門課,每位教師的職稱、地址要多次重復(fù)存儲,這樣會使關(guān)系中的數(shù)據(jù)冗余度很大。(2)更新異常。由于數(shù)據(jù)的重復(fù)存儲,會給更新帶來麻煩。如果一位任3門課的教師改變了地址,3個(gè)元組的地址都要更新,一旦一個(gè)元組的地址未修改就會導(dǎo)致數(shù)據(jù)不一致。如果某個(gè)系改變辦公地址,所要修改的數(shù)據(jù)量會更大。(3)插入異常。如果學(xué)校新調(diào)入一個(gè)教師,暫時(shí)未主講任何課程。由于缺少主碼的一部分,而主碼不允許出現(xiàn)空值,新教師的相關(guān)信息就不能插入到此關(guān)系中去。只有當(dāng)他開設(shè)了課程之后才能插入,這是不合理的。(4)刪除異常。與插入異常相反,如果某些教師致力于科研,不擔(dān)任教學(xué)任務(wù)了,就要從當(dāng)前數(shù)據(jù)庫中刪除有關(guān)記錄。那么關(guān)于這些教師的其他信息將無法記載,這也是極不合理的。7.1引言347.1引言7.1.2存儲異常問題用下面4個(gè)關(guān)系模式代替原來的一個(gè)關(guān)系模式,上述4個(gè)方面的問題就基本解決了。教師(教師號,教師姓名,職稱,教師地址,系號)系(系號,系名稱,系地址)課程(課程號,課程名,學(xué)分)選修(教師號,課程號,教學(xué)水平)新關(guān)系模型包括4個(gè)關(guān)系模式,“教師”和“系”通過“教師”中的外碼“系號”相聯(lián)系;“教師”與“課程”之間多對多的聯(lián)系可以通過“選修”中的外碼(教師號,課程號)相聯(lián)系,需要時(shí)再進(jìn)行自然聯(lián)接,則恢復(fù)了原來的關(guān)系。但是將“教學(xué)”分解成“教師”、“系”、“課程”、“選修”四個(gè)模式是否最佳,并不是絕對的。例如,要頻繁地查詢講授某門課程教師的情況,就要對這兩個(gè)關(guān)系做聯(lián)接操作,而聯(lián)接是以機(jī)時(shí)為代價(jià)的。在原來的關(guān)系模式中則可以直接查到。到底哪個(gè)關(guān)系模型更好,要根據(jù)數(shù)據(jù)庫的規(guī)模、數(shù)據(jù)的共享程度和應(yīng)用需求來權(quán)衡。7.1引言357.2函數(shù)依賴7.2.1屬性之間的聯(lián)系實(shí)體內(nèi)部各屬性間的聯(lián)系分為3類:一對一、一對多和多對多。設(shè)圖書管理關(guān)系數(shù)據(jù)模型包括以下3個(gè)關(guān)系模式:圖書(總編號,分類號,書名,作者,出版單位,單價(jià))讀者(借書證號,姓名,性別,單位,職稱,地址)借閱(借書證號,總編號,借閱日期,備注)1.一對一聯(lián)系在讀者關(guān)系中,借書證號是惟一的。設(shè)X、Y為關(guān)系中的屬性或?qū)傩越M,它們的所有可能取值組成兩個(gè)集合。為簡便起見,也叫X、Y,如果對于X中的任一具體值,Y中至多有一個(gè)值與之對應(yīng),并且對于Y中的任一具體值,X中也至多有一個(gè)值與之對應(yīng),稱X、Y這兩個(gè)屬性之間是一對一聯(lián)系。
7.2函數(shù)依賴367.2函數(shù)依賴7.2.1屬性之間的聯(lián)系2.一對多聯(lián)系在圖書關(guān)系中,一本書有若干副本,它們有相同的書名、作者、分類號等,但每本書有惟一的總編號。書名與總編號之間是1:m,即同一個(gè)書名有多個(gè)總編號與之對應(yīng)。如果屬性值集合X中的任一具體值,至多與Y中的一個(gè)值對應(yīng),而Y中的任一具體值卻可以和X中的多個(gè)值相對應(yīng),則稱兩個(gè)屬性間從X到Y(jié)為m:1的聯(lián)系?;驈腨到X是1:m的聯(lián)系。3.多對多聯(lián)系在借閱關(guān)系中,一個(gè)讀者可以借閱多本書,即同一個(gè)借書證號有若干個(gè)圖書總編號與之對應(yīng)。由總編號標(biāo)識的一本書在不同日期可以被不同的讀者借閱。又如在選修關(guān)系中一個(gè)學(xué)生可以選修幾門課,同一門課有多個(gè)學(xué)生同時(shí)選修。在X、Y兩個(gè)屬性值集中,如果任一個(gè)值都可以至多和另一個(gè)屬性集中的多個(gè)值對應(yīng),反之亦然,則稱屬性X和Y是m:n關(guān)系。顯然,3類聯(lián)系之間存在著包含關(guān)系,1:1是1:m的特例;1:m又是m:n的特例。關(guān)系中屬性值之間這種相互依賴又相互制約的聯(lián)系稱為數(shù)據(jù)依賴。數(shù)據(jù)依賴主要有兩種:函數(shù)依賴和多值依賴。7.2函數(shù)依賴377.2函數(shù)依賴7.2.2函數(shù)依賴1.函數(shù)依賴的概念定義7.1用U表示屬性集的全集{A1,A2,……,An},設(shè)R(U)是屬性集U上的關(guān)系模式,X和Y是U的子集。對于R(U)的所有具體關(guān)系r都滿足如下約束:對于X的每一個(gè)具體值,Y有惟一的具體值與之對應(yīng),則稱“X函數(shù)確定Y”或“Y函數(shù)依賴于X”,記作X→Y,X稱做決定因素。在關(guān)系模式R(U)中,對于U的子集X和Y,如果X→Y,但YX,則稱X→Y是非平凡依賴。若YX,則稱X→Y為平凡依賴。例1有關(guān)系工資(職工號,基本工資,獎(jiǎng)金),一個(gè)職工號惟一確定一個(gè)基本工資數(shù)額或一個(gè)獎(jiǎng)金額,即一個(gè)人不能拿兩種工資或獎(jiǎng)金,但幾個(gè)人的工資可能相同。具體數(shù)字如表7-2所示。表7-2“工資”表職工號基本工資獎(jiǎng)金051390500524205005327070054…390…70…7.2函數(shù)依賴職工號基本工資獎(jiǎng)金05139050052387.2函數(shù)依賴7.2.2函數(shù)依賴設(shè)屬性A是職工號,屬性B是基本工資,屬性C是獎(jiǎng)金,可以看出,每個(gè)A的值對應(yīng)一個(gè)B的值和一個(gè)C的值。因此,屬性B和C都函數(shù)依賴于屬性A。但反過來則不存在這種關(guān)系,如基本工資390對應(yīng)兩個(gè)職工號051和054。用符號表示為:A→B,A→C,B→\A,C→\A,B→\C。根據(jù)函數(shù)依賴的定義,可以找出下面規(guī)律:(1)在一個(gè)關(guān)系模式中,如果屬性X、Y有1:1聯(lián)系,則存在函數(shù)依賴X→Y、Y→X??捎涀鱔Y。(2)如果屬性X、Y是1:m的聯(lián)系,則存在函數(shù)依賴Y→X,但X→\Y。(3)如果屬性X、Y是n:m的聯(lián)系,則X與Y之間不存在任何函數(shù)依賴。必須注意,函數(shù)依賴是指關(guān)系R模式的所有元組均應(yīng)滿足的約束條件,而不是指關(guān)系模式R的某個(gè)或某些元組滿足的約束條件。當(dāng)關(guān)系中的元組增加或者更新后都不能破壞函數(shù)依賴。因此,必須根據(jù)語義來確定數(shù)據(jù)之間的函數(shù)依賴,而不能單憑某一時(shí)刻關(guān)系中的實(shí)際數(shù)據(jù)值來判斷。7.2函數(shù)依賴397.2函數(shù)依賴7.2.2函數(shù)依賴2.完全函數(shù)依賴與部分函數(shù)依賴定義7.2設(shè)X→Y是關(guān)系模式R(U)的一個(gè)函數(shù)依賴,如果存在X的真子集X,使得X→Y成立,則稱Y部分依賴于X,記作。否則稱Y完全依賴于X,記作。例2設(shè)有關(guān)系模式選課(學(xué)號,課程號,成績,學(xué)分)在“選課”關(guān)系中,由于一個(gè)學(xué)生可以選修多門課程,一門課程可有多個(gè)學(xué)生選修,因此“學(xué)號”或“課程號”都不能單獨(dú)確定“成績”?!俺煽儭敝荒苡蓪傩越M合(學(xué)號,課程號)來確定。“學(xué)分”可由“課程號”來確定,由此可知:(學(xué)號,課程號)成績(學(xué)號,課程號)學(xué)分3.傳遞依賴定義7.3在同一關(guān)系模式R(U)中,如果存在非平凡函數(shù)依賴X→Y,Y→Z,且Y→\X,則X→Z,即稱Z傳遞依賴于X。例3設(shè)關(guān)系模式學(xué)生(學(xué)號,姓名,系號,系名,系地址)。存在函數(shù)依賴:學(xué)號→系號,系號→\學(xué)號,系號→系地址。根據(jù)傳遞依賴的定義可知:學(xué)號→系地址實(shí)際上,部分依賴必然是傳遞依賴。在選修(學(xué)號,課程號,成績,學(xué)分)關(guān)系中:(學(xué)號,課程號)→課程號,課程號→學(xué)分,形成傳遞依賴(學(xué)號,課程號)→學(xué)分。7.2函數(shù)依賴407.2函數(shù)依賴7.2.4碼1.主碼、候選碼、外碼定義7.5關(guān)系模式R(U)中,K是U中的屬性或?qū)傩越M,如果KU,則稱K為R(U)的一個(gè)候選碼。若關(guān)系模式R(U)中有多個(gè)候選碼,可以選中其中的一個(gè)做為主碼。若K不是本關(guān)系的主碼,而是其他關(guān)系的主碼,則稱K為外碼。候選碼有兩個(gè)性質(zhì):(1)標(biāo)識的惟一性:對于R(U)中的每一個(gè)元組,K的值確定后,該元組就相應(yīng)地確定了。(2)無冗余性:當(dāng)K是屬性組的情況下,K的任何一部分都不能惟一標(biāo)識該元組。這是定義中完全依賴的意義。2.主屬性和非主屬性定義7.6包含在任意一個(gè)候選碼中的屬性,稱為主屬性。不包含在任何候選碼中的屬性稱為非主屬性。關(guān)系選修(學(xué)號,課程號,成績),(學(xué)號,課程號)是候選碼也是主碼?!皩W(xué)號”,“課程號”是主屬性,“成績”是非主屬性。
7.2函數(shù)依賴417.3關(guān)系模式的規(guī)范化7.3.1第一范式(INF)定義7.7在關(guān)系模式R中的每一個(gè)具體關(guān)系r中,如果每個(gè)屬性值都是不可再分的最小數(shù)據(jù)單位,則稱R是第一范式的關(guān)系,記為R1NF。不是1NF的關(guān)系稱為非規(guī)范化關(guān)系。數(shù)據(jù)庫理論研究的都是規(guī)范化關(guān)系,如何將普通的復(fù)式表格規(guī)范為關(guān)系呢?下面通過例子來說明。例1表7-3所示的數(shù)據(jù)不是1NF,因?yàn)椤半娫捥柎a”可以分為“辦公室電話”和“家庭電話”兩個(gè)屬性。請將表7-3規(guī)范成1NF。表7-3非規(guī)范化“職工”表職工號姓名電話號碼1001李明5362633(O)、5366677(H)1002張敏50012771003劉大維5677901(O)、5679971(H)1004章良弟65432101005何為民47765327.3關(guān)系模式的規(guī)范化職工號姓名電話號碼1001李明53427.3關(guān)系模式的規(guī)范化7.3.1第一范式(INF)將上表規(guī)范成1NF可以有三種方法。第一種方法:重復(fù)存儲職工號和姓名,如表7-3(a)所示。在這樣的關(guān)系中,主碼只能是電話號碼。如果單獨(dú)查閱此關(guān)系問題不大,若通過職工號與其他關(guān)系聯(lián)接,由于職工號不是主碼,則可能造成大量冗余。表7-3(a)規(guī)范化“職工1”表職工號姓名電話號碼1001李明53626331001李明53666771002張敏50012771003劉大維56779011003劉大維56799711004章良弟65432101005何為民47765327.3關(guān)系模式的規(guī)范化職工號姓名電話號碼1001李明53437.3關(guān)系模式的規(guī)范化7.3.1第一范式(INF)第二種方法:保留職工號的主碼地位,把電話號碼拆分成單位電話和住宅電話兩個(gè)屬性,如表7-7(b)所示。這樣會使只有一個(gè)電話號碼的元組出現(xiàn)空屬性值,由于電話號碼不是候選碼,允許有空值。表7-7(b)規(guī)范化“職工2”表職工號姓名單位電話住宅電話1001李明536263353666771002張敏50012771003劉大維567790156799711004章良弟65432101005何為民47765327.3關(guān)系模式的規(guī)范化職工號姓名單位電話住宅電話1001447.3關(guān)系模式的規(guī)范化7.3.1第一范式(INF)第三種方法:保留職工號的主碼地位,維持原模式不變,但強(qiáng)制每個(gè)元組只能錄入一個(gè)電話號碼,如表7-3(c)所示。表7-3(c)規(guī)范化“職工3”表職工號姓名電話號碼1001李明53626331002張敏50012771003劉大維56779011004章良弟65432101005何為民47765327.3關(guān)系模式的規(guī)范化職工號姓名電話號碼1001李明53457.3關(guān)系模式的規(guī)范化7.3.2第二范式(2NF)滿足第一范式的關(guān)系仍有可能出現(xiàn)問題。例2設(shè)有關(guān)系模式選修(學(xué)號,課程號,成績,學(xué)分)存在函數(shù)依賴:(學(xué)號,課程號)→成績,(學(xué)號,課程號)→學(xué)分,主碼是(學(xué)號,課程號)。如表3-4所示。7.3關(guān)系模式的規(guī)范化467.3關(guān)系模式的規(guī)范化7.3.2第二范式(2NF)滿足第一范式的關(guān)系仍有可能出現(xiàn)問題。例2設(shè)有關(guān)系模式選修(學(xué)號,課程號,成績,學(xué)分)存在函數(shù)依賴:(學(xué)號,課程號)→成績,(學(xué)號,課程號)→學(xué)分,主碼是(學(xué)號,課程號)。如表3-4所示。表3-4選修學(xué)號課程號成績學(xué)分S1C1904S1C2753S1C3702S2C2703S2C3752S2C4953S3C27537.3關(guān)系模式的規(guī)范化學(xué)號課程號成績學(xué)分S1C1904S477.3關(guān)系模式的規(guī)范化7.3.2第二范式(2NF)該關(guān)系模式在實(shí)際應(yīng)用中會再現(xiàn)下列問題:(1)數(shù)據(jù)冗余。每當(dāng)一名學(xué)生選修一門課程時(shí),該課程的“學(xué)分”就重復(fù)存儲一次。假設(shè)同一門課被40名學(xué)生選修,學(xué)分就重復(fù)40次。(2)更新異常。如果調(diào)整了課程的學(xué)分,每個(gè)相應(yīng)元組的“學(xué)分”值都必須更新。這不僅增加了更新代價(jià),更嚴(yán)重的是有潛在的數(shù)據(jù)不一致性。(3)插入異常。如果學(xué)校計(jì)劃增開新課,應(yīng)當(dāng)把新課的課程號及學(xué)分?jǐn)?shù)插入到“選修”中。但是由于缺少主碼的一部分,將不能插入。(4)刪除異常。如果學(xué)生已經(jīng)結(jié)業(yè),從當(dāng)前數(shù)據(jù)庫中刪除選修記錄,某些課程新生尚未選修,那么關(guān)于這些課程的學(xué)分記載將無法保留。這是極不合理的。定義3.7若關(guān)系模式R1NF,并且每一個(gè)非主屬性都完全依賴于R的任一候選碼,則稱關(guān)系R是第二范式的,記為R2NF。將上述非2NF的關(guān)系SC1規(guī)范化為2NF關(guān)系,通過投影分解為以下兩個(gè)關(guān)系模式:選修2(學(xué)號,課程號,成績)課程(課程號,學(xué)分)7.3關(guān)系模式的規(guī)范化487.3關(guān)系模式的規(guī)范化7.3.3第三范式(3NF)
滿足第二范式的關(guān)系仍然可能出現(xiàn)問題,其原因是由于關(guān)系中存在傳遞依賴:定義3.9如果關(guān)系模式R(U,F(xiàn))中的所有非主屬性對任何碼都不存在傳遞依賴,則稱關(guān)系R是第三范式的,記為R3NF。通過投影分解將“學(xué)生2”分解成如下兩個(gè)關(guān)系后,則滿足3NF的要求。學(xué)生(學(xué)號,姓名,系號)系(系號,系名,系地址)由于部分依賴必然是傳遞依賴,所以如果一個(gè)關(guān)系模式不存在傳遞依賴,則必不存在部分依賴。換言之,滿足3NF的關(guān)系模式必然滿足2NF。對關(guān)系規(guī)范化的分解過程體現(xiàn)了“一事一地”的原則,即一個(gè)關(guān)系反映一個(gè)實(shí)體或一個(gè)聯(lián)系,不應(yīng)當(dāng)把幾樣?xùn)|西混放在一起?;娟P(guān)系模式切忌“大而全”,在若干個(gè)基本關(guān)系模式組成的關(guān)系模型的基礎(chǔ)上,“教學(xué)”關(guān)系模型包括如下4個(gè)關(guān)系模式:選修(學(xué)號,課程號,成績)課程(課程號,課程名,學(xué)分)學(xué)生(學(xué)號,姓名,系號)系(系號,系名,系地址)7.3關(guān)系模式的規(guī)范化497.3關(guān)系模式的規(guī)范化7.3.4BCNF范式3NF消除了大部分存儲異常。但3NF模式仍然可能發(fā)生存儲異?,F(xiàn)象。有關(guān)系:倉庫保管(倉庫號,器件號,職工號,數(shù)量),表中數(shù)據(jù)如表3-5所示:表3-5倉庫保管倉庫號器件號職工號數(shù)量W1P1E120W1P2E315W1P3E217W1P4E110W1P5E320W1P6E215W1P7E317W2P4E412W2P1E520W2P2E415W2P3E417W2P6E515W3P2E620W3P3E615W3P4E7177.3關(guān)系模式的規(guī)范化倉庫號器件號職工號數(shù)量W1P1E1507.3關(guān)系模式的規(guī)范化7.3.4BCNF范式一個(gè)倉庫有多個(gè)職工;一個(gè)職工僅在一個(gè)倉庫工作;每個(gè)倉庫里一種器件由專人負(fù)責(zé),但一個(gè)人可以管理幾種器件。根據(jù)語義可以分析出以下函數(shù)依賴:(倉庫號,器件號)→數(shù)量(倉庫號,器件號)→職工號職工號→倉庫號(職工號,器件號)→數(shù)量該關(guān)系模式屬于3NF。如果新職工被分配到倉庫工作,處于實(shí)習(xí)階段,缺少碼的一部分“器件號”而無法插入到關(guān)系中。要消除這些異常,提出更高的要求BCNF范式。定義3.10如果關(guān)系模式R(U,F(xiàn))的所有屬性都不傳遞依賴于R的任何候選碼,那么稱關(guān)系R是屬于BCNF的,記為RBCNF。與其等價(jià)的定義是:對于關(guān)系模式R,如果每個(gè)因素都包含碼(而不是被碼所包含),則R是BCNF的關(guān)系模式。將倉庫保管(倉庫號,器件號,職工號,數(shù)量)關(guān)系模式分解成工作和保管兩個(gè)關(guān)系模式,則符合BCNF的要求。保管(職工號,器件號,數(shù)量) 其主碼是:(職工號,器件號)工作(職工號,倉庫號) 其主碼是:職工號分解后的兩個(gè)關(guān)系可以通過自然聯(lián)系恢復(fù)原來的關(guān)系。這種分解具有無損聯(lián)接性。判定無損分解的法則,即無損分解的充分必要條件是:R1∩R2→R1-R2或R1∩R2→R2-R17.3關(guān)系模式的規(guī)范化517.3關(guān)系模式的規(guī)范化7.3.5多值函數(shù)依賴如果僅考慮函數(shù)依賴這一種數(shù)據(jù)依賴,屬于BCNF的關(guān)系模式已經(jīng)很完美了。但如果考慮其他數(shù)據(jù)依賴,例如多值依賴,屬于BCNF的關(guān)系模式仍然存在問題,不能算是一個(gè)完美的關(guān)系模式。例1設(shè)學(xué)校中某一門課程由多個(gè)教師講授,他們使用一套相同的參考書??梢杂靡粋€(gè)關(guān)系教學(xué)2(課程,教師,參考書),該關(guān)系如圖所示。數(shù)學(xué)鄧軍陳斯數(shù)學(xué)分析高等代數(shù)微分方程物理李平王強(qiáng)劉明普通物理光學(xué)原理……7.3關(guān)系模式的規(guī)范化數(shù)學(xué)鄧軍數(shù)學(xué)分析物理李平普通物理523.3關(guān)系模式的規(guī)范化3.3.5多值函數(shù)依賴圖3-2課程-教師-參考書之間的關(guān)系該關(guān)系可用二維表表示,如表3-6所示。表3-6教學(xué)2課程教師參考書數(shù)學(xué)數(shù)學(xué)數(shù)學(xué)數(shù)學(xué)數(shù)學(xué)數(shù)學(xué)物理物理物理物理物理物理……鄧軍鄧軍鄧軍陳斯陳斯陳斯李平李平王強(qiáng)王強(qiáng)劉明劉明……數(shù)學(xué)分析高等代數(shù)微分方程數(shù)學(xué)分析高等代數(shù)微分方程普通物理光學(xué)原理普通物理光學(xué)原理普通物理光學(xué)原理……3.3關(guān)系模式的規(guī)范化課程教師參考書數(shù)學(xué)鄧軍數(shù)學(xué)分析537.3關(guān)系模式的規(guī)范化7.3.5多值函數(shù)依賴“教學(xué)2”模式中存在一些問題:(1)數(shù)據(jù)冗余大。每一門課程的參考書是固定的,但在“教學(xué)2”關(guān)系中,有多少名任課教師,參考書就要存儲多少次,造成大量的數(shù)據(jù)冗余。(2)插入操作復(fù)雜。當(dāng)某一課程增加一名任課教師時(shí),該課程有多少本參考書,就必須插入多少個(gè)元組。(3)刪除操作復(fù)雜。某一門課要去掉一本參考書,該課程有多少名教師,就必須刪除多少個(gè)元組。(4)修改操作復(fù)雜。某一門課要修改一本參考書,該課程有多少名教師,就必須刪除多少個(gè)元組。定義3.11設(shè)R(U)是屬性集U上的一個(gè)關(guān)系模式,X,Y和Z是U的子集,并且Z=U-X-Y,多值依賴X→→Y成立當(dāng)且僅
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年建筑工程公司與施工方分包合同
- 2024年慶典花卉租賃合同
- 2024年度環(huán)保設(shè)備生產(chǎn)與安裝合同
- 2024年企業(yè)間關(guān)于虛擬現(xiàn)實(shí)技術(shù)研發(fā)合同
- 2024年度BIM模型能耗分析與優(yōu)化服務(wù)合同
- 2024國有林業(yè)企業(yè)與農(nóng)村集體組織土地承包合同
- 2024年家庭遺產(chǎn)分配協(xié)議
- 2024年度金融科技合作協(xié)議
- 2024酒店布草采購合同
- 2024年度離婚財(cái)產(chǎn)分配合同:涉及三個(gè)未成年子女的撫養(yǎng)權(quán)
- 油煙清洗報(bào)告【范本模板】
- MOOC 中醫(yī)體質(zhì)學(xué)-新鄉(xiāng)醫(yī)學(xué)院 中國大學(xué)慕課答案
- 【課件】丹納赫DBS-問題解決培訓(xùn)
- 浙江省寧波市小升初數(shù)學(xué)真題重組卷
- 家庭成員我照顧(第一課時(shí)) 勞動技術(shù)七年級下冊
- 火電廠信息化建設(shè)規(guī)劃方案
- 技改項(xiàng)目報(bào)告
- “中信泰富”事件的反思
- 2024年醫(yī)學(xué)高級職稱-皮膚與性病學(xué)(醫(yī)學(xué)高級)筆試歷年真題薈萃含答案
- 工業(yè)機(jī)器人系統(tǒng)運(yùn)維知識競賽題庫及答案(100題)
- 智慧農(nóng)貿(mào)市場解決方案
評論
0/150
提交評論