官术网_书友最值得收藏!

3.4 數(shù)據(jù)庫邏輯結(jié)構(gòu)的設(shè)計(jì)

E-R圖表示的概念模型是用戶數(shù)據(jù)要求的形式化。正如前面所述,E-R圖獨(dú)立于任何一種數(shù)據(jù)模型,它也不被任何一個(gè)DBMS所支持。邏輯結(jié)構(gòu)設(shè)計(jì)的任務(wù)就是把概念模型結(jié)構(gòu)轉(zhuǎn)換成某個(gè)具體的DBMS所支持的數(shù)據(jù)模型。

從理論上講,設(shè)計(jì)數(shù)據(jù)庫邏輯結(jié)構(gòu)的步驟應(yīng)該是:首先選擇最適合的數(shù)據(jù)模型,并按轉(zhuǎn)換規(guī)則將概念模型轉(zhuǎn)換為選定的數(shù)據(jù)模型;然后要從支持這種數(shù)據(jù)模型的各個(gè)DBMS中選出最佳的DBMS,根據(jù)選定的DBMS的特點(diǎn)和限制,對數(shù)據(jù)模型做適當(dāng)修正。但實(shí)際情況常常是先給定了計(jì)算機(jī)和DBMS,再進(jìn)行數(shù)據(jù)庫邏輯模型設(shè)計(jì)。由于設(shè)計(jì)人員并無選擇DBMS的余地,所以在概念模型向邏輯模型轉(zhuǎn)換時(shí)就要考慮到適合給定的DBMS的問題。

現(xiàn)行的DBMS一般主要支持關(guān)系、網(wǎng)狀或?qū)哟文P椭械哪骋环N,即使是同一種數(shù)據(jù)模型,不同的DBMS也有其不同的限制,提供不同的環(huán)境和工具。

通常把概念模型向邏輯模型的轉(zhuǎn)換過程分為3步進(jìn)行。

1)把概念模型轉(zhuǎn)換成一般的數(shù)據(jù)模型。

2)將一般的數(shù)據(jù)模型轉(zhuǎn)換成特定的DBMS所支持的數(shù)據(jù)模型。

3)通過優(yōu)化方法將其轉(zhuǎn)化為優(yōu)化的數(shù)據(jù)模型。

概念模型向邏輯模型的轉(zhuǎn)換步驟,如圖3-17所示。

978-7-111-64633-4-Chapter03-19.jpg

圖3-17 邏輯結(jié)構(gòu)設(shè)計(jì)的3個(gè)步驟

3.4.1 概念模型向網(wǎng)狀模型的轉(zhuǎn)換

1.不同型實(shí)體集及其聯(lián)系的轉(zhuǎn)換規(guī)則

概念模型中的實(shí)體集和不同型實(shí)體集間的聯(lián)系可按下列規(guī)則轉(zhuǎn)換為網(wǎng)狀模型中的記錄和系。

1)每個(gè)實(shí)體集轉(zhuǎn)換成一個(gè)記錄。

2)每個(gè)1∶n的二元聯(lián)系轉(zhuǎn)換成一個(gè)系,系的方向由1方實(shí)體記錄指向n方實(shí)體記錄。圖3-18a所示的是一個(gè)1∶n二元聯(lián)系轉(zhuǎn)換的實(shí)例。

3)每個(gè)m∶n的二元聯(lián)系,在轉(zhuǎn)換時(shí)要引入一個(gè)聯(lián)結(jié)記錄,并形成兩個(gè)系,系的方向由實(shí)體記錄方指向聯(lián)結(jié)記錄方。圖3-18b所示的是一個(gè)m∶n二元聯(lián)系轉(zhuǎn)換的實(shí)例。

978-7-111-64633-4-Chapter03-20.jpg

圖3-18 二元聯(lián)系的概念模型向網(wǎng)狀模型轉(zhuǎn)換的實(shí)例

a)1∶n聯(lián)系轉(zhuǎn)換的實(shí)例 b)m∶n聯(lián)系轉(zhuǎn)換的實(shí)例

