- 數據庫系統原理及MySQL應用教程
- 李輝等編著
- 5035字
- 2020-10-23 14:25:08
4.3 概念結構設計
在需求分析階段,設計人員充分調查并描述了用戶的需求,但這些需求只是現實世界的具體要求,應把這些需求抽象為信息世界的結構,才能更好地實現用戶的需求。
概念結構設計就是將需求分析得到的用戶需求抽象為信息結構,即概念模型。
4.3.1 概念結構設計的必要性
在早期的數據庫設計中,概念結構設計并不是一個獨立的設計階段。當時的設計方式是在需求分析之后,接著就進行邏輯設計。這樣,設計人員在進行邏輯設計時,考慮的因素太多,既要考慮用戶的信息,又要考慮具體DBMS的限制,使得設計過程復雜化,難以控制。為了改善這種狀況,設計了基于E-R模型的數據庫設計方法,即在需求分析和邏輯設計之間增加了一個概念設計階段。在這個階段,設計人員僅從用戶角度看待數據及處理要求和約束,產生一個反映用戶觀點的概念模型,然后再把概念模型轉換成邏輯模型。這樣做有以下3個好處。
1)從邏輯設計中分離出概念設計以后,各階段的任務相對單一化,設計復雜程度大大降低,便于組織管理。
2)概念模型不受特定的DBMS的限制,也獨立于存儲安排和效率方面的考慮,因而比邏輯模型更為穩定。
3)概念模型不含具體的DBMS所附加的技術細節,更容易為用戶所理解,因而更有可能準確反映用戶的信息需求。
4.3.2 概念模型的特點
概念模型作為概念結構設計的表達工具,為數據庫提供一個說明性結構,是設計數據庫邏輯結構即邏輯模型的基礎。因此,概念模型必須具備以下特點:
1)語義表達能力豐富。概念模型能表達用戶的各種需求,充分反映現實世界,包括事物和事物之間的聯系、用戶對數據的處理要求,它是現實世界的一個真實模型。
2)易于交流和理解。概念模型是DBA、設計人員和用戶之間的主要界面,因此,概念模型要表達自然、直觀和容易理解,以便和不熟悉計算機的用戶交換意見,用戶的積極參與是保證數據庫設計成功的關鍵。
3)易于修改和擴充。概念模型要能靈活地加以改變,以反映用戶需求和現實環境的變化。
4)易于向各種數據模型轉換。概念模型獨立于特定的DBMS,因而更加穩定,能方便地向關系模型、網狀模型或層次模型等各種數據模型轉換。
人們提出了許多概念模型,其中最著名、最實用的一種是E-R模型,它將現實世界的信息結構統一用屬性、實體及它們之間的聯系來描述。
4.3.3 概念結構設計的方法與步驟
1.概念結構設計的方法
概念結構設計的方法通常有四種。
1)自頂向下。首先定義全局概念結構的框架,然后逐步細化。
2)自底向上。首先定義各局部應用的概念結構,然后將它們集成起來,得到全局概念結構。
3)逐步擴張。首先定義最重要的核心概念結構,然后向外擴充,以滾雪球的方式逐步生成其他概念結構,直至總體概念結構。
4)混合策略。將自頂向下和自底向上的方法相結合,用自頂向下策略設計一個全局概念結構的框架,以它為框架集成由自底向上策略中設計的各局部概念結構。
其中最常采用的策略是混合策略,即自頂向下進行需求分析,然后再自底向上設計概念結構,其方法如圖4-4所示。

圖4-4 自頂向下分析需求與自底向上概念結構設計
2.概念結構設計的步驟
按照圖4-4所示的自頂向下需求分析與自底向上概念結構設計的方法,概念結構的設計可分為兩步。
1)進行數據抽象,設計局部E-R模型。
2)集成各局部E-R模型,形成全局E-R模型,其步驟如圖4-5所示。

