- 數(shù)據(jù)庫原理與應(yīng)用
- 張千帆
- 2593字
- 2024-03-04 17:13:27
1.4.3 E-R模型的設(shè)計流程
復(fù)雜的數(shù)據(jù)庫系統(tǒng)一般按照自底向上的設(shè)計策略,分模塊進行設(shè)計。E-R模型的設(shè)計流程是先設(shè)計局部應(yīng)用的局部E-R模型,然后把所有局部E-R模型合并為完整的數(shù)據(jù)庫系統(tǒng)的全局E-R模型,最后把全局E-R模型優(yōu)化為基本E-R模型,如圖1-24所示。

圖1-23 超類與子類示例

圖1-24 E-R模型設(shè)計流程圖
1. 局部E-R模型設(shè)計
局部E-R模型設(shè)計的工作內(nèi)容是基于對局部應(yīng)用的需求分析結(jié)果,運用分類、聚集、概括等數(shù)據(jù)抽象方法,把一個局部應(yīng)用抽象為實體、屬性、標(biāo)識實體的關(guān)鍵屬性,并確定實體之間的聯(lián)系及聯(lián)系的類型。
局部E-R模型設(shè)計的難點是把現(xiàn)實世界的對象抽象為實體還是屬性。實體和屬性是相對而言的,往往要根據(jù)實際情況進行必要的調(diào)整。基本的判斷依據(jù)有三個。一是屬性要足夠簡單,復(fù)合屬性需要升級為實體,或直接被其子屬性替代。二是簡化E-R模型的處理,現(xiàn)實世界中的事物凡能夠作為屬性對待的,應(yīng)盡量作為屬性。如果一個實體只有一個屬性,則應(yīng)該降級為屬性。三是屬性是對實體組成部分的描述,是實體的一部分,不允許屬性與其他實體發(fā)生聯(lián)系。例如,校園卡對于商戶的經(jīng)營管理而言是屬性,他們只關(guān)注校園卡的卡號。但對于學(xué)生而言,除了卡號,還有卡的密碼、余額等屬性需要關(guān)注,校園卡應(yīng)該抽象為包含多個屬性的實體。
例1-1 如圖1-25a)所示,局部E-R模型中的工資是職工的屬性,工資構(gòu)成包含崗位工資、薪級工資、績效工資和津貼補貼四部分。這種設(shè)計方法是否合適?
不合適。因為工資不僅是派生屬性,而且是包括四個子項的復(fù)合屬性。處理方法有兩種:一是用崗位工資、薪級工資、績效工資、津貼補貼替代工資屬性,如圖1-25b)所示;二是把工資作為實體,如圖1-25c)所示。

