數(shù)據(jù)庫的設(shè)計(jì)通常需要經(jīng)歷四個(gè)部分:
- 需求收集與分析(Requirements Collection and Analysis)
- 概念設(shè)計(jì)(Conceptual Design) —— 設(shè)計(jì)實(shí)體關(guān)系模型 (ER Model)
- 邏輯設(shè)計(jì)(Logical Design)—— 實(shí)現(xiàn)從 ER 模型到關(guān)系模式(Relation Schemas)的轉(zhuǎn)換。
- 物理設(shè)計(jì)(Physical Design)
本文主要介紹一下概念設(shè)計(jì)的部分。
概念設(shè)計(jì)
概念設(shè)計(jì)是一個(gè)構(gòu)建概念數(shù)據(jù)模型的過程,這個(gè)概念數(shù)據(jù)模型在抽象的高層建模;需要足夠簡(jiǎn)單且通常是圖形化的;并且能夠用于與非技術(shù)用戶交流數(shù)據(jù)庫的需求。這里主要介紹如何使用 ER 模型來實(shí)現(xiàn)概念設(shè)計(jì)。
ER 模型
ER 模型主要有三個(gè)關(guān)鍵方面:
- 數(shù)據(jù)結(jié)構(gòu):ER 模型中的數(shù)據(jù)表現(xiàn)為實(shí)體與屬性之間的關(guān)系
- 數(shù)據(jù)完整性:對(duì)于ER模型,鍵(key)用于實(shí)體或者關(guān)系類型,而基數(shù)約束或者參與約束用于關(guān)系類型。
- 數(shù)據(jù)操作:ER 模型中不存在對(duì)數(shù)據(jù)的任何操作。
ER 模型中的關(guān)鍵概念與關(guān)系型數(shù)據(jù)庫的概念聯(lián)系如下:
| 關(guān)系型數(shù)據(jù)庫 | 實(shí)體關(guān)系模型 |
|---|---|
| 屬性 | 屬性 |
| 域 | 域 |
| 超鍵 / 主鍵 / 候選鍵 | 超鍵 / 主鍵 / 候選鍵 |
| 元組 | 實(shí)體 / 關(guān)系 |
| 關(guān)系 | 實(shí)體集合 / 關(guān)系集合 |
| 關(guān)系模型 | 實(shí)體類型 / 關(guān)系類型 |
ER 模型的基本圖表元素有:
| 屬性(橢圓) | 用于描述實(shí)體或者關(guān)系的性能或者特征 | |
| 主要屬性(內(nèi)含下劃線的橢圓) | 能夠用于識(shí)別特定實(shí)體的屬性 | |
| 實(shí)體(長(zhǎng)方形) | 在現(xiàn)實(shí)世界中獨(dú)立存在的單一個(gè)體類別 | |
| 關(guān)系(菱形) | 實(shí)體之間的聯(lián)系 |
實(shí)體類型與實(shí)體集合
實(shí)體類型定義了一個(gè)擁有相同屬性的實(shí)體的集合。
實(shí)體集合是指在特定時(shí)間下,數(shù)據(jù)庫中所有實(shí)體類型的集合。
對(duì)于某一個(gè)特定的實(shí)體以及其屬性,可以用下面的形式表示:
實(shí)體名為員工(Employee),該實(shí)體類型的屬性包括工號(hào)(SSN)、姓名,工資和地址。需要注意的是,在這里工號(hào)是主屬性(下劃線),地址是一個(gè)多值屬性(雙橢圓),意味著地址這個(gè)屬性對(duì)于同一個(gè)實(shí)體而言,允許擁有一個(gè)或者一個(gè)以上的值。
弱實(shí)體類型
弱實(shí)體類型指的是一個(gè)實(shí)體類型沒有足夠的屬性來構(gòu)建一個(gè)能夠識(shí)別特定個(gè)體的主鍵,因此它需要依賴一個(gè)能夠被確定的實(shí)體才能存在。弱實(shí)體類型必須擁有一個(gè)或者多個(gè)屬性,其中包括弱主鍵,與其所依賴的實(shí)體的主鍵共同作為該弱實(shí)體類型的主鍵,從而識(shí)別特定的個(gè)體。表示如下:
在這里,兒童(Child)是一個(gè)弱實(shí)體類型,不同的兒童可能會(huì)擁有相同的姓名和年齡,因此把兒童這個(gè)實(shí)體與員工建立依賴關(guān)系,其關(guān)系為員工-擁有(has)-兒童,通過 SSN 和 Cname 共同構(gòu)建能夠識(shí)別特定兒童的主鍵。
關(guān)系類型與關(guān)系集合
關(guān)系類型指的是多個(gè)實(shí)體之間的聯(lián)系,該聯(lián)系允許擁有隸屬于這段聯(lián)系的獨(dú)立的屬性。
關(guān)系集合指的是某個(gè)特定關(guān)系類型聯(lián)系的所有實(shí)體的集合。
表示形式如下:
這里有兩個(gè)實(shí)體,員工(Employee)和部門(Department),員工在部門里工作,這是它們之間的關(guān)系。
在現(xiàn)實(shí)世界里,實(shí)際上還可能會(huì)出現(xiàn)更加復(fù)雜的實(shí)體關(guān)系模型,比如遞歸關(guān)系:
在這里,員工之間存在監(jiān)督者與下屬之間的關(guān)系,監(jiān)督者監(jiān)管下屬,而監(jiān)督者和下屬同樣都屬于員工,并且擁有員工的屬性。
還有更高程度的關(guān)系:
在這個(gè)關(guān)系里,提供商(Supplier)為項(xiàng)目(Project)提供零件(Part),因此提供(Supply)這個(gè)關(guān)系同時(shí)涉及到三個(gè)實(shí)體,且該關(guān)系還具有數(shù)量(Quantity)這個(gè)屬性。
關(guān)系中的約束
ER 模型中的約束關(guān)系通常是指實(shí)體與實(shí)體之間基于某種關(guān)系下的約束。主要包括兩種:
- 基數(shù)比例(Cardinality ratios):指定實(shí)體允許參與到關(guān)系中的最大數(shù)目。
- 參與約束(Participation constraints):指定某個(gè)實(shí)體在其與其他實(shí)體的依賴關(guān)系中是否必然存在。
基數(shù)比例(Cardinality ratios)
基數(shù)比例的類型主要有三種:多對(duì)多(Many-To-Many)、一對(duì)多(One-To-Many)、一對(duì)一(One-To-One)。
-
多對(duì)多(Many-To-Many)
含義:一名員工可以為多個(gè)部門工作;一個(gè)部門里允許擁有多名員工。
-
一對(duì)多(One-To-Many)
含義:一名員工最多只能為一個(gè)部門工作;一個(gè)部門里允許擁有多名員工。
-
一對(duì)一(One-To-One)
含義:一名員工最多只能為一個(gè)部門工作;一個(gè)部門里最多只允許有一個(gè)員工。(雖然這不符合現(xiàn)實(shí)。。。)
在以上三種類型的基礎(chǔ)上,ER 模型還延伸出一種約束:基數(shù)限制。主要含義就是通過一個(gè)整數(shù)來指定兩個(gè)實(shí)體在關(guān)系中允許參與的數(shù)量范圍。表示如下:
含義:一個(gè)員工必須為一個(gè)且最多一個(gè)部門工作;一個(gè)部門必須擁有一個(gè)或者多個(gè)員工。
參與約束(Participation constraints)
參與約束主要分為兩種:完全參與(Total)和局部參與(Partial)。一般情況下,默認(rèn)為局部參與。
-
完全參與(Total)
含義:每一名員工必須為一個(gè)部門工作;一個(gè)部門可能有或者沒有員工。
-
局部參與(Partial)
含義:一名員工可能有或者沒有為一個(gè)部門工作;一個(gè)部門可能有或者沒有員工。
實(shí)體類型中的父類與子類
實(shí)體類型的父類與子類指的是擁有不同名稱的同一個(gè)概念,子類通常是父類實(shí)體根據(jù)其具體的應(yīng)用意義所采用的的更加顯式的表達(dá)。父類與子類之間的關(guān)系被稱為 ISA 關(guān)系類型。
專門化(Specialisation)與一般化(Generalisation)
專門化指的是自上而下定義一個(gè)實(shí)體所擁有的子類的集合。
一般化指的是自下而上地把擁有共同屬性的多個(gè)子類歸納成一個(gè)單一的父類。
在上圖中,員工(Employee)是父類,其子類根據(jù)不同的實(shí)際意義分別為秘書(Secretary)、技術(shù)員(Technician)和工程師(Engineer)。該圖實(shí)現(xiàn)專門后就能得到下面的圖:
圖中的三個(gè)子類通過一般化以后,就能得到前一個(gè)圖。
分離約束(Disjointness constraint)
分離約束主要是用于指定通過專門化產(chǎn)生的子類之間的關(guān)系。子類間的分離約束主要有兩個(gè)方面:
- 分離(disjoint):子類的各個(gè)實(shí)體之間完全分離,不存在任何交集。
-
重疊(overlap):子類的各個(gè)實(shí)體之間可能存在某些交集,即某個(gè)父類的實(shí)體,既可以當(dāng)做其中一個(gè)子類實(shí)體,也能當(dāng)做另一個(gè)子類實(shí)體。
不同的分離約束在 ER 模型中的表示形式如下:
完整性約束(Completeness constraint)
- 完全約束(Total):每一個(gè)父類的實(shí)體必然屬于至少一個(gè)子類的成員。
- 部分約束(Partial):父類的實(shí)體可能不屬于任何一個(gè)子類(默認(rèn)約束)。
構(gòu)建 ER 模型的流程
- 識(shí)別所以實(shí)體類型(包括弱實(shí)體類型);
- 識(shí)別所有關(guān)系類型(包括 ISA 關(guān)系和依賴關(guān)聯(lián));
- 識(shí)別所有實(shí)體和關(guān)系類型對(duì)應(yīng)的屬性(以及每個(gè)屬性的定義域);
- 識(shí)別每個(gè)實(shí)體的主鍵;
- 辨別步驟 2 中找出的所有關(guān)系中的基數(shù)比例;
- 確定上述關(guān)系的參與約束;
- 確定 ISA 關(guān)系中的分離約束和完整性約束。
軟件支持
網(wǎng)絡(luò)上有很多軟件能夠用來畫 ER 模型,比較常用的一個(gè)輕量級(jí)軟件是 TerraER, 它是一個(gè)基于 JRE 運(yùn)行的軟件,支持Windows,Mac,Linux環(huán)境,能夠生成 ER 模型的 XML 文件以及 JPEG 圖片。
下載鏈接:https://github.com/rterrabh/TerraER/releases/download/TerraER3.01/TerraER3.01beta.jar