版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第8章關(guān)系標(biāo)準(zhǔn)化理論與數(shù)據(jù)庫設(shè)計(jì)8.1函數(shù)依賴8.2標(biāo)準(zhǔn)化和范式8.3數(shù)據(jù)庫設(shè)計(jì)概述 8.4需求分析8.5概念結(jié)構(gòu)設(shè)計(jì)8.6邏輯結(jié)構(gòu)設(shè)計(jì)8.7物理結(jié)構(gòu)設(shè)計(jì)8.8數(shù)據(jù)庫的實(shí)施和維護(hù)習(xí)題8.1函數(shù)依賴建立一個(gè)關(guān)系數(shù)據(jù)庫系統(tǒng),首先要考慮怎樣建立數(shù)據(jù)模式,即應(yīng)該構(gòu)造幾個(gè)關(guān)系模式,每個(gè)關(guān)系模式中需要包含哪些屬性等,這是數(shù)據(jù)庫設(shè)計(jì)的問題。關(guān)系標(biāo)準(zhǔn)化主要討論的就是建立關(guān)系模式的指導(dǎo)原那么,所以有人把標(biāo)準(zhǔn)化理論稱為設(shè)計(jì)數(shù)據(jù)庫的理論。數(shù)據(jù)依賴是通過一個(gè)關(guān)系中屬性間值的依賴與否表達(dá)出來的數(shù)據(jù)間的相互關(guān)系,它是現(xiàn)實(shí)世界屬性間相互聯(lián)系的抽象,是數(shù)據(jù)內(nèi)在的性質(zhì),是語義的表達(dá)?,F(xiàn)在人們已經(jīng)提出了許多種類型的數(shù)據(jù)依賴,其中最重要的是函數(shù)依賴(FD,F(xiàn)unctionalDependency)和多值依賴(MVD,MultivaluedDependency)。這里只討論函數(shù)依賴,有關(guān)多值依賴的概念,有興趣的讀者可以參閱有關(guān)書籍。函數(shù)依賴極為普遍地存在于現(xiàn)實(shí)生活中。比方描述一個(gè)學(xué)生的關(guān)系,可以有學(xué)號(SNO),姓名(SNAME)和系名(SDEPT)等幾個(gè)屬性。由于一個(gè)學(xué)號只對應(yīng)一個(gè)學(xué)生,一個(gè)學(xué)生只在一個(gè)系學(xué)習(xí),因而當(dāng)“學(xué)號〞值確定以后,姓名和該生所在系的值也就被惟一確實(shí)定了。就象自變量x確定以后,相應(yīng)的函數(shù)值f(x)也就惟一地確定了一樣,稱SNO函數(shù)決定SNAME和SDEPT,或者說SNAME和SDEPT函數(shù)依賴于SNO,記為SNO→SNAME SNO→SDEPT用形式化的方式表示,關(guān)系模式R可以記為R<U,F(xiàn)>其中U表示一組屬性的集合,F(xiàn)表示屬性組U上的一組數(shù)據(jù)依賴集合。對于上述的學(xué)生關(guān)系,可有U={SNO,SNAME,SDEPT}F={SNO→SNAME,SNO→SDEPT}對于關(guān)系模式R<U,F(xiàn)>,當(dāng)且僅當(dāng)U上的一個(gè)關(guān)系r滿足F時(shí),稱r為關(guān)系模式R<U,F(xiàn)>的一個(gè)關(guān)系。定義8-1設(shè)R(U)是屬性集U上的關(guān)系模式,X,Y是U的子集。假設(shè)對于R(U)的任意一個(gè)可能的關(guān)系r,r中不可能存在兩個(gè)元組在X上的屬性值相等,而在Y上的屬性值不等,那么稱X函數(shù)確定Y或Y函數(shù)依賴于X,記為X→Y。注意,函數(shù)依賴不是指關(guān)系模式R的某個(gè)或某些關(guān)系滿足的約束條件,而是指R的一切關(guān)系均需要滿足的約束條件。函數(shù)依賴是語義范疇的概念,我們只能根據(jù)語義來確定函數(shù)依賴。例如在沒有同名的情況下,NAME→AGE,而在有同名的情況下,這個(gè)函數(shù)依賴就不成立了。下面介紹一些術(shù)語和記號:①假設(shè)X→Y,那么X叫做決定因素。②假設(shè)X→Y,Y→X,那么記為X←→Y。③假設(shè)Y不函數(shù)依賴于X,那么記為XY。④假設(shè)X→Y,但YX,那么稱X→Y是平凡的函數(shù)依賴。⑤假設(shè)X→Y,但YX,那么稱X→Y是非平凡的函數(shù)依賴。假設(shè)不特別聲明,下面總是指非平凡的函數(shù)依賴。函數(shù)依賴可分為三類:完全函數(shù)依賴,局部函數(shù)依賴和傳遞函數(shù)依賴。這三類函數(shù)依賴定義如下:(1)完全函數(shù)依賴。定義8-2在R(U)中,如果X→Y,并且對于X的任何一個(gè)真子集X'?,都有X'Y,那么稱Y對X完全函數(shù)依賴,記為XY。可簡寫為→。例8-1在關(guān)系S(SNO,SNAME,SDEPT)中,SNO→SNAME,SNO→SDEPT。用圖解表示如圖8-1所示。假設(shè)關(guān)系中沒有同姓名的學(xué)生,那么用SNO可以惟一確定SNAME,用SNAME也可惟一確定SNO,形成了兩者的相互依賴關(guān)系,可以記作SNO←→SNAME。圖8-1(2)局部函數(shù)依賴。定義8-3在R(U)中,如果X→Y,并且對于X的某個(gè)真子集X',有X'→Y,那么稱Y對X局部函數(shù)依賴,記為XY。只有當(dāng)X為屬性組時(shí),才有可能發(fā)生局部函數(shù)依賴的情況。因?yàn)槿绻鸛為單個(gè)屬性,其子集X'就是X本身。例8-2假設(shè)在關(guān)系SC(SNO,CNO,GRADE)中增加一個(gè)屬性CLASS(學(xué)生所在班級),那么在新關(guān)系SCNEW(SNO,CNO,GRADE,CLASS)中有(SNO,CNO)→GRADESNO→CLASS(SNO,CNO)CLASS用圖解表示,如圖8-2所示。請讀者注意圖中兩個(gè)箭頭的不同出發(fā)點(diǎn)。圖8-2(3)傳遞函數(shù)依賴。定義8-4在R(U)中,如果X→Y,(YX),Y→Z,但YX,那么稱Z對X傳遞函數(shù)依賴,記為XZ。請注意上述定義中的條件YX。如果不加上這一限制,當(dāng)X→Y時(shí)允許Y→X,那么X←→Y,而在X←→Y的條件下,Y→Z就等于X→Z,這樣X就直接決定Z,而不是通過Y的“傳遞〞決定Z了。例8-3在關(guān)系S(SNO,SNAME,SDEPT)中,增加一個(gè)屬性SDMN(系主任),那么在新關(guān)系 SNEW(SNO,SNAME,SDEPT,SDMN)中有 SNO→SNAME,SNO→SDEPT又因?yàn)? SDEPT→SDMN所以 SNOSDMN圖8-3是它的圖解,圖中的虛線箭頭表示傳遞依賴。圖8-38.2標(biāo)準(zhǔn)化和范式8.2.1引例在定義各種范式之前,先看一個(gè)例子。例8-4假設(shè)現(xiàn)有學(xué)生關(guān)系S(SNO,SN,CLS,MON,CNO,GRD),其中SNO是學(xué)號,SN是學(xué)生姓名,CLS是學(xué)生所在班級,MON是班主任,CNO是學(xué)生所選的課程號,GRD是學(xué)生選課的成績等級。圖8-4表示了這個(gè)關(guān)系的現(xiàn)有元組。不難看出,如果把這一關(guān)系付諸實(shí)用,會有較多的問題。例如:(1)插入異常。所謂異常,就是說“不好辦〞。例如當(dāng)某學(xué)生尚未選課前,雖然他的學(xué)號、姓名與班級,仍無法將他的信息插入關(guān)系S,這是因?yàn)镾的主碼是(SNO,CNO),CNO為“空〞值時(shí),插入是禁止的。(2)刪除異常。假定學(xué)生周明不再選修C1課程了,本應(yīng)刪去C1,但C1是主碼的一局部,要刪,必須將整個(gè)元組一起刪去,這樣,有關(guān)周明的其它信息就喪失了。假設(shè)想保存周明的其它信息,就只好不刪。(3)冗余量大。一個(gè)學(xué)生通常要選多門課,SNO,SN,CLS與MON都重復(fù)屢次,占用存儲空間多。圖8-4關(guān)系S(4)修改復(fù)雜。如果學(xué)生更改了姓名,他的所有元組都要修改SN。又如某班改換了班主任,屬于該班的學(xué)生都要修改MON的內(nèi)容。一不小心就可能此改彼漏,破壞數(shù)據(jù)的完整性(即造成數(shù)據(jù)不一致)。產(chǎn)生上述問題的原因,直觀的說,是因?yàn)殛P(guān)系中“包羅萬象〞,內(nèi)容太雜了。附屬性間函數(shù)依賴的關(guān)系看,由于關(guān)系中除完全函數(shù)依賴外,還存在著局部函數(shù)依賴和傳遞函數(shù)依賴。下面從消除后兩種函數(shù)依賴關(guān)系入手,嘗試解決上述問題。(1)將原關(guān)系分解成兩個(gè)新關(guān)系,以消除SN,CLS和MON對主碼(SNO,CNO)的局部依賴。新產(chǎn)生的關(guān)系是S1(SNO,SN,CLS,MON)SC(SNO,CNO,GRD)圖8-5是從圖8-4中導(dǎo)出的兩個(gè)新關(guān)系的內(nèi)容。圖8-5(a)S1;(b)SC與原關(guān)系比較,消除了許多冗余信息,減少了修改量,同時(shí)也減少了插入和刪除異常。但新關(guān)系S1仍然存在以下問題:(1)班主任的姓名要重復(fù)存儲(有冗余數(shù)據(jù)),類似“更換班主任〞這樣的修改,仍需改動較多的元組。(2)仍有插入、刪除、修改等異常。例如,假設(shè)學(xué)生丁芳轉(zhuǎn)到計(jì)算機(jī)班,如果修改她的CLS、MON兩項(xiàng),便會失去“機(jī)械班主任為方方〞的信息,造成修改異常。又如,新增加一個(gè)電子班,班主任也已確定,但在該班招收學(xué)生之前,這些信息不能插入S1。為了解決上述問題,可再作一次分解。(2)第二次分解,消除MON對SNO的傳遞函數(shù)依賴。此時(shí)關(guān)系SC不變,僅將S1分解成以下兩個(gè)關(guān)系:S2(SNO,SN,CLS)CL(CLS,MON)圖8-6是根據(jù)圖8-5(a)導(dǎo)出的S2與CL的內(nèi)容。圖8-6(a)S2;(b)CL8.2.2第一范式(1NF)及標(biāo)準(zhǔn)化標(biāo)準(zhǔn)化的理論是E.F.Codd首先提出的。他認(rèn)為,一個(gè)關(guān)系數(shù)據(jù)庫中的關(guān)系,都應(yīng)滿足一定的標(biāo)準(zhǔn),才能構(gòu)造出好的數(shù)據(jù)模式,Codd把應(yīng)滿足的標(biāo)準(zhǔn)分成幾級,每一級稱為一個(gè)范式(NormalForm)。例如滿足最低要求,叫第一范式(1NF);在1NF根底上又滿足一些要求的叫第二范式(2NF);第二范式中,有些關(guān)系能滿足更多的要求,就屬于第三范式(3NF)。后來Codd和Boyce又共同提出了一個(gè)新范式:BC范式(BCNF)。以后又有人提出第四范式(4NF)和第五范式(5NF)。范式的等級越高,應(yīng)滿足的條件也越嚴(yán)。圖8-7各種范式之間的關(guān)系所謂“第幾范式〞,是表示關(guān)系的某一種級別,所以經(jīng)常稱某一關(guān)系模式R為第幾范式。但現(xiàn)在人們把范式這個(gè)概念理解成符合某一種級別的關(guān)系模式的集合,那么R為第幾范式就可以寫成R∈xNF。對于各種范式之間的聯(lián)系有5NF4NFBCNF3NF2NF1NF成立,如圖8-7所示。一個(gè)低一級范式的關(guān)系模式,通過模式分解可以轉(zhuǎn)換為假設(shè)干個(gè)高一級范式的關(guān)系模式的集合,這個(gè)過程就叫標(biāo)準(zhǔn)化。關(guān)系,作為一張二維表,對它有一個(gè)最起碼的要求:每一個(gè)分量必須是不可分的數(shù)據(jù)項(xiàng)。滿足了這個(gè)條件的關(guān)系模式就屬于第一范式(1NF)。這一限制是在關(guān)系的根本性質(zhì)中提出的,任何關(guān)系都必須遵守。第一范式是對關(guān)系的最低要求,由于第一范式和第二范式在應(yīng)用中有許多缺點(diǎn),實(shí)際的數(shù)據(jù)庫系統(tǒng)一般都使用第三范式以上的關(guān)系,但也不是范式等級越高越好。下面分別討論這些范式。8.2.3第二范式(2NF)與第三范式(3NF)定義8-5假設(shè)關(guān)系模式R∈1NF,且它的每一個(gè)非主屬性都完全函數(shù)依賴于碼,那么R∈2NF。2NF就是不允許關(guān)系模式的屬性之間有這樣的函數(shù)依賴X→Y,其中X是碼的真子集,Y是非主屬性。即不允許有非主屬性對碼的局部函數(shù)依賴。定義8-6假設(shè)關(guān)系模式R∈2NF,且它的每一個(gè)非主屬性都不傳遞函數(shù)依賴于碼,那么R∈3NF。3NF就是不允許關(guān)系模式的屬性之間有這樣的函數(shù)依賴X→Y,其中X不包含碼,Y是非主屬性。X不包含碼有兩種情況,一種情況X是碼的真子集,這是2NF所不允許的;另一種情況X不是碼的真子集,這是3NF所不允許的。即3NF不允許有非主屬性對碼的局部函數(shù)依賴和傳遞函數(shù)依賴。從以上定義可知,2NF關(guān)系可從1NF關(guān)系中消除非主屬性對碼的局部函數(shù)依賴后獲得,3NF關(guān)系可從2NF關(guān)系中消除非主屬性對碼的傳遞函數(shù)依賴后獲得。現(xiàn)在按照上述定義來考察引例中的幾個(gè)關(guān)系,了解它們各屬于哪一種范式。例8-5求關(guān)系S(SNO,SN,CLS,MON,CNO,GRD)的范式等級。為了分析方便,寫出關(guān)系的表示式后,可以在主屬性下方劃一橫線,并用箭頭標(biāo)出屬性之間的依賴關(guān)系。分析:S(SNO,CNO,SN,CLS,MON,GRD)
(1)各分量都是原子的。(2)存在局部函數(shù)依賴,如(SNO,CNO)SN。結(jié)論:S∈1NF。結(jié)論:S∈1NF。例8-6求關(guān)系S1(SNO,SN,CLS,MON)的范式等級。分析:S1(SNO,SN,CLS,MON)
(1)分量全是原子的。(2)主關(guān)鍵字為單個(gè)屬性,不可能存在局部函數(shù)依賴。(3)存在傳遞函數(shù)依賴,如SNOMON(因?yàn)镾NO→CLS,CLS→MON)。例8-7求關(guān)系S2,CL與SC的范式等級。(1)?S2(SNO,SN,CLS)
(2)?CL(CLS,MON)
(3)?SC(SNO,CNO,GRD)8.2.4BC范式(BCNF)BCNF(BoyceCoddNormalForm)是由Boyce和Codd提出的,該范式比上述的3NF又進(jìn)了一步,通常認(rèn)為BCNF是修正的第三范式,有時(shí)也稱為擴(kuò)充的第三范式。定義8-7假設(shè)關(guān)系模式R∈1NF,且對于每一個(gè)非平凡的函數(shù)依賴X→Y,X必包含碼,那么R∈BCNF。
也就是說,關(guān)系模式R(U)中,假設(shè)每一個(gè)決定因素都包含碼,那么R(U)∈BCNF。由BCNF的定義可以得到結(jié)論,一個(gè)滿足BCNF的關(guān)系模式有:(1)所有非主屬性對每一個(gè)碼都是完全函數(shù)依賴。(2)所有主屬性對每一個(gè)不包含它的碼,也是完全函數(shù)依賴。(3)沒有任何屬性完全函數(shù)依賴于非碼的任何一組屬性。BCNF是第三范式的進(jìn)一步標(biāo)準(zhǔn)化,即限制條件更嚴(yán)格。3NF不允許有X不包含碼,Y是非主屬性的非平凡函數(shù)依賴X→Y。BCNF那么不管Y是主屬性還是非主屬性,只要X不包含碼,就不允許有X→Y這樣的非平凡函數(shù)依賴。因此,假設(shè)R∈BCNF,那么必然R∈3NF,假設(shè)R∈3NF,未必R屬于BCNF。然而,BCNF又是概念上更加簡單的一種范式,判斷一個(gè)關(guān)系模式是否屬于BCNF,只要考察每個(gè)非平凡函數(shù)依賴X→Y的決定因素X是否包含碼就行了。例如我們在前面見過的關(guān)系模式S2(SNO,SN,CLS)CL(CLS,MON)SC(SNO,CNO,GRD)它們都屬于3NF,并且每一個(gè)決定因素都是碼,所以它們也都屬于BCNF。但并不是每一個(gè)屬于3NF的關(guān)系模式都屬于BCNF。例8-8有一關(guān)系模式CSZ(CITY,ST,ZIP),CITY是城市,ST是街道,ZIP是郵政編碼,其屬性組上的函數(shù)依賴集為 F={(CITY,ST)→ZIP,ZIP→CITY}即城市、街道決定郵政編碼,郵政編碼決定城市??捎脠D8-8表示如下。容易看出,(CITY,ST)和(ST,ZIP)是兩個(gè)候選碼,CITY,ST,ZIP都是主屬性,沒有非主屬性,自然CSZ∈3NF。但函數(shù)依賴ZIP→CITY的決定因素ZIP不包含碼,所以CSZBCNF。圖8-8CSZ中的函數(shù)依賴對于不是BCNF的關(guān)系模式,仍然存在不適宜的地方。關(guān)系模式CSZ就存在著種種“毛病〞,例如,假設(shè)無街道信息,那么一個(gè)郵政編碼是哪個(gè)城市中的郵政編碼的信息無法存在數(shù)據(jù)庫中。假設(shè)將CSZ分解為兩個(gè)關(guān)系模式: ZC(ZIP,CITY) SZ(ST,ZIP)就沒有在非平凡的函數(shù)依賴的決定因素中不包含碼的情況,兩者都是BCNF的關(guān)系模式。從以上討論和例8-4的引例可以看出,關(guān)系模式的標(biāo)準(zhǔn)化過程,就是通過關(guān)系的投影分解逐步提高關(guān)系范式等級的過程。從1NF到BCNF,其過程如圖8-9所示。圖8-9各種范式及標(biāo)準(zhǔn)化過程3NF和BCNF是在函數(shù)依賴的條件下對模式分解所能到達(dá)的別離程度的測度。一個(gè)模式中的關(guān)系模式如果都屬于BCNF,那么在函數(shù)依賴范疇內(nèi),它已實(shí)現(xiàn)了徹底的別離,已消除了插入和刪除的異常。3NF的“不徹底〞性表現(xiàn)在可能存在主屬性對碼的局部依賴和傳遞依賴。把低一級的關(guān)系模式分解為假設(shè)干個(gè)高一級的關(guān)系模式,這種分解不是惟一的。下面進(jìn)一步討論關(guān)系模式的分解,即分解后的關(guān)系模式與原關(guān)系模式的等價(jià)問題。8.2.5關(guān)系模式的分解分解可以使各關(guān)系模式到達(dá)某種程度的別離,讓一個(gè)關(guān)系模式描述一個(gè)概念、一個(gè)實(shí)體或者實(shí)體間的一種聯(lián)系,即所謂“一事一地〞的設(shè)計(jì)原那么,假設(shè)多于一個(gè)概念就把它“別離〞出去。分解是提高關(guān)系范式等級的重要方法。從例8-4的引例中,讀者已看到分解所起的作用。那么,如何對關(guān)系模式進(jìn)行分解呢?在這一小節(jié)中,我們將通過一個(gè)實(shí)例說明模式分解的一般方法和對分解質(zhì)量的要求。例8-9關(guān)系S(SNO,CLS,MON)∈2NF,圖8-10(a)顯示了它包含的內(nèi)容,圖8-10(b)給出了屬性間的依賴關(guān)系。試將S分解為兩個(gè)3NF的新關(guān)系。
圖8-10關(guān)系S及屬性間的聯(lián)系這里有三種不同的分解法,即S-C(SNO,CLS)(1)SC-M(CLS,MON)S-C(SNO,CLS)(2)SS-M(SNO,MON)S-M(SNO,MON)(3)SC-M(CLS,MON)三種方案得出的新關(guān)系,全是BCNF,但分解的質(zhì)量卻大有差異。以下結(jié)合對分解質(zhì)量的要求,對這三種方案作一比較。(1)分解必須是無損的,既不應(yīng)在分解中喪失信息。在上例中,第(3)種方案就不能保證無損分解。圖8-11顯示了這一方案得出的兩個(gè)關(guān)系。由于計(jì)算機(jī)班和電子班的班主任是同一個(gè)人,分解后將無法分辯S1~S4各屬于哪一個(gè)班。圖8-11第(3)種方案得出的關(guān)系S-M和C-M(a)?S-M;(b)C-M(2)分解后的新關(guān)系應(yīng)相互獨(dú)立,對一個(gè)關(guān)系內(nèi)容的更改,不會影響另一個(gè)關(guān)系。試比較以上的(1)、(2)兩種方案。設(shè)S4從電子班轉(zhuǎn)到機(jī)械班。按第(1)種方案,僅修改S-C就可以了;而按第(2)種方案,就要同時(shí)修改S-C與S-M兩個(gè)關(guān)系。在插入的時(shí)候,(1)、(2)兩種方案的情況也不相同。假定增加了一個(gè)新班,并有了班主任。按第(1)種方案,可以直接在C-M中插入一個(gè)新元組;而按第(2)種方案,那么必須等這個(gè)班已有了學(xué)生,才能將CLS與MON的信息分別插入S-C與S-M兩個(gè)關(guān)系。產(chǎn)生以上這些差異的原因,可以結(jié)合圖8-10(b)來說明。在圖中的三個(gè)屬性之間,SNO→CLS,CLS→MON都是完全函數(shù)依賴,而SNO→MON那么為傳遞函數(shù)依賴。方案(1)建立的兩個(gè)新關(guān)系分別使用了兩個(gè)原有的完全函數(shù)依賴關(guān)系,方案(2)和方案(3)都只有一個(gè)新關(guān)系使用了完全函數(shù)依賴,另一個(gè)新關(guān)系使用的傳遞函數(shù)依賴,對于未用到的那個(gè)完全函數(shù)依賴關(guān)系,只能靠推導(dǎo)才能得到。這就是方案(1)優(yōu)于其它方案的原因??梢姡柚趫D8-10(b)的屬性依賴圖解,可以幫助選擇正確的分解方案。從上例可知,對關(guān)系模式的分解,不能僅著眼于提高它的范式等級,還應(yīng)遵守?zé)o損分解和分解后的新關(guān)系相互獨(dú)立等原那么。只有兼顧到各方面的要求,才能保證分解的質(zhì)量。還需要注意的是,有些模式在理論中存在冗余或異常,實(shí)際應(yīng)用中不一定有多少影響。例如有些關(guān)系模式在運(yùn)行中只有查詢操作,沒有插入和刪除等操作,就不必?fù)?dān)憂發(fā)生“異常〞??傊?,處理模式分解必須從實(shí)際出發(fā),并不是范式等級越高越好。分解得過細(xì),即使對消除更新異常有些好處,但查詢時(shí)需要更多的連接操作,很可能是得不償失的。8.3數(shù)據(jù)庫設(shè)計(jì)概述數(shù)據(jù)庫設(shè)計(jì)是指數(shù)據(jù)庫應(yīng)用系統(tǒng)的設(shè)計(jì),數(shù)據(jù)庫應(yīng)用系統(tǒng)是含有數(shù)據(jù)庫的信息系統(tǒng)的通稱。數(shù)據(jù)庫應(yīng)用系統(tǒng)的設(shè)計(jì)是對于一個(gè)給定的應(yīng)用環(huán)境(包括硬件環(huán)境和軟件環(huán)境),如何來表達(dá)用戶的要求,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及圍繞數(shù)據(jù)庫展開的應(yīng)用系統(tǒng),使之能夠有效地收集、存儲、操作和管理數(shù)據(jù),滿足各類用戶的應(yīng)用需求(信息需求和處理需求)。對一般的用戶來說,數(shù)據(jù)庫管理系統(tǒng)(DBMS)已經(jīng)隨機(jī)器配置,不需要自行設(shè)計(jì)。所謂應(yīng)用系統(tǒng)的設(shè)計(jì),實(shí)際上就是“數(shù)據(jù)庫+應(yīng)用程序〞的設(shè)計(jì),而中心問題那么是數(shù)據(jù)庫的設(shè)計(jì)。具體地說,數(shù)據(jù)庫設(shè)計(jì)包括結(jié)構(gòu)特性的設(shè)計(jì)和行為特性的設(shè)計(jì)兩方面的內(nèi)容。結(jié)構(gòu)特性的設(shè)計(jì)是指確定數(shù)據(jù)庫的數(shù)據(jù)模型。數(shù)據(jù)模型反映了現(xiàn)實(shí)世界的數(shù)據(jù)及數(shù)據(jù)間的聯(lián)系,要求在滿足應(yīng)用需求的前提下,盡可能減少冗余,實(shí)現(xiàn)數(shù)據(jù)共享。行為特性的設(shè)計(jì)是指確定數(shù)據(jù)庫應(yīng)用的行為和動作,應(yīng)用的行為表達(dá)在應(yīng)用程序中,所以行為特性的設(shè)計(jì)主要是應(yīng)用程序的設(shè)計(jì)。數(shù)據(jù)庫設(shè)計(jì)工作量大而且過程比較復(fù)雜,既是一項(xiàng)數(shù)據(jù)庫工程,也是一項(xiàng)龐大的軟件工程,數(shù)據(jù)庫設(shè)計(jì)的各階段可以和軟件工程的各階段對應(yīng)起來,軟件工程的某些方法和工具同樣可以適用于數(shù)據(jù)庫工程。數(shù)據(jù)庫工程與傳統(tǒng)的軟件工程的區(qū)別在于:軟件工程中比較強(qiáng)調(diào)行為特性的設(shè)計(jì);在數(shù)據(jù)庫工程中,由于數(shù)據(jù)庫模型是一個(gè)相對穩(wěn)定的并為所有用戶共享的數(shù)據(jù)根底,所以在數(shù)據(jù)庫工程中更強(qiáng)調(diào)對于結(jié)構(gòu)特性的設(shè)計(jì),并與行為特性的設(shè)計(jì)結(jié)合起來。為了使數(shù)據(jù)庫設(shè)計(jì)更合理更有效,需要有效的指導(dǎo)原那么,這種指導(dǎo)原那么稱做數(shù)據(jù)庫設(shè)計(jì)方法學(xué)。數(shù)據(jù)庫標(biāo)準(zhǔn)設(shè)計(jì)方法中比較著名的有新奧爾良(NewOrleans)方法,它將數(shù)據(jù)庫設(shè)計(jì)過程分為4個(gè)階段:需求分析(分析用戶要求)、概念結(jié)構(gòu)設(shè)計(jì)(信息分析與定義)、邏輯結(jié)構(gòu)設(shè)計(jì)(設(shè)計(jì)實(shí)現(xiàn))和物理結(jié)構(gòu)設(shè)計(jì)(物理數(shù)據(jù)庫設(shè)計(jì))。其后,S.B.Yao等人又將數(shù)據(jù)庫設(shè)計(jì)分為5個(gè)步驟。又有等人主張把數(shù)據(jù)庫設(shè)計(jì)當(dāng)成一步接一步的過程,并采用一些輔助手段實(shí)現(xiàn)每一過程。按照標(biāo)準(zhǔn)設(shè)計(jì)的方法,考慮數(shù)據(jù)庫及其應(yīng)用系統(tǒng)開發(fā)全過程,將數(shù)據(jù)庫設(shè)計(jì)分為以下6個(gè)階段(如圖8-12所示)。l
需求分析;l
概念結(jié)構(gòu)設(shè)計(jì);l
邏輯結(jié)構(gòu)設(shè)計(jì);l
物理結(jié)構(gòu)設(shè)計(jì);l
數(shù)據(jù)庫實(shí)施;l
數(shù)據(jù)庫運(yùn)行與維護(hù)。圖8-12數(shù)據(jù)庫設(shè)計(jì)步驟數(shù)據(jù)庫設(shè)計(jì)開始之前,首先必須選定參加設(shè)計(jì)的人員,包括系統(tǒng)分析人員、數(shù)據(jù)庫設(shè)計(jì)人員和程序員、用戶和數(shù)據(jù)庫管理員。系統(tǒng)分析和數(shù)據(jù)庫設(shè)計(jì)人員是數(shù)據(jù)庫設(shè)計(jì)的核心人員,他們將自始至終參與數(shù)據(jù)庫設(shè)計(jì),他們的水平?jīng)Q定了數(shù)據(jù)庫系統(tǒng)的質(zhì)量。用戶和數(shù)據(jù)庫管理員在數(shù)據(jù)庫設(shè)計(jì)中也是舉足輕重的,他們主要參加需求分析和數(shù)據(jù)庫的運(yùn)行維護(hù),他們的積極參與不但能加快數(shù)據(jù)庫設(shè)計(jì),而且也是決定數(shù)據(jù)庫設(shè)計(jì)的質(zhì)量的重要因素。程序員那么在系統(tǒng)實(shí)施階段參與進(jìn)來,分別負(fù)責(zé)編制程序和準(zhǔn)備軟硬件環(huán)境。1.需求分析階段在進(jìn)行數(shù)據(jù)庫設(shè)計(jì)時(shí),首先必須準(zhǔn)確了解與分析用戶需求(包括數(shù)據(jù)與處理)。需求分析是整個(gè)設(shè)計(jì)過程的根底,作為地基的需求分析是否做得充分與準(zhǔn)確,決定了在其上構(gòu)建數(shù)據(jù)庫大廈的速度與質(zhì)量,需求分析做得不好,甚至?xí)?dǎo)致整個(gè)數(shù)據(jù)庫設(shè)計(jì)返工重做。該階段的工作是收集和分析用戶對系統(tǒng)的要求,確定系統(tǒng)的工作范圍,并產(chǎn)生“數(shù)據(jù)流圖〞和“數(shù)據(jù)字典〞。2.概念結(jié)構(gòu)設(shè)計(jì)階段根據(jù)對系統(tǒng)的要求,提出能夠反映各個(gè)用戶要求的局部概念模型,然后將局部概念模型綜合為總的概念模型。應(yīng)該指出,概念模型僅是用戶活動的客觀反映,并不涉及用什么樣的數(shù)據(jù)模型來實(shí)現(xiàn)它的問題,即概念模型獨(dú)立于具體的DBMS。因此在這一階段,應(yīng)該把注意力集中在弄清系統(tǒng)要求上面,暫不要考慮怎樣去實(shí)現(xiàn),以免分散精力。實(shí)體—聯(lián)系方法是設(shè)計(jì)概念模型的主要方法,在該階段結(jié)束時(shí)應(yīng)該產(chǎn)生系統(tǒng)的根本E–R圖。3.邏輯結(jié)構(gòu)設(shè)計(jì)階段這一階段首先要選擇一種適當(dāng)?shù)臄?shù)據(jù)模型,然后將系統(tǒng)的概念模型轉(zhuǎn)換為所需的數(shù)據(jù)模型。通常一種DBMS只支持某一種數(shù)據(jù)模型(如關(guān)系、網(wǎng)狀或?qū)哟文P?,所以DBMS一旦確定,數(shù)據(jù)模型的類型也就定了。此時(shí)邏輯設(shè)計(jì)的任務(wù),僅是把概念模型轉(zhuǎn)換為系統(tǒng)的DBMS所支持的數(shù)據(jù)模型。邏輯結(jié)構(gòu)設(shè)計(jì)一般分為初始設(shè)計(jì)和優(yōu)化設(shè)計(jì)兩步。優(yōu)化設(shè)計(jì)要用到標(biāo)準(zhǔn)化理論和LRA方法。4.物理結(jié)構(gòu)設(shè)計(jì)階段該設(shè)計(jì)階段內(nèi)容包括:確定存儲結(jié)構(gòu);建立存取路徑;分配存儲空間等。這些工作主要由DBMS在操作系統(tǒng)支持下自動完成,只有少量工作可由用戶選擇或干預(yù)。例如,有些DBMS允許用戶在一定范圍內(nèi)選擇主文件和索引文件的結(jié)構(gòu),決定在哪些屬性碼上建立索引,建什么樣的(單碼或組合碼)索引等。在存儲分配上,用戶可以指定存儲介質(zhì),如磁盤、磁帶等。5.?dāng)?shù)據(jù)庫實(shí)施階段在數(shù)據(jù)庫實(shí)施階段,設(shè)計(jì)人員運(yùn)用DBMS提供的數(shù)據(jù)語言及其宿主語言,根據(jù)邏輯設(shè)計(jì)和物理設(shè)計(jì)的結(jié)果建立數(shù)據(jù)庫,編制和調(diào)試應(yīng)用程序,組織數(shù)據(jù)入庫,并進(jìn)行試運(yùn)行。應(yīng)用程序須按照不同用戶的要求分別考慮和設(shè)計(jì),需要時(shí)可以先在邏輯模式上定義適合于用戶需要的外模式。6.?dāng)?shù)據(jù)庫運(yùn)行和維護(hù)階段數(shù)據(jù)庫應(yīng)用系統(tǒng)經(jīng)過試運(yùn)行后即可投入正式運(yùn)行。在數(shù)據(jù)庫系統(tǒng)運(yùn)行過程中必須不斷地對其進(jìn)行評價(jià)、調(diào)整與修改。設(shè)計(jì)一個(gè)完善的數(shù)據(jù)庫應(yīng)用系統(tǒng)是不可能一蹴而就的,它往往是上述六個(gè)階段的不斷反復(fù)。需要指出的是,這個(gè)設(shè)計(jì)步驟既是數(shù)據(jù)庫設(shè)計(jì)的過程,也包括了數(shù)據(jù)庫應(yīng)用系統(tǒng)的設(shè)計(jì)過程。在設(shè)計(jì)過程中把數(shù)據(jù)庫的設(shè)計(jì)和對數(shù)據(jù)庫中數(shù)據(jù)處理的設(shè)計(jì)緊密結(jié)合起來,將這兩個(gè)方面的需求分析、抽象、設(shè)計(jì)、實(shí)現(xiàn)在各個(gè)階段同時(shí)進(jìn)行,相互參照,相互補(bǔ)充,以完善兩方面的設(shè)計(jì)。下面就以圖8-12的設(shè)計(jì)過程為主線,討論數(shù)據(jù)庫設(shè)計(jì)各個(gè)階段的設(shè)計(jì)內(nèi)容、設(shè)計(jì)方法和工具。8.4需
求
分
析需求分析簡單地說就是分析用戶的要求。需求分析是設(shè)計(jì)數(shù)據(jù)庫的起點(diǎn),需求分析的結(jié)果是否準(zhǔn)確地反映了用戶的實(shí)際要求,將直接影響到后面各個(gè)階段的設(shè)計(jì),并影響到設(shè)計(jì)結(jié)果是否合理和實(shí)用。所以,準(zhǔn)確而無遺漏地弄清用戶對系統(tǒng)的要求,是系統(tǒng)設(shè)計(jì)取得成功的重要前提。8.4.1需求分析的任務(wù)需求分析的任務(wù)是對現(xiàn)實(shí)世界要處理的對象(組織、部門、企業(yè)等)進(jìn)行詳細(xì)調(diào)查,在了解現(xiàn)行系統(tǒng)的概況,確定新系統(tǒng)功能的過程中,收集支持系統(tǒng)目標(biāo)的根底數(shù)據(jù)及其處理方法。需求分析是在用戶調(diào)查的根底上,通過分析,逐步明確用戶對系統(tǒng)的需求,包括數(shù)據(jù)需求和圍繞這些數(shù)據(jù)的業(yè)務(wù)處理需求。調(diào)查的重點(diǎn)是“數(shù)據(jù)〞和“處理〞,通過調(diào)查、收集與分析,獲得用戶對數(shù)據(jù)庫的如下要求:(1)信息要求。指用戶需要從數(shù)據(jù)庫中獲得信息的內(nèi)容與性質(zhì)。由信息要求可以導(dǎo)出數(shù)據(jù)要求,即在數(shù)據(jù)庫中需要存儲哪些數(shù)據(jù)。(2)處理要求。指用戶要完成什么處理功能,對處理的響應(yīng)時(shí)間有什么要求,處理方式是批處理還是聯(lián)機(jī)處理。(3)平安性與完整性要求。確定用戶的最終需求是一件很困難的事,這是因?yàn)橐环矫嬗脩羧鄙儆?jì)算機(jī)知識,開始時(shí)無法確定計(jì)算機(jī)究竟能為自己做什么,不能做什么,因而往往不能準(zhǔn)確地表達(dá)自己的需求,所提出的需求往往不斷地變化。另一方面,設(shè)計(jì)人員缺少用戶的專業(yè)知識,不易理解用戶的真正需求,甚至誤解用戶的需求。因此設(shè)計(jì)人員必須不斷深入地與用戶交流,才能逐步確定用戶的實(shí)際需求。8.4.2需求分析的方法進(jìn)行需求分析首先是調(diào)查清楚用戶的實(shí)際要求,與用戶達(dá)成共識,然后分析與表達(dá)這些需求。調(diào)查用戶需求的具體步驟是:(1)調(diào)查組織機(jī)構(gòu)情況。包括了解該組織的部門組成情況、各部門的職責(zé)等,為分析信息流程做準(zhǔn)備。
(2)調(diào)查各部門的業(yè)務(wù)活動情況。包括了解各個(gè)部門輸入和使用什么數(shù)據(jù),如何加工處理這些數(shù)據(jù),輸出什么信息,輸出到什么部門,輸出結(jié)果的格式是什么,這是調(diào)查的重點(diǎn)。(3)在熟悉了業(yè)務(wù)活動的根底上,協(xié)助用戶明確對新系統(tǒng)的各種要求,包括信息要求、處理要求、平安性與完整性要求,這是調(diào)查的又一個(gè)重點(diǎn)。(4)確定新系統(tǒng)的邊界。對前面調(diào)查的結(jié)果進(jìn)行初步分析,確定哪些功能由計(jì)算機(jī)完成或?qū)頊?zhǔn)備讓計(jì)算機(jī)完成,哪些活動由人工完成。由計(jì)算機(jī)完成的功能就是新系統(tǒng)應(yīng)該實(shí)現(xiàn)的功能。在調(diào)查過程中,可以根據(jù)不同的問題和條件,使用不同的調(diào)查方法。常用的調(diào)查方法有:(1)跟班作業(yè)。通過親身參加業(yè)務(wù)工作來了解業(yè)務(wù)活動的情況。這種方法可以比較準(zhǔn)確地理解用戶的需求,但比較消耗時(shí)間。(2)開調(diào)查會。通過與用戶座談來了解業(yè)務(wù)活動情況及用戶需求。(3)請專人介紹。
(4)詢問。對某些調(diào)查中的問題,可以找專人詢問。(5)設(shè)計(jì)調(diào)查表請用戶填寫。如果調(diào)查表設(shè)計(jì)得合理,這種方法很有效,也易于為用戶接受。(6)查閱記錄。查閱與原系統(tǒng)有關(guān)的數(shù)據(jù)記錄。做需求調(diào)查時(shí),往往需要同時(shí)采用上述多種方法。但無論使用何種調(diào)查方法,都必須有用戶的積極參與和配合。調(diào)查了解了用戶的需求以后,還需要進(jìn)一步分析和表達(dá)用戶的需求。在眾多的分析方法中,結(jié)構(gòu)化分析(SA,StructuredAnalysis)方法是一種簡單實(shí)用的方法。SA方法從最上層的系統(tǒng)組織機(jī)構(gòu)入手,采用自頂向下、逐層分解的方式分析系統(tǒng)。SA方法把任何一個(gè)系統(tǒng)都可以抽象為圖8-13那樣的數(shù)據(jù)流圖(DFD,DataFlowDiagram)形式。圖8-13系統(tǒng)高層的數(shù)據(jù)流圖圖8-13給出的只是最高層次抽象的數(shù)據(jù)流圖,要反映更詳細(xì)的內(nèi)容,可將處理功能分解為假設(shè)干子功能,每個(gè)子功能還可以繼續(xù)分解,直到把系統(tǒng)工作過程表示清楚為止。在處理功能逐步分解的同時(shí),它們所用的數(shù)據(jù)也逐級分解,形成假設(shè)干層次的數(shù)據(jù)流圖。數(shù)據(jù)流圖表達(dá)了數(shù)據(jù)和處理過程的關(guān)系。在SA方法中,處理過程的處理邏輯常常借助判定表或判定樹來描述。系統(tǒng)中的數(shù)據(jù)那么借助數(shù)據(jù)字典(DD,DataDictionary)來描述。數(shù)據(jù)字典是系統(tǒng)中各類數(shù)據(jù)描述的集合,是進(jìn)行詳細(xì)的數(shù)據(jù)收集和數(shù)據(jù)分析所獲得的主要成果。數(shù)據(jù)字典在數(shù)據(jù)庫設(shè)計(jì)中占有很重要的地位。數(shù)據(jù)字典通常包括數(shù)據(jù)項(xiàng)、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、數(shù)據(jù)存儲和處理過程五種成分的描述。其中數(shù)據(jù)項(xiàng)是數(shù)據(jù)的最小組成單位,假設(shè)干個(gè)數(shù)據(jù)項(xiàng)可以組成一個(gè)數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)字典通過對數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)的定義來描述數(shù)據(jù)流、數(shù)據(jù)存儲的邏輯內(nèi)容。數(shù)據(jù)字典是在需求分析階段建立,在數(shù)據(jù)庫設(shè)計(jì)過程中不斷修改、充實(shí)、完善。需求分析階段的文檔是系統(tǒng)需求說明書,系統(tǒng)需求說明書主要包括數(shù)據(jù)流圖、數(shù)據(jù)字典的雛形、各類數(shù)據(jù)的統(tǒng)計(jì)表格、系統(tǒng)功能結(jié)構(gòu)圖,并加以必要的說明編輯而成。系統(tǒng)需求說明書將作為數(shù)據(jù)庫設(shè)計(jì)全過程的重要依據(jù)文件。8.5概念結(jié)構(gòu)設(shè)計(jì)8.5.1概念結(jié)構(gòu)在需求分析階段所得到的應(yīng)用需求應(yīng)該首先抽象為信息世界的結(jié)構(gòu),才能更好地、更準(zhǔn)確地用某一DBMS實(shí)現(xiàn)這些需求。概念結(jié)構(gòu)的主要特點(diǎn)是:(1)能真實(shí)、充分地反映現(xiàn)實(shí)世界,包括事物和事物之間的聯(lián)系,能滿足用戶對數(shù)據(jù)的處理要求。概念結(jié)構(gòu)是對現(xiàn)實(shí)世界的一個(gè)真實(shí)模型。(2)易于理解。從而可以用它和不熟悉計(jì)算機(jī)的用戶交換意見,用戶的積極參與是數(shù)據(jù)庫設(shè)計(jì)成功的關(guān)鍵。(3)易于更改。當(dāng)應(yīng)用環(huán)境和應(yīng)用要求改變時(shí),容易對概念模型修改和擴(kuò)充。(4)易于向關(guān)系、網(wǎng)狀、層次等各種數(shù)據(jù)模型轉(zhuǎn)換。概念結(jié)構(gòu)是各種數(shù)據(jù)模型的共同根底,它比數(shù)據(jù)模型更獨(dú)立于機(jī)器、更抽象,從而更加穩(wěn)定。描述概念模型的有力工具是E–R模型。有關(guān)E–R模型的根本概念已在前面介紹。下面將用E–R模型來描述概念結(jié)構(gòu)。8.5.2概念結(jié)構(gòu)設(shè)計(jì)的方法和步驟設(shè)計(jì)概念結(jié)構(gòu)通常采用的策略是自底向上的方法,即首先定義各局部應(yīng)用的概念結(jié)構(gòu),然后將它們集成起來,得到全局概念結(jié)構(gòu),如圖8-14所示。自底向上設(shè)計(jì)概念結(jié)構(gòu)通常分為兩步:第一步是設(shè)計(jì)各局部應(yīng)用的局部視圖;第二步是集成各局部視圖,得到全局的概念結(jié)構(gòu)。圖8-14自底向上策略1.局部E–R模型的設(shè)計(jì)概念結(jié)構(gòu)設(shè)計(jì)的第一步就是對需求分析階段收集到的數(shù)據(jù)進(jìn)行分類、組織,形成實(shí)體、實(shí)體的屬性、標(biāo)識實(shí)體的碼,確定實(shí)體之間的聯(lián)系類型(1∶1,1∶n,m∶n),設(shè)計(jì)分E–R圖。具體做法是:(1)選擇局部應(yīng)用。根據(jù)某個(gè)系統(tǒng)的具體情況,在多層的數(shù)據(jù)流圖中選擇一個(gè)適當(dāng)層次的數(shù)據(jù)流圖,作為設(shè)計(jì)分E–R圖的出發(fā)點(diǎn)。讓這組圖中每一局部對應(yīng)一個(gè)局部應(yīng)用。由于高層的數(shù)據(jù)流圖只能反映系統(tǒng)的概貌,而中層的數(shù)據(jù)流圖能較好地反映系統(tǒng)中各局部應(yīng)用的子系統(tǒng)組成,因此人們往往以中層的數(shù)據(jù)流圖作為設(shè)計(jì)分E–R圖的依據(jù)。(2)逐一設(shè)計(jì)分E–R圖。選擇好局部應(yīng)用之后,就要對每個(gè)局部應(yīng)用逐一設(shè)計(jì)分E–R圖,亦稱局部E–R圖。在前面選好的某一層次的數(shù)據(jù)流圖中,每個(gè)局部應(yīng)用都對應(yīng)了一組數(shù)據(jù)流圖,局部應(yīng)用涉及的數(shù)據(jù)都已經(jīng)收集在數(shù)據(jù)字典中了?,F(xiàn)在就是要將這些數(shù)據(jù)從數(shù)據(jù)字典中抽取出來,參照數(shù)據(jù)流圖,標(biāo)定局部應(yīng)用中的實(shí)體、實(shí)體的屬性、標(biāo)識實(shí)體的碼,確定實(shí)體之間的聯(lián)系及其類型。這里最關(guān)鍵的步驟是確定實(shí)體和屬性。就是說,首先要決定在每一個(gè)應(yīng)用中包含哪些實(shí)體,這些實(shí)體又包含哪些屬性。事實(shí)上,在現(xiàn)實(shí)世界中具體的應(yīng)用環(huán)境常常對實(shí)體和屬性已經(jīng)作了大體的自然的劃分。在數(shù)據(jù)字典中,“數(shù)據(jù)結(jié)構(gòu)〞、“數(shù)據(jù)流〞和“數(shù)據(jù)存儲〞都是假設(shè)干屬性有意義的聚合,就可以作為實(shí)體對待。實(shí)體確定后,再確定實(shí)體之間的聯(lián)系。這樣就可建立起對應(yīng)于每一個(gè)應(yīng)用的局部E–R模型,然后再進(jìn)行必要的調(diào)整。假設(shè)某工廠要設(shè)計(jì)一個(gè)查詢系統(tǒng)。主管生產(chǎn)的部門要掌握產(chǎn)品的性能、各種零件的用料和每種產(chǎn)品的零件組成情況,并需據(jù)此編制工廠的生產(chǎn)方案;主管供給的部門需要了解產(chǎn)品的價(jià)格、各種產(chǎn)品的用料情況以及這些材料的價(jià)格與庫存量,并需根據(jù)這些資料提出材料的訂購方案。下面以供給部門的供給查詢?yōu)槔?,可以把“產(chǎn)品〞、“材料〞確定為實(shí)體,前者應(yīng)有“產(chǎn)品名〞和“價(jià)格〞兩個(gè)屬性,后者有“材料名〞、“價(jià)格〞和“庫存量〞三個(gè)屬性。實(shí)體確定后,再確定實(shí)體之間的聯(lián)系。在本例中,“產(chǎn)品〞與“材料〞是通過“使用〞互相聯(lián)系的,故可把“使用〞定為聯(lián)系,而“用量〞是它的屬性。把這些用E–R圖來表示,就可得到供給部門的局部E–R模型,如圖8-15所示。圖8-15供給部門的局部E-R模型用類似的方法,可以建立生產(chǎn)部門的E–R模型,如圖8-16所示。圖8-16生產(chǎn)部門的局部E–R模型應(yīng)該說明,實(shí)體和屬性的劃分并無絕對的標(biāo)準(zhǔn)。一般說來,凡不需要對它進(jìn)行再描述的事物,均作為屬性對待。舉例說,假定材料不只存放在一個(gè)倉庫,只須在圖8-15的“材料〞實(shí)體下再增加一個(gè)屬性“倉庫號〞就可以了,這時(shí)的庫存量也相應(yīng)的改成每一倉庫所擁有的材料數(shù)量。但如果需要把倉庫本身的信息(例如“倉庫號〞、“面積〞、“地點(diǎn)〞等)也存入數(shù)據(jù)庫以備查詢,就應(yīng)將“倉庫〞作為一個(gè)新的實(shí)體參加圖中,把圖8-15修改成如圖8-17的樣子。圖8-17更改后的供給部門局部E–R模型局部E–R模型建立后,應(yīng)對照每一個(gè)應(yīng)用進(jìn)行檢查,確保模型能滿足數(shù)據(jù)流圖對數(shù)據(jù)處理的需要。2.全局E–R模型的設(shè)計(jì)各子系統(tǒng)的分E–R模型設(shè)計(jì)好以后,下一步就是要將各個(gè)應(yīng)用的分E–R模型綜合成系統(tǒng)總的概念模型(總E–R模型)。一般說來,綜合可以有兩種方式:(1)多個(gè)分E–R圖一次集成;(2)逐步集成,用累加的方式一次集成兩個(gè)分E–R圖。第一種方式比較復(fù)雜,做起來難度較大;第二種方式每次只集成兩個(gè)分E–R圖,可以降低復(fù)雜度。無論采用哪種方式,每次集成局部E–R圖時(shí)都需要分兩步走:第一步合并,解決各分E–R圖之間的沖突,將各分E–R圖合并起來生成初步E–R圖;第二步修改和重構(gòu),消除不必要的冗余,生成根本E–R圖。1)合并分E–R圖,生成初步E–R圖各個(gè)局部應(yīng)用所面向的問題不同,且通常是由不同的設(shè)計(jì)人員進(jìn)行局部E–R圖設(shè)計(jì),這就導(dǎo)致各個(gè)分E–R圖之間必定會存在許多不一致的地方,稱之為沖突。因此合并分E–R圖時(shí)并不能簡單地將各個(gè)分E–R圖畫到一起,而是必須著力消除各個(gè)分E–R圖中的不一致,以形成一個(gè)能為全系統(tǒng)中所有用戶共同理解和接受的統(tǒng)一的概念模型。合理消除各分E–R圖的沖突是合并分E–R圖的主要工作與關(guān)鍵所在。各分E–R圖之間的沖突主要有三類:屬性沖突、命名沖突和結(jié)構(gòu)沖突。(1)屬性沖突:包括屬性值的類型、取值范圍、取值單位的不同。(2)命名沖突:包括實(shí)體名、聯(lián)系名、屬性名之間異名同義,或同名異義等。(3)結(jié)構(gòu)沖突:例如同一對象在一個(gè)局部E–R圖中作為實(shí)體,而在另一個(gè)局部E–R圖中作為屬性,同一實(shí)體在不同的E–R圖中屬性個(gè)數(shù)和類型不同等。屬性沖突和命名沖突通常用討論、協(xié)商等行政手段解決;結(jié)構(gòu)沖突那么要認(rèn)真分析后用技術(shù)手段解決,例如把實(shí)體變換為屬性或?qū)傩宰儞Q為實(shí)體,使同一對象具有相同的抽象,又如,取同一實(shí)體在各局部E–R圖中屬性的并作為集成后該實(shí)體的屬性集,并對屬性的取值類型進(jìn)行協(xié)調(diào)統(tǒng)一。在進(jìn)行綜合時(shí),除相同的實(shí)體應(yīng)該合并外,還可在屬于不同分E–R圖的實(shí)體間添加新的聯(lián)系。圖8-18顯示了將圖8-15和圖8-16綜合得到的E–R圖。圖中“材料〞與“零件〞兩個(gè)實(shí)體之間的聯(lián)系(“消耗〞),就是綜合后添加的。產(chǎn)品的屬性也從分E–R圖中的兩項(xiàng)增加為三項(xiàng)。圖8-18綜合后的初步E–R圖但是,這樣綜合得出的E–R圖僅是初步的,很可能存在冗余的數(shù)據(jù)和實(shí)體間的冗余聯(lián)系,需要進(jìn)一步的修改。2)消除不必要的冗余,設(shè)計(jì)根本E–R圖在初步E–R圖中,可能存在一些冗余的數(shù)據(jù)和實(shí)體間冗余的聯(lián)系。所謂冗余的數(shù)據(jù)是指可由根本數(shù)據(jù)導(dǎo)出的數(shù)據(jù),冗余的聯(lián)系是指可由其它聯(lián)系導(dǎo)出的聯(lián)系。冗余數(shù)據(jù)和冗余聯(lián)系的存在,不僅將占用更多的存儲空間,而且會增加數(shù)據(jù)維護(hù)工作,甚至可能在修改數(shù)據(jù)時(shí)破壞數(shù)據(jù)的完整性,應(yīng)當(dāng)予以消除。消除了冗余后的初步E–R圖稱為根本E–R圖。仍以圖8-18為例,產(chǎn)品對各種材料的“用量〞,實(shí)際上是根據(jù)產(chǎn)品包含的“零件數(shù)量〞和零件的材料消耗“定額〞推導(dǎo)出來的。也就是說,與“用量〞相比,“零件數(shù)量〞與“定額〞是更根本的數(shù)據(jù),因?yàn)椤坝昧卡暱梢杂伤鼈兺茖?dǎo)求得。如果保存“零件數(shù)量〞與“定額〞,就可以消除“用量〞。進(jìn)一步說,“用量〞又是產(chǎn)品與材料間的聯(lián)系(“使用〞)的屬性,“用量〞省去了,“使用〞這個(gè)聯(lián)系也可隨之取消。這樣,圖8-18就可改進(jìn)為圖8-19,這就是包括生產(chǎn)和供給兩個(gè)部門在內(nèi)的系統(tǒng)的根本概念模型,或稱為系統(tǒng)的根本E–R圖。圖8-19系統(tǒng)的根本E–R圖8.6邏輯結(jié)構(gòu)設(shè)計(jì)邏輯結(jié)構(gòu)設(shè)計(jì)的任務(wù)就是把概念結(jié)構(gòu)設(shè)計(jì)階段設(shè)計(jì)好的根本E–R圖轉(zhuǎn)換為與選用的DBMS產(chǎn)品所支持的數(shù)據(jù)模型相符合的邏輯結(jié)構(gòu)。邏輯結(jié)構(gòu)設(shè)計(jì)包括初步設(shè)計(jì)和優(yōu)化設(shè)計(jì)兩個(gè)步驟。所謂初步設(shè)計(jì)就是按照E–R圖向數(shù)據(jù)模型轉(zhuǎn)換的規(guī)那么,將已經(jīng)建立的概念模型轉(zhuǎn)換為DBMS所支持的數(shù)據(jù)模型,這里只介紹E–R圖向關(guān)系數(shù)據(jù)模型的轉(zhuǎn)換原那么與方法;優(yōu)化設(shè)計(jì)是對初步設(shè)計(jì)所得到的邏輯模型做進(jìn)一步的調(diào)整和改進(jìn),如圖8-20所示。圖8-20邏輯結(jié)構(gòu)設(shè)計(jì)的過程8.6.1E–R圖向關(guān)系模型的轉(zhuǎn)換E–R圖向關(guān)系模型轉(zhuǎn)換要解決的問題是如何將實(shí)體和實(shí)體間的聯(lián)系轉(zhuǎn)換為關(guān)系模式,以及如何確定這些關(guān)系模式的屬性和碼。關(guān)系模型的邏輯結(jié)構(gòu)是一組關(guān)系模式的集合。E–R圖那么是由實(shí)體、實(shí)體的屬性和實(shí)體之間的聯(lián)系三個(gè)要素組成的。所以將E–R圖轉(zhuǎn)換為關(guān)系模型實(shí)際上就是要將實(shí)體、實(shí)體的屬性和實(shí)體之間的聯(lián)系轉(zhuǎn)換為關(guān)系模式,這種轉(zhuǎn)換一般遵循如下原那么:(1)一個(gè)實(shí)體轉(zhuǎn)換為一個(gè)關(guān)系模式。實(shí)體的屬性就是關(guān)系的屬性,實(shí)體的碼就是關(guān)系的碼。(2)一個(gè)1∶1聯(lián)系可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,也可以與任意一端對應(yīng)的關(guān)系模式合并。如果轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,那么與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,每個(gè)實(shí)體的碼均是該關(guān)系的候選碼。如果與某一端實(shí)體對應(yīng)的關(guān)系模式合并,那么需要在該關(guān)系模式的屬性中參加另一個(gè)關(guān)系模式的碼和聯(lián)系本身的屬性。(3)一個(gè)1∶n聯(lián)系可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,也可以與n端對應(yīng)的關(guān)系模式合并。如果轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,那么與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,而關(guān)系的碼為n端實(shí)體的碼。(4)一個(gè)m∶n聯(lián)系轉(zhuǎn)換為一個(gè)關(guān)系模式。與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,而關(guān)系的碼為各實(shí)體碼的組合。(5)三個(gè)或三個(gè)以上實(shí)體間的一個(gè)多元聯(lián)系可以轉(zhuǎn)換為一個(gè)關(guān)系模式。與該多元聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,而關(guān)系的碼為各實(shí)體碼的組合。(6)具有相同碼的關(guān)系模式可合并。下面結(jié)合圖8-19的E–R圖,把它轉(zhuǎn)換為關(guān)系模型。關(guān)系的碼用下橫線標(biāo)出。實(shí)體名:產(chǎn)品對應(yīng)的關(guān)系模式:產(chǎn)品(產(chǎn)品名,價(jià)格,主要性能)實(shí)體名:零件對應(yīng)的關(guān)系模式:零件(零件號,零件名)實(shí)體名:材料對應(yīng)的關(guān)系模式:材料(材料名,價(jià)格,庫存量)聯(lián)系名:組成所聯(lián)系的實(shí)體及其主碼:產(chǎn)品(主碼為“產(chǎn)品名〞)和零件(主碼為“零件號〞)對應(yīng)的關(guān)系模式:產(chǎn)品零件一覽表(產(chǎn)品名,零件名,零件數(shù)量)聯(lián)系名:消耗所聯(lián)系的實(shí)體及其主碼: 零件(主碼為“零件號〞)和材料(主碼為“材料名〞)對應(yīng)的關(guān)系模式:零件用料表(零件號,材料名,定額)8.6.2數(shù)據(jù)模型的優(yōu)化數(shù)據(jù)庫邏輯設(shè)計(jì)的結(jié)果不是惟一的。為了進(jìn)一步提高數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能,還應(yīng)該根據(jù)應(yīng)用需要適當(dāng)?shù)匦薷?、調(diào)整數(shù)據(jù)模型的結(jié)構(gòu),這就是數(shù)據(jù)模型的優(yōu)化。關(guān)系數(shù)據(jù)模型的優(yōu)化通常以標(biāo)準(zhǔn)化理論為指導(dǎo),具體方法為(1)確定數(shù)據(jù)依賴。(2)對于各個(gè)關(guān)系模式之間的數(shù)據(jù)依賴進(jìn)行極小化處理,消除冗余的聯(lián)系。(3)按照數(shù)據(jù)依賴的理論對關(guān)系模式逐一進(jìn)行分析,考察是否存在局部函數(shù)依賴、傳遞函數(shù)依賴等,確定各關(guān)系模式分別屬于第幾范式。(4)按照需求分析階段得到的處理要求,分析這些模式對于這樣的應(yīng)用環(huán)境是否適宜,確定是否要對某些模式進(jìn)行合并或分解。必須注意的是,并不是標(biāo)準(zhǔn)化程度越高的關(guān)系就越優(yōu)。例如,當(dāng)查詢經(jīng)常涉及到兩個(gè)或多個(gè)關(guān)系模式的屬性時(shí),系統(tǒng)經(jīng)常進(jìn)行連接運(yùn)算。連接運(yùn)算的代價(jià)是相當(dāng)高的,可以說關(guān)系模型低效的主要原因就是連接運(yùn)算引起的。這時(shí)可以考慮將這幾個(gè)關(guān)系合并成一個(gè)關(guān)系。因此在這種情況下,第二范式甚至第一范式也許是適宜的。對于一個(gè)具體的應(yīng)用來說,到底標(biāo)準(zhǔn)化到什么程度,需要權(quán)衡響應(yīng)時(shí)間和潛在問題兩者的利弊決定。(5)對關(guān)系模式進(jìn)行必要的分解,提高數(shù)據(jù)操作的效率和存儲空間的利用率。常用的兩種分解方法是水平分解和垂直分解。例如,某大學(xué)記載學(xué)生情況的關(guān)系,包括大專生、本科生與研究生三大類學(xué)生。如果多數(shù)查詢一次只涉及其中的一類學(xué)生,就應(yīng)把整個(gè)學(xué)生關(guān)系“水平分割〞為大專生、本科生、研究生三個(gè)關(guān)系,以便提高系統(tǒng)的查詢效率。再如,設(shè)有記載職工情況的關(guān)系:EMP(工號,姓名,性別,年齡,職務(wù),工資,工齡,住址,)如果經(jīng)常查詢的僅是前六項(xiàng),后三項(xiàng)使用較少,就可將該關(guān)系“垂直分割〞為兩個(gè)關(guān)系,即EMP1(工號,姓名,性別,年齡,職務(wù),工資)和EMP2(工號,工齡,住址,)以便減少訪問時(shí)傳送的數(shù)據(jù)量,提高查詢的效率。8.7物理結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫在物理設(shè)備上的存儲結(jié)構(gòu)與存取方法稱為數(shù)據(jù)庫的物理結(jié)構(gòu),它依賴于給定的計(jì)算機(jī)系統(tǒng)。為一個(gè)給定的邏輯數(shù)據(jù)模型選取一個(gè)最適合應(yīng)用要求的物理結(jié)構(gòu)的過程,就是數(shù)據(jù)庫的物理設(shè)計(jì)。數(shù)據(jù)庫的物理設(shè)計(jì)通常分為兩步:(1)確定數(shù)據(jù)庫的物理結(jié)構(gòu),在關(guān)系數(shù)據(jù)庫中主要指存取方法和存儲結(jié)構(gòu);(2)對物理結(jié)構(gòu)進(jìn)行評價(jià),評價(jià)的重點(diǎn)是時(shí)間和空間效率。如果評價(jià)結(jié)果滿足原設(shè)計(jì)要求,那么可進(jìn)入到物理實(shí)施階段,否那么,就需要重新設(shè)計(jì)或修改物理結(jié)構(gòu),有時(shí)甚至要返回邏輯設(shè)計(jì)階段修改數(shù)據(jù)模型。1.物理設(shè)計(jì)的內(nèi)容和方法不同的數(shù)據(jù)庫產(chǎn)品所提供的物理環(huán)境、存取方法和存儲結(jié)構(gòu)有很大差異,能供設(shè)計(jì)人員使用的設(shè)計(jì)變量、參數(shù)范圍也很不相同,因此沒有通用的物理設(shè)計(jì)方法可遵循,只能給出一般的設(shè)計(jì)內(nèi)容和原那么。通常,關(guān)系數(shù)據(jù)庫物理設(shè)計(jì)的內(nèi)容主要包括:1)存儲結(jié)構(gòu)的設(shè)計(jì)確定數(shù)據(jù)庫物理結(jié)構(gòu)主要指確定數(shù)據(jù)的存放位置和存儲結(jié)構(gòu),包括確定關(guān)系、索引、日志、備份等的存儲安排和存儲結(jié)構(gòu),確定系統(tǒng)配置等。確定數(shù)據(jù)的存放位置和存儲結(jié)構(gòu)要綜合考慮存取時(shí)間、存儲空間利用率和維護(hù)代價(jià)三方面的因素。這三個(gè)方面常常是相互矛盾的,因此需要進(jìn)行權(quán)衡,選擇一個(gè)折中方案。2)存取方法的設(shè)計(jì)存取方法設(shè)計(jì)為存儲在物理設(shè)備上的數(shù)據(jù)提供數(shù)據(jù)訪問的路徑。數(shù)據(jù)庫系統(tǒng)是多用戶共享的系統(tǒng),對同一個(gè)關(guān)系要建立多條存取路徑才能滿足多用戶的多種應(yīng)用要求。物理設(shè)計(jì)的任務(wù)之一就是要確定選擇哪些存取方法,即建立哪些存取路徑。索引是數(shù)據(jù)庫中一種非常重要的數(shù)據(jù)存取路徑,在存取方法設(shè)計(jì)中要確定建立何種索引,以及在哪些表和屬性上建立索引。通常情況下,對數(shù)據(jù)量很大,又需要做頻繁查詢的表建立索引,并且選擇將索引建立在經(jīng)常用做查詢條件的屬性或?qū)傩越M,以及經(jīng)常用做連接屬性的屬性或?qū)傩越M上。物理設(shè)計(jì)的結(jié)果是物理設(shè)計(jì)說明書,包括存儲記錄格式、存儲記錄位置分布及存取方法,并給出對硬件和軟件系統(tǒng)的約束。2.物理設(shè)計(jì)的評價(jià)數(shù)據(jù)庫
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)與性能分析-洞察分析
- 網(wǎng)絡(luò)安全意識個(gè)性化培訓(xùn)方案-洞察分析
- 疫苗生產(chǎn)廢棄物處理-洞察分析
- 網(wǎng)絡(luò)安全防護(hù)策略-第2篇-洞察分析
- 羽毛顏色基因表達(dá)調(diào)控-洞察分析
- 網(wǎng)絡(luò)性能評估方法-洞察分析
- 《語文總復(fù)習(xí)》課件
- 《電氣圖形符號》課件
- 養(yǎng)老金辦理合同范本(2篇)
- 2024年滬科版九年級生物上冊階段測試試卷含答案
- GB/T 231.3-2022金屬材料布氏硬度試驗(yàn)第3部分:標(biāo)準(zhǔn)硬度塊的標(biāo)定
- 過敏性紫癜-教學(xué)課件
- GB/T 24183-2021金屬材料薄板和薄帶制耳試驗(yàn)方法
- GB/T 11446.8-2013電子級水中總有機(jī)碳的測試方法
- 醫(yī)院患者壓力性損傷情況登記表
- 醫(yī)院手術(shù)分級動態(tài)管理表
- 湖南2023消耗量定額說明及計(jì)算規(guī)則-市政工程
- 危險(xiǎn)化學(xué)品儲存柜安全管理
- 公共政策學(xué)政策分析的理論方法和技術(shù)課件
- 教案:孔門十弟子
- 中醫(yī)藥在肝癌介入治療中的作用課件
評論
0/150
提交評論