- 數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用教程(第5版)
- 苗雪蘭 劉瑞新等編著
- 4623字
- 2020-09-18 17:44:21
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所示。
圖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í)例。
圖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所示。
圖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í)例。
圖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í)體集的碼。
圖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)系模式如下:
方案2:“負(fù)責(zé)”與“職工”兩關(guān)系合并,關(guān)系模式如下。
方案3:“負(fù)責(zé)”與“產(chǎn)品”關(guān)系合并,關(guān)系模式如下。
將上面的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)系模式。
圖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ú)立存在。
方案2:聯(lián)系形成的關(guān)系與n端對象合并。
比較以上兩種轉(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)系模式。
圖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)系模式。
方案2:轉(zhuǎn)換為一個(gè)關(guān)系模式。
其中,由于同一關(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)有下劃線的屬性為碼)。
【例3-5】 將圖3-25中含有同實(shí)體集間m∶n聯(lián)系的E-R圖轉(zhuǎn)換為關(guān)系模式。
轉(zhuǎn)換的關(guān)系模式如下(注意:關(guān)系模式中標(biāo)有下劃線的屬性為碼)。
其中,組裝件號為組裝后的復(fù)雜零件號。由于同一個(gè)關(guān)系中不允許存在同屬性名,因而改為組裝件號。
圖3-24 m∶n二元聯(lián)系轉(zhuǎn)換為關(guān)系模式的實(shí)例
圖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)系模式如下。
其中,關(guān)系模式中標(biāo)有下劃線的屬性為碼。
圖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ù)字典得出。
圖3-27 基層單位數(shù)據(jù)庫的概念模型
表3-2 基層單位數(shù)據(jù)庫的關(guān)系模式信息
注:表中帶有下劃線的屬性為關(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)系。
- Clojure Data Analysis Cookbook
- Practical Ansible 2
- Spark編程基礎(chǔ)(Scala版)
- 圖形圖像處理(Photoshop)
- JMAG電機(jī)電磁仿真分析與實(shí)例解析
- PostgreSQL Administration Essentials
- Windows 7寶典
- 工業(yè)機(jī)器人操作與編程
- ESP8266 Home Automation Projects
- Red Hat Linux 9實(shí)務(wù)自學(xué)手冊
- 人工智能技術(shù)入門
- 單片機(jī)原理實(shí)用教程
- 案例解說Delphi典型控制應(yīng)用
- 大數(shù)據(jù)素質(zhì)讀本
- 傳感技術(shù)基礎(chǔ)與技能實(shí)訓(xùn)