|
引言:數(shù)據(jù)庫設(shè)計 Step by Step (2)在園子里發(fā)表之后,收到了一些郵件,還有朋友直接電話我詢問為什么不包含數(shù)據(jù)庫物理設(shè)計方面的內(nèi)容。我在這里解釋一下,數(shù)據(jù)庫物理設(shè)計與數(shù)據(jù)庫產(chǎn)品是密切相關(guān)的,本系列的專注點是較為通用的數(shù)據(jù)庫設(shè)計理念與方法,這也是國內(nèi)軟件項目中容易被忽視的一塊。今天我們將學(xué)習(xí)實體關(guān)系(ER)模型構(gòu)件及其語義,這是數(shù)據(jù)庫邏輯設(shè)計的基礎(chǔ)。內(nèi)容可能有些枯燥,但卻非常重要和有用。
由于內(nèi)容比較多,我們將分兩講來學(xué)習(xí)實體關(guān)系模型構(gòu)件。
今天我們先來學(xué)習(xí)基本實體關(guān)系模型。
實體關(guān)系(ER)模型的目標(biāo)是捕獲現(xiàn)實世界的數(shù)據(jù)需求,并以簡單、易理解的方式表現(xiàn)出來。ER模型可用于項目組內(nèi)部交流或用于與用戶討論系統(tǒng)數(shù)據(jù)需求。
ER模型中的基本元素
基本的ER模型包含三類元素:實體、關(guān)系、屬性
實體(Entities):實體是首要的數(shù)據(jù)對象,常用于表示一個人、地方、某樣事物或某個事件。一個特定的實體被稱為實體實例(entity instance或entity occurrence)。實體用長方形框表示,實體的名稱標(biāo)識在框內(nèi)。一般名稱單詞的首字母大寫。
關(guān)系(Relationships):關(guān)系表示一個或多個實體之間的聯(lián)系。關(guān)系依賴于實體,一般沒有物理概念上的存在。關(guān)系最常用來表示實體之間,一對一,一對多,多對多的對應(yīng)。關(guān)系的構(gòu)圖是一個菱形,關(guān)系的名稱一般為動詞。關(guān)系的端點聯(lián)系著角色(role)。一般情況下角色名可以省略,因為實體名和關(guān)系名已經(jīng)能清楚的反應(yīng)角色的概念,但有些情況下我們需標(biāo)出角色名來避免歧義。
屬性(Attributes):屬性為實體提供詳細(xì)的描述信息。一個特定實體的某個屬性被稱為屬性值。Employee實體的屬性可能有:emp-id, emp-name, emp-address, phone-no……。屬性一般以橢圓形表示,并與描述的實體連接。屬性可被分為兩類:標(biāo)識符(identifiers),描述符(descriptors)。Identifiers可以唯一標(biāo)識實體的一個實例(key),可以由多個屬性組成。ER圖中通過在屬性名下加上下劃線來標(biāo)識。多值屬性(multivalued attributes)用兩條線與實體連接,eg:hobbies屬性(一個人可能有多個hobby,如reading,movies…)。復(fù)合屬性(Complex attributes)本身還有其它屬性。
辨別強實體與弱實體:強實體內(nèi)部有唯一的標(biāo)識符。弱實體(weak entities)的標(biāo)識符來自于一個或多個其它強實體。弱實體用雙線長方形框表示,依賴于強實體而存在。
深入理解關(guān)系
關(guān)系在ER模型中扮演了非常重要的角色。通過ER圖可以描述實體間關(guān)系的度、連通數(shù)、存在性信息。
我們一一來解釋這些概念。首先我們來看一下關(guān)系在ER圖中的各種語義。
關(guān)系的度(Degree of a Relationship)
表示關(guān)系所關(guān)聯(lián)的實體數(shù)量。二元關(guān)系與三元關(guān)系的度分別為2和3,以此可以類推至n元。二元關(guān)系是最常見的關(guān)系。
一個Employee與另一個Employee之間的領(lǐng)導(dǎo)關(guān)系稱為二元回歸關(guān)系。如圖2中所示,Employee實體通過關(guān)系manages與自身連接。由于Employee在這一關(guān)系中扮演兩個角色,故標(biāo)出了角色名(manager和subordinate)。
三元關(guān)系聯(lián)系三個實體。當(dāng)二元關(guān)系無法準(zhǔn)確描述關(guān)聯(lián)的語義時,就需要使用三元關(guān)系。我們來看下面這個例子,下圖(1)能反映出一個Employee在某個Project中使用了什么Skill。下圖(2)只能看出Employee有什么Skill,參與了哪些Project,但無法知道在某個Project中使用的特定Skill。
需要注意的是有些情況下會錯誤的定義三元關(guān)系。這些三元關(guān)系可分解為2個或3個二元關(guān)系,來達(dá)到化簡與語義的純凈。以后的博文中會進(jìn)一步詳細(xì)討論三元關(guān)系。
一個實體可以參與到任意多個關(guān)系中。每個關(guān)系可以聯(lián)系任意多個元(實體),而且兩個實體之間也能有任意多個二元關(guān)系。
關(guān)系的連通數(shù)(Connectivity of a Relationship)
表示關(guān)系所關(guān)聯(lián)的實例數(shù)量的約束。
連通數(shù)的值可以是“一”或“多”。“一”這一端,在ER圖中通過在實體與關(guān)系間標(biāo)記“1”表示。“多”一端標(biāo)記“N”表示。如圖2中關(guān)系連通數(shù)部分,“一”對“一”:Department is managed by Employee;“一”對“多”:Department has Employees;“多”對“多”:Employee may work on many Projects and each Project may have many Employees。
有些情況下最大連通數(shù)是確定的,可以用數(shù)值代替N。如:田徑隊隊員有12人。
關(guān)系的屬性
關(guān)系也能有屬性。如下圖4所示,某員工參與某項目的起始日期,某員工在某項目中被分配的任務(wù)只有放在關(guān)系works-on上才有意義。
需要注意的是關(guān)系的屬性一般出現(xiàn)在“多”對“多”的二元關(guān)系或三元關(guān)系上。一般“一”對“一”或“一”對“多”關(guān)系上不會放屬性(會引起歧義)。而且這些屬性可以移至一端的實體中。如下圖5所示,如果部門與員工(經(jīng)理)之間是“一”對“一”關(guān)系,在建模中可能把start-date作為關(guān)系is managed by的屬性(表示被接管的時間),這個屬性可以移至Department或Employee實體中。
圖5 部門與經(jīng)理之間的一對一管理關(guān)系
大家可以思考一下如果部門和經(jīng)理之間是“多”對“多”關(guān)系,即交叉管理,那又會怎樣?
關(guān)系中實體的存在性(Existence of an Entity in a Relationship)
關(guān)系中實體的存在性可以是強制的或可選的。當(dāng)關(guān)系中的某一邊實體(無論是“一”或“多”端)必須總是存在,則該實體為強制的。反之,該實體為可選的。
在實體與關(guān)系之間的連接線上標(biāo)識“0”來表示可選存在性。含義是最小連通數(shù)為0。
強制存在性表示最小連通數(shù)為1。在存在性不確定或不可知的情況下,默認(rèn)最小連通數(shù)為1。
在ER圖中最大連通數(shù)顯式地標(biāo)識在實體旁邊。如圖6所示,其蘊含的語義為一個Department有且只有一個Employee來當(dāng)經(jīng)理,一個Employee可能是一個Department的經(jīng)理,也可能不是。
其他概念數(shù)據(jù)模型標(biāo)記法
前文中使用的ER構(gòu)圖方法是Peter Chen 1976年提出的。在現(xiàn)代數(shù)據(jù)庫設(shè)計領(lǐng)域,還有其他多種ER模型標(biāo)記法。
我們來看一下另一種使用較多的標(biāo)記法,“crow’s-foot”(魚尾紋)標(biāo)記法,并與前面介紹的標(biāo)記法進(jìn)行一個簡單對比。
學(xué)習(xí)每一種標(biāo)記法沒有意義。在你的組織中推廣應(yīng)用一種標(biāo)記法,使其成為大家共通的“語言”。
圖7 Chen式標(biāo)記法與crow’s-foot標(biāo)記法對照
1. 組成ER模型的基本元素包括:實體、關(guān)系、屬性
2. 深入理解關(guān)系中包含的語義:關(guān)系的度、關(guān)系的連通數(shù)、關(guān)系的存在性
3. 了解ER模型的不同標(biāo)記法,掌握其中一種標(biāo)記法,并在你的項目中推廣使用
實體關(guān)系模型參考
1. Entity-relationship model(http://en.wikipedia.org/wiki/Entity-relationship_model)
2. Entity-relationship modelling(http://www.inf.unibz.it/~franconi/teaching/2000/ct481/er-modelling/)
it知識庫:數(shù)據(jù)庫設(shè)計 Step by Step (3),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。