4)K(≥3)個(gè)實(shí)體型之間的多元聯(lián)系,在轉(zhuǎn)換時(shí)也引入一個(gè)聯(lián)結(jié)記錄,并將聯(lián)系轉(zhuǎn)換成K個(gè)實(shí)體記錄型和聯(lián)結(jié)記錄型之間的K個(gè)系,系的方向均為實(shí)體型指向聯(lián)結(jié)記錄。具體實(shí)例如圖3-19所示。

978-7-111-64633-4-Chapter03-21.jpg

圖3-19 多元聯(lián)系的概念模型向網(wǎng)狀模型轉(zhuǎn)換的實(shí)例

2.同型實(shí)體之間聯(lián)系的模型轉(zhuǎn)換規(guī)則

在現(xiàn)實(shí)世界中,不僅不同型實(shí)體之間有聯(lián)系,而且在同型實(shí)體(即同一實(shí)體集合)中也存在聯(lián)系。例如,部門負(fù)責(zé)人與這一部門的職工都屬于職工這個(gè)實(shí)體集合,他們都是職工這個(gè)實(shí)體集的一個(gè)子集,但他們之間又存在著領(lǐng)導(dǎo)與被領(lǐng)導(dǎo)的聯(lián)系。再如,部件與其構(gòu)成成分之間的聯(lián)系,因?yàn)槊總€(gè)部件又是另一些部件的構(gòu)成成分,因此這是同型實(shí)體之間的多對多的聯(lián)系。在向網(wǎng)狀模型轉(zhuǎn)換時(shí),同型實(shí)體之間聯(lián)系的轉(zhuǎn)換規(guī)則如下。

1)對于同一實(shí)體集的一對多聯(lián)系,在向網(wǎng)狀模型轉(zhuǎn)換時(shí)要引入一個(gè)聯(lián)結(jié)記錄,并轉(zhuǎn)換為兩個(gè)系,系的方向不同。圖3-20a為職工中領(lǐng)導(dǎo)聯(lián)系轉(zhuǎn)換的實(shí)例。

2)對于同一實(shí)體集之間的m∶n聯(lián)系,轉(zhuǎn)換時(shí)也要引入一個(gè)聯(lián)結(jié)記錄,所轉(zhuǎn)換的兩個(gè)系均由實(shí)體記錄方指向聯(lián)結(jié)記錄方。圖3-20b為部件中構(gòu)成聯(lián)系的轉(zhuǎn)換實(shí)例。

978-7-111-64633-4-Chapter03-22.jpg

圖3-20 同一實(shí)體集間聯(lián)系的概念模型向網(wǎng)狀模型轉(zhuǎn)換的實(shí)例

a)1∶n聯(lián)系轉(zhuǎn)換的實(shí)例 b)m∶n聯(lián)系轉(zhuǎn)換的實(shí)例

3.4.2 概念模型向關(guān)系模型的轉(zhuǎn)換

將E-R圖轉(zhuǎn)換成關(guān)系模型要解決兩個(gè)問題:一個(gè)是如何將實(shí)體集和實(shí)體間的聯(lián)系轉(zhuǎn)換為關(guān)系模式;另一個(gè)是如何確定這些關(guān)系模式的屬性和碼。關(guān)系模型的邏輯結(jié)構(gòu)是一組關(guān)系模式,而E-R圖則是由實(shí)體集、屬性及聯(lián)系3個(gè)要素組成,將E-R圖轉(zhuǎn)換為關(guān)系模型實(shí)際上就是要將實(shí)體集、屬性及聯(lián)系轉(zhuǎn)換為相應(yīng)的關(guān)系模式。

概念模型轉(zhuǎn)換為關(guān)系模型的基本方法如下。

1.實(shí)體集的轉(zhuǎn)換規(guī)則

概念模型中的一個(gè)實(shí)體集轉(zhuǎn)換為關(guān)系模型中的一個(gè)關(guān)系,實(shí)體的屬性就是關(guān)系的屬性,實(shí)體的碼就是關(guān)系的碼,關(guān)系的結(jié)構(gòu)是關(guān)系模式。

