模型歷史
ER模型最早由Peter Chen(陳品山)于1976年提出,它在數(shù)據(jù)庫設(shè)計(jì)領(lǐng)域得到了廣泛的認(rèn)同,但很少用作實(shí)際數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)模型。即使對SXL-92數(shù)據(jù)庫來說,設(shè)計(jì)好的數(shù)據(jù)庫也是具有挑戰(zhàn)性的。它們可以在許多關(guān)于數(shù)據(jù)庫設(shè)計(jì)的文獻(xiàn)中找到,比如Toby Teorsey 的著作(1994 )。
大部分?jǐn)?shù)據(jù)庫設(shè)計(jì)產(chǎn)品使用實(shí)體-聯(lián)系模型(ER模型)幫助用戶進(jìn)行數(shù)據(jù)庫設(shè)計(jì)。ER數(shù)據(jù)庫設(shè)計(jì)工具提供了
一個“方框與箭頭”的繪圖工具,幫助用戶建立ER圖來描繪數(shù)據(jù)。
實(shí)體聯(lián)系模型,實(shí)體關(guān)系模型或?qū)嶓w聯(lián)系模式圖(ERD)是由美籍華裔計(jì)算機(jī)科學(xué)家陳品山(Peter Chen)發(fā)明,是概念數(shù)據(jù)模型的高層描述所使用的數(shù)據(jù)模型或模式圖,它為表述這種實(shí)體聯(lián)系模式圖形式的數(shù)據(jù)模型提供了圖形符號。這種數(shù)據(jù)模型典型的用在信息系統(tǒng)設(shè)計(jì)的第一階段;比如它們在需求分析階段用來描述信息需求和/或要存儲在數(shù)據(jù)庫中的信息的類型。但是數(shù)據(jù)建模技術(shù)可以用來描述特定論域(就是感興趣的區(qū)域)的任何本體(就是對使用的術(shù)語和它們的聯(lián)系的概述和分類)。在基于數(shù)據(jù)庫的信息系統(tǒng)設(shè)計(jì)的情況下,在后面的階段(通常叫做邏輯設(shè)計(jì)),概念模型要映射到邏輯模型如關(guān)系模型上;它依次要在物理設(shè)計(jì)期間映射到物理模型上。注意,有時(shí)這兩個階段被一起稱為"物理設(shè)計(jì)"。
成分
在ER圖中有如下四個成分:
矩形框:表示實(shí)體,在框中記入實(shí)體名。
菱形框:表示聯(lián)系,在框中記入聯(lián)系名。
橢圓形框:表示實(shí)體或聯(lián)系的屬性,將屬性名記入框中。對于主屬性名,則在其名稱下劃一下劃線。
連線:實(shí)體與屬性之間;實(shí)體與聯(lián)系之間;聯(lián)系與屬性之間用直線相連,并在直線上標(biāo)注聯(lián)系的類型。(對于一對一聯(lián)系,要在兩個實(shí)體連線方向各寫1; 對于一對多聯(lián)系,要在一的一方寫1,多的一方寫N;對于多對多關(guān)系,則要在兩個實(shí)體連線方向各寫N,M。)
構(gòu)圖要素
構(gòu)成E-R圖的3個基本要素是實(shí)體型、屬性和聯(lián)系,其表示方法為:
實(shí)體
一般認(rèn)為,客觀上可以相互區(qū)分的事物就是實(shí)體,實(shí)體可以是具體的人和物,也可以是抽象的概念與聯(lián)系。關(guān)鍵在于一個實(shí)體能與另一個實(shí)體相區(qū)別,具有相同屬性的實(shí)體具有相同的特征和性質(zhì)。用實(shí)體名及其屬性名集合來抽象和刻畫同類實(shí)體**。在E-R圖中用矩形**表示,矩形框內(nèi)寫明實(shí)體名;比如學(xué)生張三、學(xué)生李四都是實(shí)體。如果是弱實(shí)體的話,在矩形外面再套實(shí)線矩形。
屬性
實(shí)體所具有的某一特性,一個實(shí)體可由若干個屬性來刻畫。屬性不能脫離實(shí)體,屬性是相對實(shí)體而言的。在E-R圖中用橢圓形表示,并用無向邊將其與相應(yīng)的實(shí)體連接起來;比如學(xué)生的姓名、學(xué)號、性別、都是屬性。如果是多值屬性的話,在橢圓形外面再套實(shí)線橢圓。如果是派生屬性則用虛線橢圓表示。
聯(lián)系
聯(lián)系也稱關(guān)系,信息世界中反映實(shí)體內(nèi)部或?qū)嶓w之間的關(guān)聯(lián)。實(shí)體內(nèi)部的聯(lián)系通常是指組成實(shí)體的各屬性之間的聯(lián)系;實(shí)體之間的聯(lián)系通常是指不同實(shí)體集之間的聯(lián)系。在E-R圖中用菱形表示,菱形框內(nèi)寫明聯(lián)系名,并用無向邊分別與有關(guān)實(shí)體連接起來,同時(shí)在無向邊旁標(biāo)上聯(lián)系的類型(1 : 1,1 : n或m : n)。比如老師給學(xué)生授課存在授課關(guān)系,學(xué)生選課存在選課關(guān)系。如果是弱實(shí)體的聯(lián)系則在菱形外面再套菱形。
一般性約束
實(shí)體-聯(lián)系數(shù)據(jù)模型中的聯(lián)系型,存在3種一般性約束:一對一約束(聯(lián)系)、一對多約束(聯(lián)系)和多對多約束(聯(lián)系),它們用來描述實(shí)體集之間的數(shù)量約束:
(1) 一對一聯(lián)系(1 ∶1)
對于兩個實(shí)體集A和B,若A中的每一個值在B中至多有一個實(shí)體值與之對應(yīng),反之亦然,則稱實(shí)體集A和B具有一對一的聯(lián)系。
一個學(xué)校只有一個正校長,而一個校長只在一個學(xué)校中任職,則學(xué)校與校長之間具有一對一聯(lián)系。
(2) 一對多聯(lián)系(1 ∶N)
對于兩個實(shí)體集A和B,若A中的每一個值在B中有多個實(shí)體值與之對應(yīng),反之B中每一個實(shí)體值在A中至多有一個實(shí)體值與之對應(yīng),則稱實(shí)體集A和B具有一對多的聯(lián)系。
例如,某校教師與課程之間存在一對多的聯(lián)系“教”,即每位教師可以教多門課程,但是每門課程只能由一位教師來教。一個專業(yè)中有若干名學(xué)生,而每個學(xué)生只在一個專業(yè)中學(xué)習(xí),則專業(yè)與學(xué)生之間具有一對多聯(lián)系
(3) 多對多聯(lián)系(M ∶N)
對于兩個實(shí)體集A和B,若A中每一個實(shí)體值在B中有多個實(shí)體值與之對應(yīng),反之亦然,則稱實(shí)體集A與實(shí)體集B具有多對多聯(lián)系
例如,表示學(xué)生與課程間的聯(lián)系“選修 ”是多對多的,即一個學(xué)生可以學(xué)多門課程,而每門課程可以有多個學(xué)生來學(xué)。聯(lián)系也可能有屬性。例如,學(xué)生“ 選修” 某門課程所取得的成績,既不是學(xué)生的屬性也不是課程的屬性。由于“ 成績” 既依賴于某名特定的學(xué)生又依賴于某門特定的課程,所以它是學(xué)生與課程之間的聯(lián)系“ 選修”的屬性。
實(shí)際上,一對一聯(lián)系是一對多聯(lián)系的特例,而一對多聯(lián)系又是多對多聯(lián)系的特例。2聯(lián)系是隨著數(shù)據(jù)庫語義而改變的,假如有如下3種語義規(guī)定:
例如,一個部門有一個經(jīng)理,而每個經(jīng)理只在一個部門任職,則部門與經(jīng)理的聯(lián)系是一對一的。
一個員工可以同時(shí)是多個部門的經(jīng)理,而一個部門只能有一個經(jīng)理,則這種規(guī)定下“員工”與“部門”之間的“管理”聯(lián)系就是1:n的聯(lián)系了。
一個員工可以同時(shí)在多個部門工作,而一個部門有多個員工在其中工作,則“員工”與“部門”的“工作”聯(lián)系為m:n聯(lián)系。3
弱實(shí)體
弱實(shí)體(weak entity)是一種數(shù)據(jù)庫系統(tǒng)術(shù)語。其定義為一個實(shí)體對于另一個實(shí)體(一般為強(qiáng)實(shí)體,也可以是依賴于其他強(qiáng)實(shí)體的弱實(shí)體)具有很強(qiáng)的依賴聯(lián)系,而且該實(shí)體主鍵的一部分或全部從其強(qiáng)實(shí)體(或者對應(yīng)的弱實(shí)體依賴的強(qiáng)實(shí)體)中獲得,則稱該實(shí)體為弱實(shí)體。3
作圖步驟
(1)確定所有的實(shí)體集合;
(2)選擇實(shí)體集應(yīng)包含的屬性;
(3)確定實(shí)體集之間的聯(lián)系;
(4)確定實(shí)體集的關(guān)鍵字,用下劃線在屬性上表明關(guān)鍵字的屬性組合;
(5)確定聯(lián)系的類型,在用線將表示聯(lián)系的菱形框聯(lián)系到實(shí)體集時(shí),在線旁注明是1或n(多)來表示聯(lián)系的類型。
設(shè)計(jì)步驟
調(diào)查分析
(1)選擇局部應(yīng)用在需求分析階段,通過對應(yīng)用環(huán)境和要求進(jìn)行詳盡的調(diào)查分析,用多層數(shù)據(jù)流圖和數(shù)據(jù)字典描述了整個系統(tǒng)。
設(shè)計(jì)分E-R圖的第一步,就是要根據(jù)系統(tǒng)的具體情況,在多層的數(shù)據(jù)流圖中選擇一個適當(dāng)層次的(經(jīng)驗(yàn)很重要)數(shù)據(jù)流圖,讓這組圖中每一部分對應(yīng)一個局部應(yīng)用,我們即可以以這一層次的數(shù)據(jù)流圖為出發(fā)點(diǎn),設(shè)計(jì)分E-R圖。一般而言,中層的數(shù)據(jù)流圖能較好地反映系統(tǒng)中各局部應(yīng)用的子系統(tǒng)組成,因此人們往往以中層數(shù)據(jù)流圖作為設(shè)計(jì)分E-R圖的依據(jù)。
(2)逐一設(shè)計(jì)分E-R圖每個局部應(yīng)用都對應(yīng)了一組數(shù)據(jù)流圖,局部應(yīng)用涉及的數(shù)據(jù)都已經(jīng)收集在數(shù)據(jù)字典中了?,F(xiàn)就是要將這些數(shù)據(jù)從數(shù)據(jù)字典中抽取出來,參照數(shù)據(jù)流圖,<1> 標(biāo)定局部應(yīng)用中的實(shí)體, <2> 實(shí)體的屬性、標(biāo)識實(shí)體的碼,<3> 確定實(shí)體之間的聯(lián)系及其類型(1:1、1:n、m:n)。
下面是對<1>、<2>和<3>步驟的具體說明:
<1> 標(biāo)定局部應(yīng)用中的實(shí)體現(xiàn)實(shí)世界中一組具有某些共同特性和行為的對象就可以抽象為一個實(shí)體。對象和實(shí)體之間是"is member of "的關(guān)系。例如在學(xué)校環(huán)境中,可以把張三、李四、王五等對象抽象為學(xué)生實(shí)體。對象類型的組成成分可以抽象為實(shí)體的屬性。組成成分與對象類型之間是"is part of "的關(guān)系。例如學(xué)號、姓名、專業(yè)、年級等可以抽象為學(xué)生實(shí)體的屬性。其中學(xué)號為標(biāo)識學(xué)生實(shí)體的碼。
<2> 實(shí)體的屬性、標(biāo)識實(shí)體的碼實(shí)際上實(shí)體與屬性是相對而言的,很難有截然劃分的界限。同一事物,在一種應(yīng)用環(huán)境中作為"屬性 ",在另一種應(yīng)用環(huán)境中就必須作為"實(shí)體 "。一般說來,在給定的應(yīng)用環(huán)境中:
a、屬性不能再具有需要描述的性質(zhì)。即屬性必須是不可分的數(shù)據(jù)項(xiàng)。
b、屬性不能與其他實(shí)體具有聯(lián)系。聯(lián)系只發(fā)生在實(shí)體之間。
<3> 確定實(shí)體之間的聯(lián)系及其類型(1:1、1:n、 m:n)。根據(jù)需求分析,要考察實(shí)體之間是否存在聯(lián)系,有無多余聯(lián)系。
合并生成
各分E-R圖之間的沖突主要有三類:屬性沖突、命名沖突和結(jié)構(gòu)沖突。
1.屬性沖突 。
(1) 屬性域沖突,即屬性值的類型、取值范圍或取值集合不同。例如:屬性“零件號”有的定義為字符型,有的為數(shù)值型;
(2) 屬性取值單位沖突。例如:屬性“重量”有的以克為單位,有的以公斤為單位。
2.命名沖突 。
(1) 同名異義。不同意義對象相同名稱;
(2) 異名同義(一義多名)。同意義對象不相同名稱。例如:“項(xiàng)目”和“課題”。
3.結(jié)構(gòu)沖突。
(1) 同一對象在不同應(yīng)用中具有不同的抽象。例如"課程 "在某一局部應(yīng)用中被當(dāng)作實(shí)體,而在另一局部應(yīng)用中則被當(dāng)作屬性;
(2) 同一實(shí)體在不同局部視圖中所包含的屬性不完全相同,或者屬性的排列次序不完全相同;
(3) 實(shí)體之間的聯(lián)系在不同局部視圖中呈現(xiàn)不同的類型。例如實(shí)體E1與E2在局部應(yīng)用A中是多對多聯(lián)系,而在局部應(yīng)用B中是一對多聯(lián)系;又如在局部應(yīng)用X中E1與E2發(fā)生聯(lián)系,而在局部應(yīng)用Y中E1、E2、E3三者之間有聯(lián)系。解決方法是根據(jù)應(yīng)用的語義對實(shí)體聯(lián)系的類型進(jìn)行綜合或調(diào)整。
修改重構(gòu)
生成基本E-R圖分E-R圖經(jīng)過合并生成的是初步E-R圖。之所以稱其為初步E-R圖,是因?yàn)槠渲锌赡艽嬖谌哂嗟臄?shù)據(jù)和冗余的實(shí)體間聯(lián)系,即存在可由基本數(shù)據(jù)導(dǎo)出的數(shù)據(jù)和可由其他聯(lián)系導(dǎo)出的聯(lián)系。冗余數(shù)據(jù)和冗余聯(lián)系容易破壞數(shù)據(jù)庫的完整性,給數(shù)據(jù)庫維護(hù)增加困難,因此得到初步E-R圖后,還應(yīng)當(dāng)進(jìn)一步檢查E-R圖中是否存在冗余,如果存在,應(yīng)設(shè)法予以消除。修改、重構(gòu)初步E-R圖以消除冗余,主要采用分析方法。除此外,還可以用規(guī)范化理論來消除冗余。
E-R圖的設(shè)計(jì)
E-R圖設(shè)計(jì)的正確與否取決于數(shù)據(jù)庫設(shè)計(jì)人員能否真正把握應(yīng)用環(huán)境的業(yè)務(wù)流程以及在該業(yè)務(wù)流程中所涉及的各個客觀對象和他們之間發(fā)生的活動,這需要作準(zhǔn)確深入的用戶需求分析。這些客觀對象如果需要記錄的話,就抽象為E-R圖中的實(shí)體(描述實(shí)體的眾多相關(guān)數(shù)據(jù)就抽象為實(shí)體的屬性,將具有相同屬性的眾多實(shí)體抽象為實(shí)體型)。它們之間發(fā)生的活動如果也需要記錄的話,就抽象為E-R圖中的聯(lián)系,這是E-R圖設(shè)計(jì)的重點(diǎn)。