數據庫設計 Step by Step (3)

作者: DBFocus  來源: 博客園  發布時間: 2011-04-26 09:50  閱讀: 3321 次  推薦: 1   原文鏈接   [收藏]  

  引言:數據庫設計 Step by Step (2)在園子里發表之后,收到了一些郵件,還有朋友直接電話我詢問為什么不包含數據庫物理設計方面的內容。我在這里解釋一下,數據庫物理設計與數據庫產品是密切相關的,本系列的專注點是較為通用的數據庫設計理念與方法,這也是國內軟件項目中容易被忽視的一塊。今天我們將學習實體關系(ER)模型構件及其語義,這是數據庫邏輯設計的基礎。內容可能有些枯燥,但卻非常重要和有用。

  由于內容比較多,我們將分兩講來學習實體關系模型構件。

  今天我們先來學習基本實體關系模型。

image  實體關系(ER)模型的目標是捕獲現實世界的數據需求,并以簡單、易理解的方式表現出來。ER模型可用于項目組內部交流或用于與用戶討論系統數據需求。

  ER模型中的基本元素

  基本的ER模型包含三類元素:實體、關系、屬性

image圖1 實體、關系、屬性的ER構圖

  實體(Entities):實體是首要的數據對象,常用于表示一個人、地方、某樣事物或某個事件。一個特定的實體被稱為實體實例(entity instance或entity occurrence)。實體用長方形框表示,實體的名稱標識在框內。一般名稱單詞的首字母大寫。

  關系(Relationships):關系表示一個或多個實體之間的聯系。關系依賴于實體,一般沒有物理概念上的存在。關系最常用來表示實體之間,一對一,一對多,多對多的對應。關系的構圖是一個菱形,關系的名稱一般為動詞。關系的端點聯系著角色(role)。一般情況下角色名可以省略,因為實體名和關系名已經能清楚的反應角色的概念,但有些情況下我們需標出角色名來避免歧義。

  屬性(Attributes):屬性為實體提供詳細的描述信息。一個特定實體的某個屬性被稱為屬性值。Employee實體的屬性可能有:emp-id, emp-name, emp-address, phone-no……。屬性一般以橢圓形表示,并與描述的實體連接。屬性可被分為兩類:標識符(identifiers),描述符(descriptors)。Identifiers可以唯一標識實體的一個實例(key),可以由多個屬性組成。ER圖中通過在屬性名下加上下劃線來標識。多值屬性(multivalued attributes)用兩條線與實體連接,eg:hobbies屬性(一個人可能有多個hobby,如reading,movies…)。復合屬性(Complex attributes)本身還有其它屬性。

  辨別強實體與弱實體:強實體內部有唯一的標識符。弱實體(weak entities)的標識符來自于一個或多個其它強實體。弱實體用雙線長方形框表示,依賴于強實體而存在。

  深入理解關系

  關系在ER模型中扮演了非常重要的角色。通過ER圖可以描述實體間關系的度、連通數、存在性信息。

  我們一一來解釋這些概念。首先我們來看一下關系在ER圖中的各種語義。

image圖2 關系的度、連通數、存在性

  關系的度(Degree of a Relationship)

表示關系所關聯的實體數量。二元關系與三元關系的度分別為2和3,以此可以類推至n元。二元關系是最常見的關系。

一個Employee與另一個Employee之間的領導關系稱為二元回歸關系。如圖2中所示,Employee實體通過關系manages與自身連接。由于Employee在這一關系中扮演兩個角色,故標出了角色名(manager和subordinate)。

三元關系聯系三個實體。當二元關系無法準確描述關聯的語義時,就需要使用三元關系。我們來看下面這個例子,下圖(1)能反映出一個Employee在某個Project中使用了什么Skill。下圖(2)只能看出Employee有什么Skill,參與了哪些Project,但無法知道在某個Project中使用的特定Skill。

image圖3 三元關系蘊含的語義

需要注意的是有些情況下會錯誤的定義三元關系。這些三元關系可分解為2個或3個二元關系,來達到化簡與語義的純凈。以后的博文中會進一步詳細討論三元關系。

一個實體可以參與到任意多個關系中。每個關系可以聯系任意多個元(實體),而且兩個實體之間也能有任意多個二元關系。

  關系的連通數(Connectivity of a Relationship)

表示關系所關聯的實例數量的約束。

連通數的值可以是“一”或“多”。“一”這一端,在ER圖中通過在實體與關系間標記“1”表示。“多”一端標記“N”表示。如圖2中關系連通數部分,“一”對“一”:Department is managed by Employee;“一”對“多”:Department has Employees;“多”對“多”:Employee may work on many Projects and each Project may have many Employees。

有些情況下最大連通數是確定的,可以用數值代替N。如:田徑隊隊員有12人。

  關系的屬性

關系也能有屬性。如下圖4所示,某員工參與某項目的起始日期,某員工在某項目中被分配的任務只有放在關系works-on上才有意義。

image圖4 關系的屬性

需要注意的是關系的屬性一般出現在“多”對“多”的二元關系或三元關系上。一般“一”對“一”或“一”對“多”關系上不會放屬性(會引起歧義)。而且這些屬性可以移至一端的實體中。如下圖5所示,如果部門與員工(經理)之間是“一”對“一”關系,在建模中可能把start-date作為關系is managed by的屬性(表示被接管的時間),這個屬性可以移至Department或Employee實體中。

image圖5 部門與經理之間的一對一管理關系

大家可以思考一下如果部門和經理之間是“多”對“多”關系,即交叉管理,那又會怎樣?

  關系中實體的存在性(Existence of an Entity in a Relationship)

關系中實體的存在性可以是強制的或可選的。當關系中的某一邊實體(無論是“一”或“多”端)必須總是存在,則該實體為強制的。反之,該實體為可選的。

在實體與關系之間的連接線上標識“0”來表示可選存在性。含義是最小連通數為0。

強制存在性表示最小連通數為1。在存在性不確定或不可知的情況下,默認最小連通數為1。

在ER圖中最大連通數顯式地標識在實體旁邊。如圖6所示,其蘊含的語義為一個Department有且只有一個Employee來當經理,一個Employee可能是一個Department的經理,也可能不是。

image圖6 關系中實體的存在性

  其他概念數據模型標記法

  前文中使用的ER構圖方法是Peter Chen 1976年提出的。在現代數據庫設計領域,還有其他多種ER模型標記法。

  我們來看一下另一種使用較多的標記法,“crow’s-foot”(魚尾紋)標記法,并與前面介紹的標記法進行一個簡單對比。

  學習每一種標記法沒有意義。在你的組織中推廣應用一種標記法,使其成為大家共通的“語言”。

image圖7 Chen式標記法與crow’s-foot標記法對照

image  主要內容回顧

  1. 組成ER模型的基本元素包括:實體、關系、屬性

  2. 深入理解關系中包含的語義:關系的度、關系的連通數、關系的存在性

  3. 了解ER模型的不同標記法,掌握其中一種標記法,并在你的項目中推廣使用

  實體關系模型參考

  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/

1
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()