2.實(shí)體集間聯(lián)系的轉(zhuǎn)換規(guī)則

在向關(guān)系模式轉(zhuǎn)換時(shí),實(shí)體集間的聯(lián)系可按以下規(guī)則轉(zhuǎn)換。

(1)1∶1聯(lián)系的轉(zhuǎn)換方法

一個(gè)1∶1聯(lián)系可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系,也可以與任意一端實(shí)體集所對應(yīng)的關(guān)系合并。如果將1∶1聯(lián)系轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系,則與該聯(lián)系相連的各實(shí)體的碼,以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,且每個(gè)實(shí)體的碼均是該關(guān)系的候選碼。如果將1∶1聯(lián)系與某一端實(shí)體集所對應(yīng)的關(guān)系合并,則需要在被合并關(guān)系中增加屬性,其新增的屬性為聯(lián)系本身的屬性和與聯(lián)系相關(guān)的另一個(gè)實(shí)體集的碼。

978-7-111-64633-4-Chapter03-23.jpg

圖3-21 兩元1∶1聯(lián)系轉(zhuǎn)換為 關(guān)系模式的實(shí)例

【例3-1】 將圖3-21中含有1∶1聯(lián)系的E-R圖轉(zhuǎn)換為關(guān)系模式。

該例有3種方案可供選擇(注意:關(guān)系模式中標(biāo)有下劃線的屬性為碼)。

方案1:聯(lián)系形成的獨(dú)立關(guān)系,關(guān)系模式如下:

978-7-111-64633-4-Chapter03-24.jpg

方案2:“負(fù)責(zé)”與“職工”兩關(guān)系合并,關(guān)系模式如下。

978-7-111-64633-4-Chapter03-25.jpg

方案3:“負(fù)責(zé)”與“產(chǎn)品”關(guān)系合并,關(guān)系模式如下。

978-7-111-64633-4-Chapter03-26.jpg

將上面的3種方案進(jìn)行比較,不難發(fā)現(xiàn):方案1中,由于關(guān)系多,增加了系統(tǒng)的復(fù)雜性;方案2中,由于并不是每個(gè)職工都負(fù)責(zé)產(chǎn)品,就會(huì)造成產(chǎn)品號屬性的NULL值過多;相比較起來,方案3比較合理。

(2)1∶n聯(lián)系的轉(zhuǎn)換方法

在向關(guān)系模式轉(zhuǎn)換時(shí),實(shí)體間的1∶n聯(lián)系可以有兩種轉(zhuǎn)換方法:一種方法是將聯(lián)系轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系,其關(guān)系的屬性由與該聯(lián)系相連的各實(shí)體集的碼,以及聯(lián)系本身的屬性組成,而該關(guān)系的碼為n端實(shí)體集的碼;另一種方法是在n端實(shí)體集中增加新屬性,新屬性由聯(lián)系對應(yīng)的1端實(shí)體集的碼和聯(lián)系自身的屬性構(gòu)成,新增屬性后原關(guān)系的碼不變。

【例3-2】 將圖3-22中含有1∶n聯(lián)系的E-R圖轉(zhuǎn)換為關(guān)系模式。

978-7-111-64633-4-Chapter03-27.jpg

圖3-22 兩元1∶n聯(lián)系轉(zhuǎn)換為 關(guān)系模式的實(shí)例

該轉(zhuǎn)換有兩種轉(zhuǎn)換方案供選擇(注意:關(guān)系模式中標(biāo)有下劃線的屬性為碼)。

方案1:1∶n聯(lián)系形成的關(guān)系獨(dú)立存在。

978-7-111-64633-4-Chapter03-28.jpg

方案2:聯(lián)系形成的關(guān)系與n端對象合并。

978-7-111-64633-4-Chapter03-29.jpg

比較以上兩種轉(zhuǎn)換方案可以發(fā)現(xiàn):盡管方案1使用的關(guān)系多,但是對倉儲(chǔ)變化大的場合比較適用;相反,方案2中關(guān)系少,它適應(yīng)倉儲(chǔ)變化較小的應(yīng)用場合。

