引言:在前兩篇博文(數(shù)據(jù)庫(kù)設(shè)計(jì) Step by Step (5)和數(shù)據(jù)庫(kù)設(shè)計(jì) Step by Step (6) —— 提取業(yè)務(wù)規(guī)則)中,我們進(jìn)行了數(shù)據(jù)庫(kù)需求分析,著重討論了兩個(gè)主題:1.理解用戶需求;2.提取業(yè)務(wù)規(guī)則。當(dāng)需求分析完成后,我們就要進(jìn)入到概念數(shù)據(jù)建模環(huán)節(jié)。本篇文章將使用之前介紹過(guò)的“基本實(shí)體關(guān)系模型構(gòu)件”和“高級(jí)實(shí)體關(guān)系模型構(gòu)件”作為建模的基本元素,大家可以回顧數(shù)據(jù)庫(kù)設(shè)計(jì) Step by Step (3)和數(shù)據(jù)庫(kù)設(shè)計(jì) Step by Step (4)中的模型構(gòu)件及語(yǔ)義。
邏輯數(shù)據(jù)庫(kù)設(shè)計(jì)有多種實(shí)現(xiàn)方式,包括:自頂至底,自底至頂以及混合方式。傳統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)是一個(gè)自底至頂?shù)倪^(guò)程,從分析需求中的單個(gè)數(shù)據(jù)元素開(kāi)始,把相關(guān)多個(gè)數(shù)據(jù)元素組合在一起轉(zhuǎn)化為數(shù)據(jù)庫(kù)中的表。這種方式較難應(yīng)對(duì)復(fù)雜的大型數(shù)據(jù)庫(kù)設(shè)計(jì),這就需要結(jié)合自頂至底的設(shè)計(jì)方式。
使用ER模型進(jìn)行概念數(shù)據(jù)建模方便了項(xiàng)目團(tuán)隊(duì)內(nèi)部及與最終用戶之間的交流與溝通。ER建模的高效性還體現(xiàn)在它是一種自頂至底的設(shè)計(jì)方法。一個(gè)數(shù)據(jù)庫(kù)中的實(shí)體數(shù)量比數(shù)據(jù)元素少很多,因?yàn)榇蟛糠謹(jǐn)?shù)據(jù)元素表示的是屬性。辨別實(shí)體并關(guān)注實(shí)體之間的關(guān)系能大大減少需要分析的對(duì)象數(shù)量。
概念數(shù)據(jù)建模連接了兩端,一端是需求分析,其能輔助捕獲需求中的實(shí)體及之間的關(guān)系,便于人們的交流。另一端是關(guān)系型數(shù)據(jù)庫(kù),模型可以很容易的轉(zhuǎn)化為范式化或接近范式化的SQL表。
概念數(shù)據(jù)建模步驟
讓我們進(jìn)一步仔細(xì)觀察應(yīng)在需求分析和概念設(shè)計(jì)階段定義的基本數(shù)據(jù)元素和關(guān)系。一般需求分析與概念設(shè)計(jì)是同步完成的。
使用ER模型進(jìn)行概念設(shè)計(jì)的步驟包括:
下面我們對(duì)這三個(gè)步驟一一進(jìn)行討論。
辨識(shí)實(shí)體與屬性
實(shí)體和屬性的概念及ER構(gòu)圖都很簡(jiǎn)單,但要在需求中區(qū)分實(shí)體和屬性不是一件易事。例如:需求描述中有句話,“項(xiàng)目地址位于某個(gè)城市”。這句話中的城市是一個(gè)實(shí)體還是一個(gè)屬性呢?又如:每一名員工有一份簡(jiǎn)歷。這里的簡(jiǎn)歷是一個(gè)實(shí)體還是一個(gè)屬性呢?
辨別實(shí)體與屬性可參考如下準(zhǔn)則:
這些準(zhǔn)則能引導(dǎo)開(kāi)發(fā)人員得到符合范式的關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)。
如何理解上述的三條準(zhǔn)則呢?
實(shí)體內(nèi)容:實(shí)體應(yīng)包含描述信息。如果一個(gè)數(shù)據(jù)元素有描述型信息,該數(shù)據(jù)元素應(yīng)被識(shí)別為實(shí)體。如果一個(gè)數(shù)據(jù)元素只有一個(gè)標(biāo)識(shí)名,則其應(yīng)被識(shí)別為屬性。以前面的“城市”為例,如果對(duì)于“城市”有一些如所屬國(guó)家、人口等描述信息,則“城市”應(yīng)被識(shí)別為一個(gè)實(shí)體。如果需求中的“城市”只表示一個(gè)城市名,則把“城市”作為屬性附屬與其他實(shí)體,如附屬Project實(shí)體。這一準(zhǔn)則的例外是當(dāng)值的標(biāo)識(shí)是可枚舉的有限集時(shí),應(yīng)作為實(shí)體來(lái)處理。例如把系統(tǒng)中有效的國(guó)家集合定義為實(shí)體。在現(xiàn)實(shí)世界中作為實(shí)體看待的數(shù)據(jù)元素有:Employee,Task,Project,Department,Customer等。
多值屬性:把多值屬性作為實(shí)體。如果一個(gè)實(shí)例的某個(gè)描述符包含多個(gè)對(duì)應(yīng)值,則即使該描述符沒(méi)有自己的描述信息也應(yīng)作為實(shí)體進(jìn)行建模。例如:一個(gè)人會(huì)有許多愛(ài)好,如:看電影、打游戲、大籃球等。愛(ài)好對(duì)于一個(gè)人來(lái)說(shuō)就是多值屬性,則愛(ài)好應(yīng)作為實(shí)體來(lái)看待。
屬性依附:把屬性附加在其最直接描述的實(shí)體上。例如:“office-building-name”作為“Department”屬性比作為“Employee”的屬性合適。識(shí)別實(shí)體與屬性,并把屬性附加到實(shí)體中是一個(gè)循環(huán)迭代的過(guò)程。
識(shí)別泛化層次
如果實(shí)體之間有泛化層次關(guān)系,則把標(biāo)識(shí)符和公共的描述符(屬性)放在超類實(shí)體中,把相同的標(biāo)識(shí)符和特有的描述符放在子類實(shí)體中。舉例來(lái)說(shuō),在ER模型中有5個(gè)實(shí)體,分別是Employee、Manager、Engineer、Technician、Secretary。其中Employee可以作為Manager、Engineer、Technician、Secretary的超類實(shí)體。我們可以把標(biāo)識(shí)符empno,公共描述符empname、address、date-of-birth放在超類實(shí)體中。子類實(shí)體Manager中放empno,特有描述符jobtitle。Engineer實(shí)體中放empno,特有描述符jobtitle,highest-degree等。
定義關(guān)系
在識(shí)別實(shí)體和屬性之后我們可以處理代表實(shí)體之間聯(lián)系的數(shù)據(jù)元素即關(guān)系。關(guān)系在需求描述中一般是一些動(dòng)詞如:works-in、works-for、purchases、drives,這些動(dòng)詞聯(lián)系了不同的實(shí)體。
對(duì)于任何關(guān)系,需要明確以下幾個(gè)方面。
注:關(guān)系的這些概念可參看數(shù)據(jù)庫(kù)設(shè)計(jì) Step by Step (3),這里不再贅述。
冗余關(guān)系
仔細(xì)分析冗余的關(guān)系。描述同一概念的兩個(gè)或多個(gè)關(guān)系被認(rèn)為是冗余的。當(dāng)把ER模型轉(zhuǎn)化為關(guān)系數(shù)據(jù)庫(kù)中的表時(shí),冗余的關(guān)系可能造成非范式化的表。需要注意的是兩個(gè)實(shí)體間允許兩個(gè)或更多關(guān)系的存在,只要這些關(guān)系具有不同的含義。在這種情況下這些關(guān)系不是冗余的。
舉例來(lái)說(shuō),如下圖1中Employee生活的City與該Employee所屬的Professional-association的所在City可以不同(兩種含義),故關(guān)系lives-in非冗余。
如下圖2中的Employee工作的City與該Employee參與的Project的所在City在任何情況下都一致(同種含義),故關(guān)系works-in冗余。
三元關(guān)系
非常小心的定義三元關(guān)系,只有當(dāng)使用多個(gè)二元關(guān)系也無(wú)法充分描述多個(gè)實(shí)體間的語(yǔ)義時(shí),我們才會(huì)定義三元關(guān)系。以Technician、Project、Notebook為例。
例1:如果 一個(gè)Technician只做一個(gè)Project,一個(gè)Project只有一個(gè)Technician,每個(gè)Project會(huì)被獨(dú)立記錄在一本Notebook中。
例2:如果一個(gè)Technician能同時(shí)做多個(gè)Project,一個(gè)Project可以有多個(gè)Technician同時(shí)參與,每個(gè)Project有一本Notebook(多個(gè)做同一個(gè)Project的Technician共用一本Notebook)。
例3:如果一個(gè)Technician能同時(shí)做多個(gè)Project,一個(gè)Project可以有多個(gè)Technician同時(shí)參與,一個(gè)Technician在一個(gè)Project中使用獨(dú)立的一本Notebook。
注:三元關(guān)系的語(yǔ)義分析可參看數(shù)據(jù)庫(kù)設(shè)計(jì) Step by Step (4),這里不再贅述。
我們假設(shè)要為一家工程項(xiàng)目公司設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù)來(lái)跟蹤所有的全職員工,包括員工被分配的項(xiàng)目,所擁有的技能,所在的部門和事業(yè)部,所屬于的專業(yè)協(xié)會(huì),被分配的電腦。
單個(gè)視圖的ER建模
通過(guò)需求收集與分析過(guò)程,我們獲得了數(shù)據(jù)庫(kù)的3個(gè)視圖。
第一個(gè)視圖是人力資源管理視圖。每一個(gè)員工屬于一個(gè)部門。事業(yè)部是公司的基本單元,每個(gè)事業(yè)部包含多個(gè)部門。每一個(gè)部門和事業(yè)部都有一個(gè)經(jīng)理,我們需要跟蹤每一個(gè)經(jīng)理。這一視圖的ER模型如圖6所示。
第二個(gè)視圖定義了每個(gè)員工的頭銜,如工程師、技術(shù)員、秘書、經(jīng)理等。工程師一般屬于某個(gè)專業(yè)協(xié)會(huì),并可能被分配一臺(tái)工作站。秘書和經(jīng)理會(huì)被分配臺(tái)式電腦。公司會(huì)儲(chǔ)備一些臺(tái)式電腦和工作站,以分配給新員工或當(dāng)員工的電腦送修時(shí)進(jìn)行出借。員工之間可能有夫妻關(guān)系,這也需要在系統(tǒng)中進(jìn)行跟蹤,以防止夫妻員工之間有直接領(lǐng)導(dǎo)關(guān)系。這一視圖的ER模型如圖7所示。
第三個(gè)視圖如圖8所示,包含員工(工程師、技術(shù)員)分配項(xiàng)目的信息。員工可以同時(shí)參與多個(gè)項(xiàng)目,每一個(gè)項(xiàng)目可以在不同的地方(城市)設(shè)有總部。但一個(gè)員工在指定的地點(diǎn)只能做當(dāng)?shù)氐囊粋€(gè)項(xiàng)目。員工在不同的項(xiàng)目中可以選用不同的技能。
全局ER圖
對(duì)三個(gè)視圖的簡(jiǎn)單集成可得到全局ER圖,如圖9所示,它是構(gòu)造范式化表的基礎(chǔ)。全局ER圖中的每一個(gè)關(guān)系都是基于企業(yè)中實(shí)際數(shù)據(jù)的一個(gè)可驗(yàn)證斷言。對(duì)這些斷言進(jìn)行分析導(dǎo)出了從ER圖到關(guān)系數(shù)據(jù)庫(kù)表的轉(zhuǎn)化。
從全局ER圖中可以看到二元、三元和二元回歸關(guān)系;可選和強(qiáng)制存在性關(guān)系;泛化的分解約束。圖9中三元關(guān)系“skill-used”和“assigned-to”是必須的,因?yàn)槭褂枚P(guān)系無(wú)法描述相同的語(yǔ)義。
可選存在性的使用,Employee與Division或與Department之間是基于常識(shí):大多數(shù)Employee不會(huì)是Division或Department的經(jīng)理。另一個(gè)可選存在性的例子是desktop或workstation的分配,每一臺(tái)desktop或workstation未必都會(huì)分配給一個(gè)人??偠灾?,在把ER模型轉(zhuǎn)化為SQL表之前,所有的關(guān)系、可選約束、泛化層次都需要與系統(tǒng)的最終用戶進(jìn)行確認(rèn)。
總結(jié)來(lái)說(shuō),在關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)中應(yīng)用ER模型會(huì)帶來(lái)如下好處
1. 使用ER模型可幫助項(xiàng)目成員專注在討論實(shí)體之間的重要關(guān)系上,而不受其他細(xì)節(jié)的干擾。
2. ER模型把大量復(fù)雜的語(yǔ)言描述轉(zhuǎn)化為精簡(jiǎn)的、易理解的圖形化描述。
3. 對(duì)原始ER模型的擴(kuò)展,如可選和強(qiáng)制存在性關(guān)系,泛化關(guān)系等加強(qiáng)了ER模型對(duì)現(xiàn)實(shí)語(yǔ)義的描述能力。
4. 從ER模型轉(zhuǎn)化為SQL表有完整的規(guī)則,且易于使用。
實(shí)體關(guān)系(ER)模型參考資料
1. 基本實(shí)體關(guān)系模型構(gòu)件——實(shí)體、關(guān)系、屬性、關(guān)系的度、關(guān)系的連通數(shù)、關(guān)系的屬性、關(guān)系中實(shí)體的存在性(http://www.cnblogs.com/DBFocus/archive/2011/04/24/2026142.html)
2. 高級(jí)實(shí)體關(guān)系模型構(gòu)件——泛化、聚合、三元關(guān)系(http://www.cnblogs.com/DBFocus/archive/2011/05/07/2039674.html)
聯(lián)系客服