- 數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用教程(第4版)
- 劉瑞新等
- 4431字
- 2020-05-28 17:16:20
3.3 數(shù)據(jù)庫概念結(jié)構(gòu)的設(shè)計(jì)
概念結(jié)構(gòu)設(shè)計(jì)是將系統(tǒng)需求分析得到的用戶需求抽象為信息結(jié)構(gòu)過程。概念結(jié)構(gòu)設(shè)計(jì)的結(jié)果是數(shù)據(jù)庫的概念模型。數(shù)據(jù)庫設(shè)計(jì)中應(yīng)十分重視概念結(jié)構(gòu)設(shè)計(jì),它是整個(gè)數(shù)據(jù)庫設(shè)計(jì)的關(guān)鍵。
3.3.1 概念結(jié)構(gòu)的特點(diǎn)及設(shè)計(jì)方法
只有將系統(tǒng)應(yīng)用需求抽象為信息世界的結(jié)構(gòu),也就是概念結(jié)構(gòu)后,才能轉(zhuǎn)化為機(jī)器世界中的數(shù)據(jù)模型,并用DBMS實(shí)現(xiàn)這些需求。概念結(jié)構(gòu)即概念模型,它用E-R圖進(jìn)行描述。
1.概念結(jié)構(gòu)的特點(diǎn)
概念結(jié)構(gòu)獨(dú)立于數(shù)據(jù)庫邏輯結(jié)構(gòu)和支持?jǐn)?shù)據(jù)庫的DBMS,其主要特點(diǎn)如下。
1)概念模型是現(xiàn)實(shí)世界的一個(gè)真實(shí)模型:概念模型應(yīng)能真實(shí)、充分反映現(xiàn)實(shí)世界,能滿足用戶對數(shù)據(jù)的處理要求。
2)概念模型應(yīng)當(dāng)易于理解:概念模型只有被用戶理解后,才可以與設(shè)計(jì)者交換意見,參與數(shù)據(jù)庫的設(shè)計(jì)。
3)概念模型應(yīng)當(dāng)易于更改:由于現(xiàn)實(shí)世界(應(yīng)用環(huán)境和應(yīng)用要求)會發(fā)生變化,這就需要改變概念模型,易于更改的概念模型有利于修改和擴(kuò)充。
4)概念模型應(yīng)易于向數(shù)據(jù)模型轉(zhuǎn)換:概念模型最終要轉(zhuǎn)換為數(shù)據(jù)模型。設(shè)計(jì)概念模型時(shí)應(yīng)當(dāng)注意,使其有利于向特定的數(shù)據(jù)模型轉(zhuǎn)換。
2.概念結(jié)構(gòu)設(shè)計(jì)的方法
概念模型是數(shù)據(jù)模型的前身,它比數(shù)據(jù)模型更獨(dú)立于計(jì)算機(jī)、更抽象,也更加穩(wěn)定。概念結(jié)構(gòu)設(shè)計(jì)的方法有4種。
1)自頂向下的設(shè)計(jì)方法:首先定義全局概念結(jié)構(gòu)的框架,然后逐步細(xì)化為完整的全局概念結(jié)構(gòu)。
2)自底向上的設(shè)計(jì)方法:首先定義各局部應(yīng)用的概念結(jié)構(gòu),然后將它們集成起來,得到全局概念結(jié)構(gòu)的設(shè)計(jì)方法。
3)逐步擴(kuò)張的設(shè)計(jì)方法:首先定義最重要的核心概念結(jié)構(gòu),然后向外擴(kuò)充,生成其他概念結(jié)構(gòu),直至完成總體概念結(jié)構(gòu)。
4)混合策略設(shè)計(jì)的方法:采用自頂向下與自底向上相結(jié)合的方法,首先用自頂向下策略設(shè)計(jì)一個(gè)全局概念結(jié)構(gòu)的框架,然后以它為骨架,通過自底向上策略中設(shè)計(jì)的各局部概念結(jié)構(gòu),其方法如圖3-6所示。