【例3-3】 圖3-23中含有同實(shí)體集的1∶n聯(lián)系,將它轉(zhuǎn)換為關(guān)系模式。

978-7-111-64633-4-Chapter03-30.jpg

圖3-23 實(shí)體集內(nèi)部1∶n聯(lián)系轉(zhuǎn)換為關(guān)系模式的實(shí)例

該例題轉(zhuǎn)換的方案如下(注意:關(guān)系模式中標(biāo)有下劃線的屬性為碼)。

方案1:轉(zhuǎn)換為兩個(gè)關(guān)系模式。

978-7-111-64633-4-Chapter03-31.jpg

方案2:轉(zhuǎn)換為一個(gè)關(guān)系模式。

978-7-111-64633-4-Chapter03-32.jpg

其中,由于同一關(guān)系中不能有相同的屬性名,故將領(lǐng)導(dǎo)的職工號改為領(lǐng)導(dǎo)工號。以上兩種方案相比較,第2種方案的關(guān)系少,且能充分表達(dá)原有的數(shù)據(jù)聯(lián)系,所以采用第2種方案會(huì)更好些。

(3)m∶n聯(lián)系的轉(zhuǎn)換方法

在向關(guān)系模式轉(zhuǎn)換時(shí),一個(gè)m∶n聯(lián)系轉(zhuǎn)換為一個(gè)關(guān)系。轉(zhuǎn)換方法為:與該聯(lián)系相連的各實(shí)體集的碼,以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,新關(guān)系的碼為兩個(gè)相連實(shí)體碼的組合(該碼為多屬性構(gòu)成的組合碼)。

【例3-4】 將圖3-24中含有m∶n二元聯(lián)系的E-R圖,轉(zhuǎn)換為關(guān)系模式。

該例題轉(zhuǎn)換的關(guān)系模式如下(注意:關(guān)系模中標(biāo)有下劃線的屬性為碼)。

978-7-111-64633-4-Chapter03-33.jpg

【例3-5】 將圖3-25中含有同實(shí)體集間m∶n聯(lián)系的E-R圖轉(zhuǎn)換為關(guān)系模式。

轉(zhuǎn)換的關(guān)系模式如下(注意:關(guān)系模式中標(biāo)有下劃線的屬性為碼)。

978-7-111-64633-4-Chapter03-34.jpg

其中,組裝件號為組裝后的復(fù)雜零件號。由于同一個(gè)關(guān)系中不允許存在同屬性名,因而改為組裝件號。

978-7-111-64633-4-Chapter03-35.jpg

圖3-24 m∶n二元聯(lián)系轉(zhuǎn)換為關(guān)系模式的實(shí)例

978-7-111-64633-4-Chapter03-36.jpg

圖3-25 同一實(shí)體集內(nèi)m∶n聯(lián)系轉(zhuǎn)換為關(guān)系模式的實(shí)例

(4)3個(gè)或3個(gè)以上實(shí)體集間的多元聯(lián)系的轉(zhuǎn)換方法

要將3個(gè)或3個(gè)以上實(shí)體集間的多元聯(lián)系轉(zhuǎn)換為關(guān)系模式,可根據(jù)以下兩種情況采用不同的處理方法。

1)對于一對多的多元聯(lián)系,轉(zhuǎn)換為關(guān)系模式的方法是修改n端實(shí)體集對應(yīng)的關(guān)系,即將與聯(lián)系相關(guān)的1端實(shí)體集的碼和聯(lián)系自身的屬性作為新屬性加入到n端實(shí)體集中。

2)對于多對多的多元聯(lián)系,轉(zhuǎn)換為關(guān)系模式的方法是新建一個(gè)獨(dú)立的關(guān)系,該關(guān)系的屬性為多元聯(lián)系相連的各實(shí)體的碼及聯(lián)系本身的屬性,碼為各實(shí)體碼的組合。

【例3-6】 將圖3-26中含有多實(shí)體集間的多對多聯(lián)系的E-R圖轉(zhuǎn)換為關(guān)系模式。