圖1-25 局部E-R模型設(shè)計示例
2. 全局E-R模型設(shè)計
將局部E-R模型合并為全局E-R模型,首先要識別各局部E-R模型中的公共實體,然后從公共實體開始進行兩兩合并,直到所有有關(guān)聯(lián)的局部E-R模型合并為一個整體,最后加入獨立的局部E-R模型后得到全局E-R模型。
對于較大的數(shù)據(jù)庫系統(tǒng),局部E-R模型很多,而且現(xiàn)實世界的同一個對象在不同的局部E-R模型中可能被給予了不同的抽象,將局部E-R模型合并為全局E-R模型時難免會出現(xiàn)沖突。檢查并消除沖突是設(shè)計全局E-R模型的重要工作內(nèi)容。常見的沖突有三種,分別是結(jié)構(gòu)沖突、命名沖突和屬性沖突。
(1)結(jié)構(gòu)沖突。
結(jié)構(gòu)沖突是指同一對象在不同應(yīng)用中具有不同的抽象。
第一類結(jié)構(gòu)沖突是同一對象在不同的局部應(yīng)用中分別被抽象為實體和屬性。調(diào)整的原則是能用屬性表示的對象就不要用實體表示,但是當(dāng)對象的屬性難以用簡單屬性表示時,就要在整個系統(tǒng)范圍內(nèi)把該對象用實體表示。例如,校園卡在一個局部應(yīng)用中作為屬性,在另一個局部應(yīng)用中可以是有多個屬性的實體,則我們在合并局部E-R模型時應(yīng)該把校園卡作為實體。
第二類結(jié)構(gòu)沖突是同一對象在不同的局部E-R模型中都被抽象為實體,但是實體的屬性并不完全相同或?qū)傩缘呐帕写涡虿⒉煌耆嗤R驗閿?shù)據(jù)庫要滿足所有用戶的數(shù)據(jù)處理需求,因此實體的屬性應(yīng)該取各局部E-R模型中該實體屬性的并集,再按照由主到次的順序調(diào)整屬性的順序。例如,校園卡在一個局部應(yīng)用中有卡號、開卡日期、注銷日期、密碼、狀態(tài)等屬性,在另一個局部應(yīng)用中有卡號、密碼、余額等屬性,兩個局部E-R模型合并后,校園卡實體的屬性是二者的并集:卡號、密碼、余額、開卡日期、注銷日期、狀態(tài)。
第三類結(jié)構(gòu)沖突是在不同的局部應(yīng)用中,實體之間的聯(lián)系類型不同。例如,在一個局部應(yīng)用中校園卡與商戶之間是二元聯(lián)系,而在另一個局部應(yīng)用中校園卡、商戶、商品之間是三元聯(lián)系。是二元聯(lián)系合適,還是三元聯(lián)系合適,沒有一定之規(guī),要根據(jù)應(yīng)用語義具體分析,然后對實體之間的聯(lián)系類型進行設(shè)計。調(diào)整的原則是能用二元聯(lián)系表示就不要用三元聯(lián)系表示。例如,校園卡、商戶、商品之間的三元聯(lián)系,可以調(diào)整為校園卡與商戶之間的二元聯(lián)系和商戶與商品之間的二元聯(lián)系。但是并非所有的三元聯(lián)系都可以用多個二元聯(lián)系來表示。
(2)命名沖突。
實體名、屬性名、聯(lián)系名都有可能沖突,其中以屬性的命名沖突尤為常見。命名沖突分為同名異義和同義異名兩種情況。
同名異義是指不同意義的對象在不同的局部應(yīng)用中具有相同的名字,例如,在不用的局部應(yīng)用中都將實體命名為“項目”,一個是指教師承擔(dān)的科研課題,一個是指學(xué)生參加的大學(xué)生創(chuàng)新創(chuàng)業(yè)項目。二者的性質(zhì)、研究內(nèi)容、考核指標(biāo)都是不一樣的,是兩種不同的實體,應(yīng)該用不同的實體名加以區(qū)分。
同義異名是指同一對象在不同的局部應(yīng)用中被定義了不同的名字。例如,同樣是學(xué)生實體,在一個局部應(yīng)用中被命名為“學(xué)生”,而在另一個局部應(yīng)用中又被命名為“學(xué)員”,因此,在合并為全局E-R模型時需要統(tǒng)一。
(3)屬性沖突。
屬性沖突是指同一個屬性的屬性域沖突,或者屬性取值單位沖突。
屬性域包括屬性的數(shù)據(jù)類型和取值范圍。屬性域沖突有可能是同一屬性在不同的局部應(yīng)用中被定義了不同的數(shù)據(jù)類型,或者同一屬性在不同的局部應(yīng)用中數(shù)據(jù)類型相同但是數(shù)據(jù)的取值范圍不同。例如,校園卡的卡號在一個局部應(yīng)用中被定義為整數(shù)類型,而在另一個局部應(yīng)用中被定義為字符類型。又如,學(xué)號在兩個局部應(yīng)用中都被定義為字符類型,但是在一個局部應(yīng)用中學(xué)號的長度為12,在另一個局部應(yīng)用中學(xué)號的長度為10。
屬性取值單位沖突也很常見。例如,商品的規(guī)格屬性在一個局部應(yīng)用中以箱為單位,在另一個局部應(yīng)用中以瓶為單位。
3. 基本E-R模型設(shè)計
基本E-R模型設(shè)計是指在全局E-R模型的基礎(chǔ)上,去掉冗余數(shù)據(jù)和冗余聯(lián)系。冗余數(shù)據(jù)是指可由基本數(shù)據(jù)導(dǎo)出的數(shù)據(jù)。冗余聯(lián)系是指可由其他聯(lián)系導(dǎo)出的聯(lián)系。冗余數(shù)據(jù)和冗余聯(lián)系容易造成數(shù)據(jù)的不一致,增加數(shù)據(jù)庫維護的難度。如果全局E-R模型中存在冗余數(shù)據(jù)和冗余聯(lián)系,則需要對其進行優(yōu)化。優(yōu)化后的全局E-R模型被稱為基本E-R模型。
例如,學(xué)生的平均分是由各科成績加權(quán)平均后得到的數(shù)據(jù),屬于冗余數(shù)據(jù)。又如,發(fā)票的總金額是由發(fā)票中商品的單價和數(shù)量計算得到的數(shù)據(jù),屬于冗余數(shù)據(jù)。
例1-2 如圖1-26所示的E-R模型中是否存在冗余聯(lián)系?如果存在,請你消除冗余聯(lián)系。

圖1-26 冗余聯(lián)系示例
學(xué)生與商戶之間的消費聯(lián)系是一個冗余聯(lián)系,因為該聯(lián)系可以通過學(xué)生持有校園卡和刷卡在商戶消費這兩個聯(lián)系推導(dǎo)出來。消除冗余聯(lián)系后的E-R模型如圖1-27所示。

圖1-27 消除冗余聯(lián)系后的E-R模型
基本E-R模型用盡可能少的實體、屬性、聯(lián)系,準(zhǔn)確、全面地反映用戶功能需求。但這并不意味著數(shù)據(jù)庫中沒有冗余,必要的冗余有時可以提高數(shù)據(jù)查詢的效率。設(shè)計基本E-R模型時,哪些冗余信息要消除,哪些冗余信息允許存在,需要根據(jù)用戶的整體需求來確定。
- 數(shù)據(jù)要素安全流通
- 漫話大數(shù)據(jù)
- 信息系統(tǒng)與數(shù)據(jù)科學(xué)
- 數(shù)據(jù)要素五論:信息、權(quán)屬、價值、安全、交易
- Python醫(yī)學(xué)數(shù)據(jù)分析入門
- Dependency Injection with AngularJS
- 數(shù)字媒體交互設(shè)計(初級):Web產(chǎn)品交互設(shè)計方法與案例
- 圖數(shù)據(jù)實戰(zhàn):用圖思維和圖技術(shù)解決復(fù)雜問題
- 企業(yè)級容器云架構(gòu)開發(fā)指南
- SQL Server 2012數(shù)據(jù)庫管理教程
- Oracle數(shù)據(jù)庫管理、開發(fā)與實踐
- The Natural Language Processing Workshop
- 改進的群智能算法及其應(yīng)用
- 數(shù)據(jù)庫原理與設(shè)計實驗教程(MySQL版)
- 數(shù)據(jù)中心經(jīng)營之道