圖3-6 自頂向下分析需求與自底向上設(shè)計(jì)概念結(jié)構(gòu)
3.概念結(jié)構(gòu)的設(shè)計(jì)步驟
按照圖3-6所示的概念結(jié)構(gòu)設(shè)計(jì)方法,概念結(jié)構(gòu)的設(shè)計(jì)可分為兩步:一是抽象數(shù)據(jù)并設(shè)計(jì)局部視圖;二是集成局部視圖,得到全局的概念結(jié)構(gòu)。設(shè)計(jì)步驟如圖3-7所示。

圖3-7 概念結(jié)構(gòu)設(shè)計(jì)步驟
3.3.2 數(shù)據(jù)抽象與局部視圖設(shè)計(jì)
概念結(jié)構(gòu)是對現(xiàn)實(shí)世界的一種抽象。所謂抽象就是抽取現(xiàn)實(shí)世界的共同特性,忽略非本質(zhì)的細(xì)節(jié),并把這些共同特性用各種概念精確地加以描述,形成某種模型。
1.三種數(shù)據(jù)抽象方法
數(shù)據(jù)抽象的3種基本方法是分類、聚集和概括。利用數(shù)據(jù)抽象方法可以在對現(xiàn)實(shí)世界抽象的基礎(chǔ)上,得出概念模型的實(shí)體集及屬性。
(1)分類
分類(Classification)就是定義某一類概念作為現(xiàn)實(shí)世界中一組對象的類型,這些對象具有某些共同的特性和行為。分類抽象了對象值和型之間的“成員”的語義。在E-R模型中,實(shí)體集就是這種抽象。
例如,在企業(yè)環(huán)境中,張小英是職工中的一員,她具有職工們共有的特性和行為:在某個(gè)部門工作,參與某個(gè)工程的設(shè)計(jì)或施工。與張小英屬同一對象的還有王麗平等其他職工。圖3-8是職工的分類示意圖。

圖3-8 職工分類示意圖
(2)聚集
聚集(Aggregation)是定義某一類型的組成部分,它抽象了對象內(nèi)部類型和對象內(nèi)部“組成部分”的語義。若干屬性的聚集組成了實(shí)體型。例如把實(shí)體集“職工”的“職工號”、“姓名”等屬性聚集為實(shí)體型“職工”,如圖3-9所示。

圖3-9 職工屬性聚集實(shí)例
事實(shí)上,現(xiàn)實(shí)世界的事物是非常復(fù)雜的,某些類型的組成部分可能仍然是一個(gè)聚集,這是一種更復(fù)雜的聚集,如圖3-10所示。

圖3-10 更復(fù)雜的聚集
(3)概括
概括(Generalization)定義了類型之間的一種子集聯(lián)系,它抽象了類型之間的“所屬”的語義。例如職工是個(gè)實(shí)體集,技術(shù)人員、干部也是實(shí)體集,但技術(shù)人員、干部均是職工的子集。我們把職工稱為超類(Super Class),技術(shù)人員、干部稱為職工的子類(Subclass)。在E-R模型中用雙豎邊的矩形框表示子類,用直線加小圓圈表示超類——子類的聯(lián)系,如圖3-11所示。