轉(zhuǎn)換后的關(guān)系模式如下。

978-7-111-64633-4-Chapter03-37.jpg

其中,關(guān)系模式中標(biāo)有下劃線的屬性為碼。

978-7-111-64633-4-Chapter03-38.jpg

圖3-26 多實(shí)體集間聯(lián)系轉(zhuǎn)換為關(guān)系模式的實(shí)例

3.關(guān)系合并規(guī)則

在關(guān)系模式中,具有相同碼的關(guān)系,可根據(jù)情況合并為一個(gè)關(guān)系。

3.4.3 用戶子模式的設(shè)計(jì)

用戶子模式也稱外模式。關(guān)系數(shù)據(jù)庫管理系統(tǒng)中提供的視圖是根據(jù)用戶子模式設(shè)計(jì)的。設(shè)計(jì)用戶子模式時(shí)只考慮用戶對數(shù)據(jù)的使用要求、習(xí)慣及安全性要求,而不用考慮系統(tǒng)的時(shí)間效率、空間效率和維護(hù)等問題。用戶子模式設(shè)計(jì)時(shí)應(yīng)注意以下問題。

1.使用更符合用戶習(xí)慣的別名

前面提到,在合并各分E-R圖時(shí)應(yīng)消除命名的沖突,這在設(shè)計(jì)數(shù)據(jù)庫整體結(jié)構(gòu)時(shí)是非常有必要的。但命名統(tǒng)一后會(huì)使某些用戶感到別扭,用定義子模式的方法可以有效地解決該問題。必要時(shí),可以對子模式中的關(guān)系和屬性名重新命名,使其與用戶習(xí)慣一致,以方便用戶的使用。

2.對不同級別的用戶可以定義不同的子模式

由于視圖能夠?qū)Ρ碇械男泻土羞M(jìn)行限制,所以它還具有保證系統(tǒng)安全性的作用。對不同級別的用戶定義不同的子模式,可以保證系統(tǒng)的安全性。

例如,假設(shè)有關(guān)系模式:產(chǎn)品(產(chǎn)品號,產(chǎn)品名,規(guī)格,單價(jià),生產(chǎn)車間,生產(chǎn)負(fù)責(zé)人,產(chǎn)品成本,產(chǎn)品合格率,質(zhì)量等級)。如果在產(chǎn)品關(guān)系上建立以下兩個(gè)視圖。

1)為一般顧客建立視圖。

產(chǎn)品1(產(chǎn)品號,產(chǎn)品名,規(guī)格,單價(jià))

2)為產(chǎn)品銷售部門建立視圖。

產(chǎn)品2(產(chǎn)品號,產(chǎn)品名,規(guī)格,單價(jià),車間,生產(chǎn)負(fù)責(zé)人)

在建立視圖后,產(chǎn)品1視圖中包含了允許一般顧客查詢的產(chǎn)品屬性;產(chǎn)品2視圖中包含允許銷售部門查詢的產(chǎn)品屬性;生產(chǎn)領(lǐng)導(dǎo)部門則可以利用產(chǎn)品關(guān)系查詢產(chǎn)品的全部屬性數(shù)據(jù)。這樣,既方便了使用,又可以防止用戶非法訪問本來不允許他們查詢的數(shù)據(jù),保證了系統(tǒng)的安全性。

3.簡化用戶對系統(tǒng)的使用

利用子模式可以簡化使用,方便查詢。實(shí)際中經(jīng)常要使用某些很復(fù)雜的查詢,這些查詢包括多表連接、限制、分組和統(tǒng)計(jì)等。為了方便用戶,可以將這些復(fù)雜查詢定義為視圖,用戶每次只對定義好的視圖進(jìn)行查詢,避免了每次查詢都要對其進(jìn)行重復(fù)描述,大大簡化了用戶的使用。

3.4.4 數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)的實(shí)例

假如要為某基層單位建立一個(gè)“基層單位”數(shù)據(jù)庫。通過調(diào)查得出,用戶要求數(shù)據(jù)庫中存儲(chǔ)下列基本信息。