圖4-5 概念結構設計的步驟
3.數據抽象和局部E-R模型設計
概念設計是對現實世界的抽象。所謂抽象就是對實際的人、物、事和概念進行人為的處理,它抽取人們共同關心的特性,忽略非本質的細節,并將這些概念加以精確的描述。
(1)數據抽象
在系統需求分析階段,最后得到了多層的數據流圖、數據字典和系統分析報告。建立局部E-R模型,就是根據系統的具體情況,在多層的數據流圖中選擇一個適當層次的數據流圖,作為設計分E-R圖的出發點,讓這組圖中的每一部分對應一個局部應用。在前面選好的某一層次的數據流圖中,每個局部應用都對應了一組數據流圖,局部應用所涉及的數據存儲在數據字典中。現在就是要將這些數據從數據字典中抽取出來,參照數據流圖,確定每個局部應用包含哪些實體,這些實體又包含哪些屬性,以及實體之間的聯系及其類型。
設計局部E-R模型的關鍵就是正確劃分實體和屬性。實體和屬性之間在形式上并無可以明顯區分的界限,通常是按照現實世界中事物的自然劃分來定義實體和屬性的,對現實世界中的事物進行數據抽象,得到實體和屬性。數據抽象主要有兩種方法:分類和聚集。
1)分類(Classification)
分類就是定義某一類概念作為現實世界中一組對象的類型,并將一組具有某些共同特性和行為的對象抽象為一個實體。
例如,在教學管理中,“王艷”是學生當中的一員,她具有學生們共同的特性和行為:在哪個班、學習哪個專業、年齡有多大等。
2)聚集(Aggregation)
聚集就是定義某一類型的組成部分,并將對象類型的組成部分抽象為實體的屬性。
例如,學號、姓名、性別、年齡、系別等可以抽象為學生實體的屬性。
(2)局部E-R模型設計
設計E-R圖首先需要根據系統的具體情況,在多層的數據流圖中選擇一個適當層次的數據流圖,讓這組圖中的每一部分對應一個局部應用,然后以這一層次的數據流圖為出發點,設計E-R圖。將各局部應用涉及的數據分別從數據字典中抽取出來,參照數據流圖,確定各局部應用中的實體、實體的屬性、標識實體的碼、實體之間的聯系及其類型(1∶1,1∶n,m∶n)。
實際上實體和屬性是相對而言的。同一事物,在一種應用環境中作為“屬性”,在另一種應用環境中就有可能作為“實體”。
如圖4-6所示,大學中的“系”,在某種應用環境中,它只是作為“學生”實體的一個屬性,表明一個學生屬于哪個系;而在另一種環境中,由于需要考慮一個系的系主任、教師人數、學生人數、辦公地點等,因而它需要作為實體。

圖4-6 “系”由屬性上升為實體的示意圖
因此,為了解決這個問題,應當遵循如下兩條基本準則:
1)屬性不能再具有需要描述的性質,即屬性必須是不可分的數據項,不能再由另一些屬性組成。
2)屬性不能與其他實體具有聯系。聯系只發生在實體之間。
符合上述兩條特性的事物一般作為屬性對待。為了簡化E-R圖的處理,現實世界中的事物凡能夠作為屬性對待的,應盡量作為屬性。
【例4-1】設有如下實體。
學生:學號、系名稱、姓名、性別、年齡、選修課程名。
課程:編號、課程名、開課單位、任課教師號。
教師:教師號、姓名、性別、職稱、講授課程編號。
單位:單位名稱、電話、教師號、教師姓名。
上述實體中存在如下聯系:
1)一個學生可選修多門課程,一門課程可為多個學生選修。
2)一個教師可講授多門課程,一門課程可為多個教師講授。
3)一個系可有多個教師,一個教師只能屬于一個系。
根據上述約定,可以得到學生選課局部E-R圖和教師授課局部E-R圖,分別如圖4-7和圖4-8所示。
4.全局E-R模型設計
各個局部E-R圖建立好后,還需要對它們進行合并,集成為一個整體的概念數據結構,即全局E-R圖。局部E-R圖的集成有兩種方法。

圖4-7 學生選課局部E-R圖

圖4-8 教師授課局部E-R圖
1)多元集成法,也叫一次集成,一次性將多個局部E-R圖合并為一個全局E-R圖,如圖4-9a所示。
2)二元集成法,也叫逐步集成,首先集成兩個重要的局部E-R圖,然后用累加的方法逐步將一個新的E-R圖集成進來,如圖4-9b所示。