圖3-11 概括表示示意圖
概括的一個(gè)重要性質(zhì)是繼承性。繼承性指子類繼承超類中定義的所有抽象。例如技術(shù)人員、干部可以有自己的特殊屬性,但都繼承了它們的超類屬性,即技術(shù)人員和干部都具有職工類型的屬性。
2.設(shè)計(jì)分E-R圖
概念結(jié)構(gòu)設(shè)計(jì)是利用抽象機(jī)制對需求分析階段收集到的數(shù)據(jù)進(jìn)行分類、組織(聚集),形成實(shí)體集、屬性和碼,確定實(shí)體集之間的聯(lián)系類型(一對一、一對多或多對多的聯(lián)系),進(jìn)而設(shè)計(jì)分E-R圖。
(1)設(shè)計(jì)分E-R圖的具體做法
1)選擇局部應(yīng)用。選擇局部應(yīng)用是根據(jù)系統(tǒng)的具體情況,在多層的數(shù)據(jù)流程圖中選擇一個(gè)適當(dāng)層次的數(shù)據(jù)流程圖,作為設(shè)計(jì)分E-R圖的出發(fā)點(diǎn),并讓數(shù)據(jù)流程圖中的每一部分都對應(yīng)一個(gè)局部應(yīng)用。選擇好局部應(yīng)用之后,就可以對每個(gè)局部應(yīng)用逐一設(shè)計(jì)分E-R圖了。
2)設(shè)計(jì)分E-R圖。在設(shè)計(jì)分E-R圖前,局部應(yīng)用的數(shù)據(jù)流程圖應(yīng)已經(jīng)設(shè)計(jì)好,局部應(yīng)用所涉及的數(shù)據(jù)應(yīng)當(dāng)也已經(jīng)收集在相應(yīng)的數(shù)據(jù)字典中了。在設(shè)計(jì)分E-R圖時(shí),要根據(jù)局部應(yīng)用的數(shù)據(jù)流程圖中標(biāo)定的實(shí)體集、屬性和碼,并結(jié)合數(shù)據(jù)字典中的相關(guān)描述內(nèi)容,確定E-R圖中的實(shí)體、實(shí)體之間的聯(lián)系。
(2)實(shí)體和屬性的區(qū)別
實(shí)際上,實(shí)體和屬性之間并不存在形式上可以截然劃分的界限。但是,在現(xiàn)實(shí)世界中具體的應(yīng)用環(huán)境常常對實(shí)體和屬性作了大體的自然的劃分。例如在數(shù)據(jù)字典中,“數(shù)據(jù)結(jié)構(gòu)”“數(shù)據(jù)流”“數(shù)據(jù)存儲”都是若干屬性的聚合,它體現(xiàn)了自然劃分意義。設(shè)計(jì)E-R圖時(shí),可以先從自然劃分的內(nèi)容出發(fā)定義雛形的E-R圖,再進(jìn)行必要的調(diào)整。
為了簡化E-R圖,在調(diào)整中應(yīng)當(dāng)遵循的一條原則:現(xiàn)實(shí)世界的事物能作為屬性對待的盡量作為屬性對待。在解決這個(gè)問題時(shí)應(yīng)當(dāng)遵循兩條基本準(zhǔn)則。
1)“屬性”不能再具有需要描述的性質(zhì)?!皩傩浴北仨毷遣豢煞指畹臄?shù)據(jù)項(xiàng),不能包含其他屬性。也就是說,屬性不能是另外一些屬性的聚集。
2)“屬性”不能與其他實(shí)體具有聯(lián)系。在E-R圖中所有的聯(lián)系必須是實(shí)體間的聯(lián)系,而不能有屬性與實(shí)體之間的聯(lián)系。
圖3-12所示的是一個(gè)由屬性上升為用實(shí)體集表示的實(shí)例。

圖3-12 “職稱”由屬性上升為實(shí)體的示意圖
圖中說明:職工是一個(gè)實(shí)體,職工號、姓名、年齡和職稱是屬性。如果職稱沒有與工資、福利掛鉤,就沒有必要進(jìn)一步描述,可以作為職工實(shí)體集的一個(gè)屬性對待;如果不同的職稱有著不同的工資、住房標(biāo)準(zhǔn)和不同的附加福利,則職稱作為一個(gè)實(shí)體來考慮就比較合適。
再如,在醫(yī)院中,一個(gè)病人只能住在一個(gè)病房,病房號可以作為病人實(shí)體的一個(gè)屬性。但如果病房還要與醫(yī)生實(shí)體發(fā)生聯(lián)系,即一個(gè)醫(yī)生負(fù)責(zé)幾個(gè)病房的病人的工作,則根據(jù)第二條準(zhǔn)則病房應(yīng)作為一個(gè)實(shí)體,如圖3-13所示。

圖3-13 病房作為一個(gè)屬性或?qū)嶓w的例子
3.3.3 視圖的集成
視圖集成就是把設(shè)計(jì)好的各子系統(tǒng)的分E-R圖綜合成一個(gè)系統(tǒng)的總E-R圖。
視圖的集成可以有兩種方法:一種方法是多個(gè)分E-R圖一次集成,如圖3-14a所示。另一種方法是逐步集成,用累加的方法一次集成兩個(gè)分E-R圖,如圖3-14b所示。