部門:部門號,名稱,領(lǐng)導(dǎo)人編號

職工:職工號,姓名,性別,工資,職稱,照片,簡歷

工程:工程號,工程名,參加人數(shù),預(yù)算,負(fù)責(zé)人

辦公室:地點(diǎn),編號,電話

這些信息的關(guān)聯(lián)語義如下。

每個(gè)部門有多個(gè)職工,每個(gè)職工只能在一個(gè)部門工作;

每個(gè)部門只有一個(gè)領(lǐng)導(dǎo)人,領(lǐng)導(dǎo)人不能兼職;

每個(gè)部門可以同時(shí)承擔(dān)若干工程項(xiàng)目,數(shù)據(jù)庫中應(yīng)記錄每個(gè)職工參加項(xiàng)目的日期;

一個(gè)部門可有多個(gè)辦公室;

每個(gè)辦公室只有一部電話;

數(shù)據(jù)庫中還應(yīng)存儲(chǔ)每個(gè)職工在所參加的工程項(xiàng)目中承擔(dān)的具體職務(wù)。

1.概念模型的設(shè)計(jì)

調(diào)查得到數(shù)據(jù)庫的信息要求和語義后,還要進(jìn)行數(shù)據(jù)抽象,才能得到數(shù)據(jù)庫的概念模型。設(shè)基層單位數(shù)據(jù)庫的概念模型如圖3-27所示。為了清晰,圖中將實(shí)體的屬性略去了。該E-R圖表示的“基層單位”數(shù)據(jù)庫系統(tǒng)中應(yīng)包括“部門”“辦公室”“職工”和“工程”4個(gè)實(shí)體集,其中,部門和辦公室間存在1∶n的“辦公”聯(lián)系;部門和職工間存在著1∶1的“領(lǐng)導(dǎo)”聯(lián)系和1∶n的“工作”聯(lián)系;職工和工程之間存在1∶n的“負(fù)責(zé)”聯(lián)系和m∶n的“參加”聯(lián)系;部門和工程之間存在著1∶n的“承擔(dān)”聯(lián)系。

2.關(guān)系模型的設(shè)計(jì)

圖3-27的E-R圖可按規(guī)則轉(zhuǎn)換一組關(guān)系模式。表3-2中列出了這組關(guān)系模式及相關(guān)信息。表中的一行為一個(gè)關(guān)系模型,關(guān)系的屬性根據(jù)數(shù)據(jù)字典得出。

978-7-111-64633-4-Chapter03-39.jpg

圖3-27 基層單位數(shù)據(jù)庫的概念模型

表3-2 基層單位數(shù)據(jù)庫的關(guān)系模式信息

978-7-111-64633-4-Chapter03-40.jpg

注:表中帶有下劃線的屬性為關(guān)系的碼;帶有刪除線的內(nèi)容是開始設(shè)計(jì)有,后來優(yōu)化時(shí)應(yīng)該與其他關(guān)系合并,具體情況在說明列中敘述。

該關(guān)系模型開始設(shè)計(jì)為10個(gè)關(guān)系,將1∶n聯(lián)系和1∶1聯(lián)系形成的關(guān)系模式與相應(yīng)的實(shí)體形成的關(guān)系模式合并后,有5個(gè)關(guān)系優(yōu)化掉了,結(jié)果為5個(gè)關(guān)系模式。這樣,該“基本單位”數(shù)據(jù)庫中應(yīng)該有5個(gè)基本關(guān)系。

主站蜘蛛池模板: 彰化市| 晋州市| 布拖县| 海安县| 枝江市| 明星| 锦州市| 噶尔县| SHOW| 万载县| 石棉县| 佛山市| 集贤县| 壤塘县| 丹寨县| 百色市| 正阳县| 满城县| 利辛县| 黔东| 财经| 岑溪市| 福安市| 广州市| 青浦区| 苗栗县| 阜新| 同心县| 娄底市| 鹤岗市| 阿尔山市| 图们市| 临海市| 兰溪市| 峡江县| 缙云县| 美姑县| 宁国市| 阳朔县| 额敏县| 郑州市|