圖4-9 局部E-R圖集成的兩種方法
在實際應用中,可以根據系統復雜性選擇這兩種方案。如果局部圖比較簡單,可以采用一次集成法。在一般情況下,采用逐步集成法,即每次只綜合兩個圖,這樣可降低難度。
無論使用哪一種方法,E-R圖集成均分為如下兩個步驟:
1)合并,消除各局部E-R圖之間的沖突,生成初步E-R圖。
2)優化,消除不必要的冗余,生成基本E-R圖。
(1)合并分E-R圖,生成初步E-R圖
這個步驟將所有的局部E-R圖綜合成全局概念結構。全局概念結構不僅要支持所有的局部E-R模型,而且必須合理地表示一個完整、一致的數據庫概念結構。
由于各個局部應用所面向的問題不同,并且通常由不同的設計人員進行局部E-R圖設計,因此,各局部E-R圖不可避免地會有許多不一致的地方,通常把這種現象稱為沖突。
因此,當合并局部E-R圖時并不是簡單地將各個E-R圖畫到一起,而是必須消除各個局部E-R圖中的不一致,使合并后的全局概念結構不僅支持所有的局部E-R模型,而且必須是一個能為全系統中所有用戶共同理解和接受的統一的概念模型。合并局部E-R圖的關鍵就是合理消除各局部E-R圖中的沖突。
E-R圖中的沖突有三種:屬性沖突、命名沖突和結構沖突。
1)屬性沖突。屬性沖突又分為屬性值域沖突和屬性的取值單位沖突。
①屬性值域沖突。即屬性值的類型、取值范圍或取值集合不同。例如,學生的學號,通常用數字表示,這樣有些部門就將其定義為數值型,而有些部門則將其定義為字符型。
②屬性的取值單位沖突。比如零件的重量,有的以千克為單位,有的以斤為單位,有的則以克為單位。
屬性沖突屬于用戶業務上的約定,必須與用戶協商后解決。
2)命名沖突。命名不一致可能發生在實體名、字段名或聯系名之間,其中屬性的命名沖突最為常見。一般表現為同名異義或異名同義。
①同名異義,即同一名字的對象在不同的局部應用中具有不同的意義。例如,“單位”在某些部門表示為人員所在的部門,而在某些部門可能表示物品的重量、長度等屬性。
②異名同義,即同一意義的對象在不同的局部應用中具有不同的名稱。例如,對于“房間”這個名稱,在教務管理部門中對應教室,而在后勤管理部門中對應學生宿舍。
命名沖突的解決方法同屬性沖突的相同,需要與各部門協商、討論后加以解決。
3)結構沖突。
①同一對象在不同應用中有不同的抽象,既可能為實體,也可能為屬性。例如,教師的職稱在某一局部應用中被當作實體,而在另一局部應用中被當作屬性。這類沖突在解決時,就是使同一對象在不同應用中具有相同的抽象,或把實體轉換為屬性,或把屬性轉換為實體,但都要符合4.3.3節所介紹的兩條準則。
②同一實體在不同局部應用中的屬性組成不同,可能是屬性個數或屬性的排列次序不同。解決辦法是,合并后的實體的屬性組成為各局部E-R圖中的同名實體屬性的并集,然后再適當調整屬性的排列次序。
③實體之間的聯系在不同局部應用中呈現不同的類型。例如,局部應用X中E1與E2可能是一對一聯系,而在另一局部應用Y中既可能是一對多或多對多聯系,也可能是在E1、E2、E3三者之間有聯系。解決方法:根據應用語義對實體聯系的類型進行綜合或調整。
如何消除各局部E-R圖之間的沖突,并進行局部E-R模型的合并,從而生成初步E-R圖?首先,這兩個局部E-R圖中存在命名沖突,學生選課局部E-R圖中的實體“系”與教師任課局部E-R圖中的實體“單位”都是指系,即所謂異名同義,合并后統一改為“系”,這樣屬性“名稱”和“單位名稱”即可統一為“系名”。其次,還存在結構沖突,實體“系”和實體“課程”在兩個局部E-R圖中的屬性組成不同,合并后這兩個實體的屬性組成為各局部E-R圖中的同名實體屬性的并集。解決上述沖突后,合并兩個局部E-R圖,就能生成初步的全局E-R。
(2)消除不必要的冗余,生成基本E-R圖
在初步的E-R圖中,可能存在冗余的數據和冗余的實體之間的聯系。冗余的數據是指可由基本數據導出的數據,冗余的聯系是指由其他聯系導出的聯系。冗余的存在容易破壞數據庫的完整性,給數據庫的維護增加困難,應該消除。當然,不是所有的冗余數據和冗余聯系都必須消除,有時為了提高某些應用的效率,不得不以冗余信息作為代價。
設計數據庫概念模型時,哪些冗余信息必須消除,哪些冗余信息允許存在,需要根據用戶的整體需求來確定。把消除了冗余的初步E-R圖稱為基本E-R圖。
通常采用分析的方法消除冗余。數據字典是分析冗余數據的依據,還可以通過數據流圖分析出冗余的聯系。
如在圖4-7和圖4-8所示的初步E-R圖中,“課程”實體中的屬性“教師號”可由“講授”這個教師與課程之間的聯系導出,而學生的平均成績可由“選修”聯系中的屬性“成績”中計算出來,所以,“課程”實體中的“教師號”與“學生”實體中的“平均成績”均屬于冗余數據。
另外,“系”和“課程”之間的聯系“開課”,可以由“系”和“教師”之間的“屬于”聯系與“教師”和“課程”之間的“講授”聯系推導出來,所以,“開課”屬于冗余聯系。
這樣,圖4-7和圖4-8的初步E-R圖在消除冗余數據和冗余聯系后,便可得到基本的E-R模型,如圖4-10所示。

圖4-10 優化后的基本E-R圖
最終得到的基本E-R模型是企業的概念模型,它代表了用戶的數據要求,是溝通“要求”和“設計”的橋梁,它決定數據庫的總體邏輯結構,是成功創建數據庫的關鍵。如果設計不好,就不能充分發揮數據庫的功能,無法滿足用戶的處理要求。
因此,用戶和數據庫人員必須對這一模型反復討論,在用戶確認這一模型已正確無誤地反映了他們的要求之后,才能進入下一階段的設計工作。
- UI圖標創意設計
- ASP.NET MVC4框架揭秘
- 軟件項目管理(第2版)
- 工程軟件開發技術基礎
- Python機器學習:數據分析與評分卡建模(微課版)
- Visual FoxPro 程序設計
- C語言程序設計基礎與實驗指導
- Swift 3 New Features
- Visual C++數字圖像處理技術詳解
- TradeStation交易應用實踐:量化方法構建贏家策略(原書第2版)
- Apache Mahout Clustering Designs
- Getting Started with Python
- 監控的藝術:云原生時代的監控框架
- CodeIgniter Web Application Blueprints
- Visual C++開發寶典