圖3-14 視圖集成的兩種方法
a)多個(gè)分E-R圖一次集成 b)逐步集成
多個(gè)分E-R圖一次集成的方法比較復(fù)雜,做起來難度較大;逐步集成方法由于每次只集成兩個(gè)分E-R圖,因而可以有效地降低復(fù)雜度。無論采用哪種方法,在每次集成局部E-R圖時(shí),都要分兩步進(jìn)行。
1)合并E-R圖,解決各分E-R圖之間的沖突問題,并將各分E-R圖合并起來生成初步E-R圖。
2)修改和重構(gòu)初步E-R圖,消除初步E-R圖中不必要的實(shí)體集冗余和聯(lián)系冗余,得到基本E-R圖。
1.合并分E-R圖,生成初步E-R圖
由于各個(gè)局部應(yīng)用所面向的問題是不同的,而且通常是由不同的設(shè)計(jì)人員進(jìn)行不同局部的視圖設(shè)計(jì),這樣就會導(dǎo)致各個(gè)分E-R圖之間必定會存在許多不一致的地方,即產(chǎn)生沖突問題。由于各個(gè)分E-R圖存在沖突,所以不能簡單地把它們畫到一起,必須先消除各個(gè)分E-R圖之間的不一致,形成一個(gè)能被全系統(tǒng)所有用戶共同理解和接受的統(tǒng)一的概念模型,再進(jìn)行合并。合理消除各個(gè)分E-R圖的沖突是進(jìn)行合并的主要工作和關(guān)鍵所在。
分E-R圖之間的沖突主要有3類:屬性沖突、命名沖突和結(jié)構(gòu)沖突。
(1)屬性沖突
屬性沖突主要有以下兩種情況。
1)屬性域沖突:屬性值的類型、取值范圍或取值集合不同。例如對于零件號屬性,不同的部門可能會采用不同的編碼形式,而且定義的類型又各不相同,有的定義為整型,有的則定義為字符型,這都需要各個(gè)部門之間協(xié)商解決。
2)屬性取值單位沖突:例如零件的重量,不同的部門可能分別用公斤、斤或千克來表示,結(jié)果會給數(shù)據(jù)統(tǒng)計(jì)造成錯(cuò)誤。
(2)命名沖突
命名沖突主要有以下兩種。
1)同名異義沖突:不同意義的對象在不同的局部應(yīng)用中具有相同的名字。
2)異名同義沖突:意義相同的對象在不同的局部應(yīng)用中有不同的名字。
(3)結(jié)構(gòu)沖突
結(jié)構(gòu)沖突有以下3種情況。
1)同一對象在不同的應(yīng)用中具有不同的抽象。例如,職工在某一局部應(yīng)用中被當(dāng)做實(shí)體對待,而在另一局部應(yīng)用中被當(dāng)做屬性對待,這就會產(chǎn)生抽象沖突問題。
2)同一實(shí)體在不同分E-R圖中的屬性組成不一致。此類沖突即所包含的屬性個(gè)數(shù)和屬性排列次序不完全相同。這類沖突是由于不同的局部應(yīng)用所關(guān)心的實(shí)體的不同側(cè)面而造成的。解決這類沖突的方法是使該實(shí)體的屬性取各個(gè)分E-R圖中屬性的并集,再適當(dāng)調(diào)整屬性的次序,使之兼顧到各種應(yīng)用。
3)實(shí)體之間的聯(lián)系在不同的分E-R圖中呈現(xiàn)不同的類型。此類沖突的解決方法是根據(jù)應(yīng)用的語義對實(shí)體聯(lián)系的類型進(jìn)行綜合或調(diào)整。
設(shè)有實(shí)體集E1、E2和E3:在一個(gè)分E-R圖中E1和E2是多對多聯(lián)系,而在另一個(gè)分E-R圖中E1、E2是一對多聯(lián)系,這是聯(lián)系類型不同的情況;在某一E-R圖中E1與E2發(fā)生聯(lián)系,而在另一個(gè)E-R圖中E1、E2和E3三者之間發(fā)生聯(lián)系,這是聯(lián)系涉及的對象不同的情況。
圖3-15所示的是一個(gè)綜合E-R圖的實(shí)例。在一個(gè)分E-R圖中零件與產(chǎn)品之間的聯(lián)系構(gòu)成是多對多的;另一個(gè)分E-R圖中產(chǎn)品、零件與供應(yīng)商三者之間存在著多對多的聯(lián)系“供應(yīng)”;在合并的綜合E-R圖中把它們綜合起來表示。

圖3-15 合并兩個(gè)分E-R圖時(shí)的綜合
2.消除不必要的冗余,設(shè)計(jì)基本E-R圖
在初步E-R圖中可能存在冗余的數(shù)據(jù)和實(shí)體間冗余的聯(lián)系。冗余數(shù)據(jù)是指可由基本數(shù)據(jù)導(dǎo)出的數(shù)據(jù),冗余的聯(lián)系是可由其他聯(lián)系導(dǎo)出的聯(lián)系。冗余的存在容易破壞數(shù)據(jù)庫的完整性,給數(shù)據(jù)庫維護(hù)增加困難,應(yīng)當(dāng)消除。消除了冗余的初步E-R圖就稱為基本E-R圖。
(1)用分析方法消除冗余
分析方法是消除冗余的主要方法。分析方法消除冗余是以數(shù)據(jù)字典和數(shù)據(jù)流程圖為依據(jù),根據(jù)數(shù)據(jù)字典中關(guān)于數(shù)據(jù)項(xiàng)之間邏輯關(guān)系的說明來消除冗余的。
在實(shí)際應(yīng)用中,并不是要將所有的冗余數(shù)據(jù)與冗余聯(lián)系都消除。有時(shí)為了提高數(shù)據(jù)查詢效率、減少數(shù)據(jù)存取次數(shù),在數(shù)據(jù)庫中就設(shè)計(jì)了一些數(shù)據(jù)冗余或聯(lián)系冗余。因而,在設(shè)計(jì)數(shù)據(jù)庫結(jié)構(gòu)時(shí),冗余數(shù)據(jù)的消除或存在要根據(jù)用戶的整體需要來確定。如果希望存在某些冗余,則應(yīng)在數(shù)據(jù)字典的數(shù)據(jù)關(guān)聯(lián)中進(jìn)行說明,并把保持冗余數(shù)據(jù)的一致作為完整性約束條件。
例如,在圖3-16中,如果Q3=Q1×Q2并且Q4=∑Q5,則Q3和Q4是冗余數(shù)據(jù),Q3和Q4就可以消去。而消去了Q3,產(chǎn)品與材料間m:n的冗余聯(lián)系也應(yīng)當(dāng)消去。但是,若物資部門經(jīng)常要查詢各種材料的庫存總量,就應(yīng)當(dāng)保留Q4,并把“Q4=∑Q5”定義為Q4的完整性約束條件。每當(dāng)Q5被更新,就會觸發(fā)完整性檢查的例程,以便對Q4作相應(yīng)的修改。

圖3-16 消除冗余的實(shí)例
(2)用規(guī)范化理論消除冗余
在關(guān)系數(shù)據(jù)庫的規(guī)范化理論中,函數(shù)依賴的概念提供了消除冗余的形式化工具,有關(guān)內(nèi)容將在規(guī)范化理論中介紹。
- Redis使用手冊
- DB29forLinux,UNIX,Windows數(shù)據(jù)庫管理認(rèn)證指南
- Python數(shù)據(jù)分析:基于Plotly的動(dòng)態(tài)可視化繪圖
- R Object-oriented Programming
- 大數(shù)據(jù)與機(jī)器學(xué)習(xí):實(shí)踐方法與行業(yè)案例
- R Machine Learning Essentials
- Access 2010數(shù)據(jù)庫程序設(shè)計(jì)實(shí)踐教程
- 中國云存儲發(fā)展報(bào)告
- Visual Studio 2012 and .NET 4.5 Expert Development Cookbook
- 一本書讀懂大數(shù)據(jù)
- 大數(shù)據(jù)隱私保護(hù)技術(shù)與治理機(jī)制研究
- 量化投資:交易模型開發(fā)與數(shù)據(jù)挖掘
- 高效使用Redis:一書學(xué)透數(shù)據(jù)存儲與高可用集群
- 大學(xué)計(jì)算機(jī)基礎(chǔ)習(xí)題與實(shí)驗(yàn)指導(dǎo)(第2版)
- 實(shí)用計(jì)算機(jī)基礎(chǔ)