系統(tǒng)架構(gòu)設(shè)計(jì)筆記(8)——數(shù)據(jù)庫設(shè)計(jì)

數(shù)據(jù)庫設(shè)計(jì)的過程是將數(shù)據(jù)庫系統(tǒng)與現(xiàn)實(shí)世界密切地疤苹、有機(jī)地习勤、協(xié)調(diào)一致地結(jié)合起來的過程踪栋。

數(shù)據(jù)庫的設(shè)計(jì)質(zhì)量與設(shè)計(jì)者的知識、經(jīng)驗(yàn)和水平密切相關(guān)图毕。作為數(shù)據(jù)庫應(yīng)用系統(tǒng)的重要組成部分夷都,數(shù)據(jù)庫設(shè)計(jì)的成敗往往直接關(guān)系到整個(gè)應(yīng)用系統(tǒng)的成敗。

以數(shù)據(jù)庫為基礎(chǔ)的數(shù)據(jù)庫應(yīng)用系統(tǒng)與其他計(jì)算機(jī)應(yīng)用系統(tǒng)相比往往具有數(shù)據(jù)量龐大予颤、數(shù)據(jù)保存時(shí)間長囤官、數(shù)據(jù)關(guān)聯(lián)復(fù)雜、用戶要求多樣化等特點(diǎn)蛤虐。

數(shù)據(jù)庫設(shè)計(jì)中面臨的主要困難和問題有:
(1)同時(shí)具備數(shù)據(jù)庫知識與應(yīng)用業(yè)務(wù)知識的人很少党饮。懂得計(jì)算機(jī)與數(shù)據(jù)庫的人一般都缺乏應(yīng)用業(yè)務(wù)知識和實(shí)際經(jīng)驗(yàn),而熟悉應(yīng)用業(yè)務(wù)的人又往往不懂計(jì)算機(jī)和數(shù)據(jù)庫驳庭。
(2)項(xiàng)目初期往往不能確定應(yīng)用業(yè)務(wù)的數(shù)據(jù)庫系統(tǒng)的目標(biāo)刑顺。
(3)缺乏完善的設(shè)計(jì)工具和設(shè)計(jì)方法氯窍。
(4)需求的不確定性。用戶總是在系統(tǒng)的開發(fā)過程中不斷提出新的要求蹲堂,甚至在數(shù)據(jù)庫建立之后還會要求修改數(shù)據(jù)庫結(jié)構(gòu)或增加新的應(yīng)用狼讨。
( 5)應(yīng)用業(yè)務(wù)系統(tǒng)千差萬別,很難找到一種適合所有業(yè)務(wù)的工具和方法柒竞,這就增加了研究數(shù)據(jù)庫自動生成工具的難度政供。因此,研制適合一切應(yīng)用業(yè)務(wù)的全自動數(shù)據(jù)庫生成工具是不可能的能犯。

1 數(shù)據(jù)庫設(shè)計(jì)的方法

目前已有的數(shù)據(jù)庫設(shè)計(jì)方法可分為四類鲫骗,即直觀設(shè)計(jì)法、規(guī)范設(shè)計(jì)法踩晶、計(jì)算機(jī)輔助設(shè)計(jì)法和自動化設(shè)計(jì)法执泰。直觀設(shè)計(jì)法又稱單步邏輯設(shè)計(jì)法,它依賴于設(shè)計(jì)者的知識渡蜻、經(jīng)驗(yàn)和技巧术吝,缺乏工程規(guī)范的支持和科學(xué)根據(jù),設(shè)計(jì)質(zhì)量也不穩(wěn)定茸苇,因此越來越不適應(yīng)信息管理系統(tǒng)發(fā)展的需要排苍。為了改變這種狀況, 1978 年 10 月來自 30 多個(gè)歐美國家的主要數(shù)據(jù)庫專家在美國新奧爾良市專門討論了數(shù)據(jù)庫設(shè)計(jì)問題学密,提出了數(shù)據(jù)庫設(shè)計(jì)規(guī)范淘衙,把數(shù)據(jù)庫設(shè)計(jì)分為需求分析、概念結(jié)構(gòu)設(shè)計(jì)腻暮、邏輯結(jié)構(gòu)設(shè)計(jì)和物理結(jié)構(gòu)設(shè)計(jì) 4 個(gè)階段彤守。目前,常用的規(guī)范設(shè)計(jì)方法大多起源于新奧爾良方法哭靖,如基于 3NF 的設(shè)計(jì)方法具垫、 LRA 方法、 面向?qū)ο蟮臄?shù)據(jù)庫設(shè)計(jì)方法及基于視圖概念的數(shù)據(jù)庫設(shè)計(jì)方法等试幽。我們需要了解基于 3NF 的數(shù)據(jù)庫設(shè)計(jì)方法筝蚕。

基于 3NF 的數(shù)據(jù)庫設(shè)計(jì)方法是由 S.Atre 提出的數(shù)據(jù)庫設(shè)計(jì)的結(jié)構(gòu)化設(shè)計(jì)方法,其基本思想是在需求分析的基礎(chǔ)上铺坞,識別并確認(rèn)數(shù)據(jù)庫模式中的全部屬性和屬性間的依賴起宽,將它們組織成一個(gè)單一的關(guān)系模型,然后再分析模式中不符合 3NF 的約束條件济榨,用投影和連接的辦法將其分解燎含,使其達(dá)到 3NF 條件。其具體設(shè)計(jì)步驟分為 5 個(gè)階段腿短,如圖 1 所示。

3NF,第三范式(Third Normal Form) 是指表中的所有數(shù)據(jù)元素不但要能唯一地被主關(guān)鍵字所標(biāo)識橘忱,而且它們之間還必須相互獨(dú)立赴魁,不存在其他的函數(shù)關(guān)系。

(1)設(shè)計(jì)企業(yè)模式
利用上述得到的 3NF 關(guān)系模型畫出企業(yè)模式钝诚。具體包括:

  1. 分析應(yīng)用環(huán)境颖御,并設(shè)定環(huán)境中所使用的各種資料。
  2. 確定每一種報(bào)表各自所包含的數(shù)據(jù)元素凝颇。
  3. 確定數(shù)據(jù)元素之間的關(guān)系潘拱,如確定主關(guān)鍵字和一般的數(shù)據(jù)元素。
  4. 對每一組或若干組數(shù)據(jù)元素推導(dǎo)出 3NF 的關(guān)系模型拧略。
  5. 在 3NF 關(guān)系模型的基礎(chǔ)上畫出數(shù)據(jù)庫的企業(yè)模式芦岂。

(2)設(shè)計(jì)數(shù)據(jù)庫邏輯模式

根據(jù)上一步得到的企業(yè)模式選定數(shù)據(jù)模型,從而得出適用于某個(gè) DBMS 的邏輯模式垫蛆。根據(jù)邏輯模式導(dǎo)出各種報(bào)表與事務(wù)處理所使用的外模式资锰。

(3)設(shè)計(jì)數(shù)據(jù)庫物理模式(存儲模式)

根據(jù)數(shù)據(jù)庫的邏輯模式和給定的計(jì)算機(jī)系統(tǒng)設(shè)計(jì)物理模式粘勒。

(4)評價(jià)物理模式

對物理模式估算空間利用情況,并推算輸入輸出的概率。必要時(shí)根據(jù)物理模式調(diào)整各種報(bào)表與事務(wù)處理的外模式筝野。對外模式進(jìn)行存取時(shí)間的估算。

(5)數(shù)據(jù)庫實(shí)現(xiàn)

具體實(shí)現(xiàn)數(shù)據(jù)庫校坑。

2 數(shù)據(jù)庫設(shè)計(jì)的基本步驟

分步設(shè)計(jì)法遵循自頂向下闯团、逐步求精的原則,將數(shù)據(jù)庫設(shè)計(jì)過程分解為若干相互獨(dú)立又相互依存的階段疹味,每一階段采用不同的技術(shù)與工具仅叫,解決不同的問題,從而將問題局部化佛猛,減少了局部問題對整體設(shè)計(jì)的影響惑芭。目前,此方法已在數(shù)據(jù)庫設(shè)計(jì)中得到了廣泛應(yīng)用并獲得了較好的效果继找。

在分步設(shè)計(jì)法中遂跟,通常將數(shù)據(jù)庫的設(shè)計(jì)分為需求分析、概念結(jié)構(gòu)設(shè)計(jì)婴渡、邏輯結(jié)構(gòu)設(shè)計(jì)和數(shù)據(jù)庫物理設(shè)計(jì) 4 個(gè)階段幻锁,如圖 2 所示。

(1)需求分析

需求分析是指收集和分析用戶對系統(tǒng)的信息需求和處理需求边臼,得到設(shè)計(jì)系統(tǒng)所必需的需求信息哄尔,建立系統(tǒng)說明文檔。其目標(biāo)是通過調(diào)查研究柠并,了解用戶的數(shù)據(jù)要求和處理要求岭接,并按一定格式整理形成需求說明書富拗。需求說明書是需求分析階段的成果,也是今后設(shè)計(jì)的依據(jù)鸣戴,它包括數(shù)據(jù)庫所涉及的數(shù)據(jù)啃沪、數(shù)據(jù)的特征、使用頻率和數(shù)據(jù)量的估計(jì)窄锅,如數(shù)據(jù)名创千、屬性及其
類型、主關(guān)鍵字屬性入偷、保密要求追驴、完整性約束條件、更改要求疏之、使用頻率殿雪、數(shù)據(jù)量估計(jì)等。

這些關(guān)于數(shù)據(jù)的數(shù)據(jù)稱為元數(shù)據(jù)体捏。在設(shè)計(jì)大型數(shù)據(jù)庫時(shí)冠摄,這些數(shù)據(jù)通常由數(shù)據(jù)字典來管理。用數(shù)據(jù)字典管理元數(shù)據(jù)有利于避免數(shù)據(jù)的重復(fù)或重名几缭,以保持?jǐn)?shù)據(jù)的一致性及提供各種統(tǒng)計(jì)數(shù)據(jù)河泳,因而有利于提高數(shù)據(jù)庫設(shè)計(jì)的質(zhì)量,同時(shí)可以減輕設(shè)計(jì)者的負(fù)擔(dān)年栓。

(2)概念結(jié)構(gòu)設(shè)計(jì)

它是數(shù)據(jù)庫設(shè)計(jì)的第二階段拆挥,其目標(biāo)是對需求說明書提供的所有數(shù)據(jù)和處理要求進(jìn)行抽象與綜合處理,按一定的方法構(gòu)造反映用戶環(huán)境的數(shù)據(jù)及其相互聯(lián)系的概念模型某抓,即用戶的數(shù)據(jù)模型或企業(yè)數(shù)據(jù)模型纸兔。這種概念數(shù)據(jù)模型與 DBMS 無關(guān),是面向現(xiàn)實(shí)世界的否副、極易為用戶所理解的數(shù)據(jù)模型汉矿。為保證所設(shè)計(jì)的概念數(shù)據(jù)模型能正確、完整地反映用戶的數(shù)據(jù)及其相互關(guān)系备禀,便于進(jìn)行所要求的各種處理洲拇,在本階段設(shè)計(jì)中可吸收用戶參與和評議設(shè)計(jì)。在進(jìn)行概念結(jié)構(gòu)設(shè)計(jì)時(shí)曲尸,可先設(shè)計(jì)各個(gè)應(yīng)用的視圖(view)赋续,即各個(gè)應(yīng)用所看到的數(shù)據(jù)及其結(jié)構(gòu),然后再進(jìn)行視圖集成另患,以形成一個(gè)單一的概念數(shù)據(jù)模型纽乱。這樣形成的初步數(shù)據(jù)模型還要經(jīng)過數(shù)據(jù)庫設(shè)計(jì)者和用戶的審查與修改,最后形成所需的概念數(shù)據(jù)模型昆箕。

(3)邏輯結(jié)構(gòu)設(shè)計(jì)

這一階段的設(shè)計(jì)目標(biāo)是把上一階段得到的與 DBMS 無關(guān)的概念數(shù)據(jù)模型轉(zhuǎn)換成等價(jià)的鸦列,并為某個(gè)特定的 DBMS 所接受的邏輯模型所表示的概念模式租冠,同時(shí)將概念設(shè)計(jì)階段得到的應(yīng)用視圖轉(zhuǎn)換成外部模式,即特定 DBMS 下的應(yīng)用視圖薯嗤。在轉(zhuǎn)換過程中要進(jìn)一步落實(shí)需求說明肺稀,并滿足 DBMS 的各種限制。該階段的結(jié)果是用 DBMS 所提供的數(shù)據(jù)定義語言(DDL)寫成的數(shù)據(jù)模式应民。邏輯設(shè)計(jì)的具體方法與 DBMS 的邏輯數(shù)據(jù)模型有關(guān)。邏輯模型應(yīng)滿足數(shù)據(jù)庫存取夕吻、一致性及運(yùn)行等各方面的用戶需求诲锹。

(4)數(shù)據(jù)庫物理設(shè)計(jì)

物理設(shè)計(jì)階段的任務(wù)是把邏輯設(shè)計(jì)階段得到的滿足用戶需求的已確定的邏輯模型在物理上加以實(shí)現(xiàn),其主要內(nèi)容是根據(jù) DBMS 提供的各種手段涉馅,設(shè)計(jì)數(shù)據(jù)的存儲形式和存取路徑归园,如文件結(jié)構(gòu)、索引設(shè)計(jì)等稚矿,即設(shè)計(jì)數(shù)據(jù)庫的內(nèi)模式或存儲模式庸诱。數(shù)據(jù)庫的內(nèi)模式對數(shù)據(jù)庫的性能影響很大,應(yīng)根據(jù)處理需求及 DBMS晤揣、操作系統(tǒng)和硬件的性能進(jìn)行精心設(shè)計(jì)桥爽。


實(shí)際上,數(shù)據(jù)庫設(shè)計(jì)的基本過程與任何復(fù)雜系統(tǒng)開發(fā)一樣昧识,在每一階段設(shè)計(jì)基本完成后钠四,都要進(jìn)行認(rèn)真的檢查,看是否滿足應(yīng)用需求跪楞,是否符合前面已執(zhí)行步驟的要求和滿足后續(xù)步驟的需要缀去,并分析設(shè)計(jì)結(jié)果的合理性。在每一步設(shè)計(jì)中甸祭,都可能發(fā)現(xiàn)前面步驟的遺漏或處理不當(dāng)之處缕碎,此時(shí),往往需要返回去重新處理并修改設(shè)計(jì)和有關(guān)文檔池户。所以咏雌,數(shù)據(jù)庫設(shè)計(jì)過程通常是一個(gè)反復(fù)修改、反復(fù)設(shè)計(jì)的迭代過程煞檩。

3 需求分析

需求分析是數(shù)據(jù)庫設(shè)計(jì)過程的第一步处嫌,是整個(gè)數(shù)據(jù)庫設(shè)計(jì)的依據(jù)和基礎(chǔ)。需求分析做得不好斟湃,會導(dǎo)致整個(gè)數(shù)據(jù)庫設(shè)計(jì)重新返工熏迹。需求分析的目標(biāo)是通過對單位的信息需求及處理要求的調(diào)查分析得到設(shè)計(jì)數(shù)據(jù)庫所必需的數(shù)據(jù)集及其相互聯(lián)系,形成需求說明書凝赛,作為后面各設(shè)計(jì)階段的基礎(chǔ)注暗。因此坛缕,這一階段的任務(wù)是:

(1)確認(rèn)需求、確定設(shè)計(jì)目標(biāo)

數(shù)據(jù)庫設(shè)計(jì)的第一項(xiàng)工作就是要對系統(tǒng)的整個(gè)應(yīng)用情況進(jìn)行全面捆昏、詳細(xì)的實(shí)地調(diào)查赚楚,弄清現(xiàn)行系統(tǒng)的組織結(jié)構(gòu)、功能劃分骗卜、總體工作流程宠页,收集支持系統(tǒng)總的設(shè)計(jì)目標(biāo)的基礎(chǔ)數(shù)據(jù)和對這些數(shù)據(jù)的處理要求,明確用戶總的需求目標(biāo)寇仓;通過分析举户,確定相應(yīng)的設(shè)計(jì)目標(biāo),即確定數(shù)據(jù)庫應(yīng)支持的應(yīng)用功能和應(yīng)用范圍遍烦,明確哪些功能由計(jì)算機(jī)完成或準(zhǔn)備讓計(jì)算機(jī)完成俭嘁,哪些環(huán)節(jié)由人工完成,以確定應(yīng)用系統(tǒng)實(shí)現(xiàn)的功能服猪。這一階段收集到的基礎(chǔ)數(shù)據(jù)和一組數(shù)據(jù)流程圖是下一步進(jìn)行概念設(shè)計(jì)的基礎(chǔ)供填。

(2)分析和收集數(shù)據(jù)

這是整個(gè)需求分析的核心任務(wù)。它包括分析和收集用戶的信息需求罢猪、處理需求近她、完整性需求、安全性需求坡脐,以及對數(shù)據(jù)庫設(shè)計(jì)過程有用的其他信息泄私。

信息需求是指在設(shè)計(jì)目標(biāo)范圍內(nèi)涉及的所有實(shí)體、實(shí)體的屬性及實(shí)體間的聯(lián)系等數(shù)據(jù)對象备闲,包括用戶在數(shù)據(jù)處理中的輸入/輸出數(shù)據(jù)及這些數(shù)據(jù)間的聯(lián)系晌端。在收集中,要收集數(shù)據(jù)的名稱恬砂、類型咧纠、長度、數(shù)據(jù)量泻骤、對數(shù)據(jù)的約束及數(shù)據(jù)間聯(lián)系的類型等信息漆羔。

處理需求是指為了獲得所需的信息而對數(shù)據(jù)加工處理的要求。它主要包括狱掂,處理方式是實(shí)時(shí)還是批處理演痒,各種處理發(fā)生的頻度、響應(yīng)時(shí)間趋惨、優(yōu)先級別及安全保密要求等鸟顺。所要收集的其他信息還有企業(yè)在管理方式、經(jīng)營方式等方面可能發(fā)生的變化等。

分析和收集數(shù)據(jù)的過程是數(shù)據(jù)庫設(shè)計(jì)者對各類管理活動進(jìn)行深入調(diào)查研究的過程讯嫂,調(diào)查對象包括數(shù)據(jù)管理部門的負(fù)責(zé)人蹦锋、各使用部門的負(fù)責(zé)人及操作員等各類管理人員,通過與各類管理人員相互交流欧芽,逐步取得對需求的一致認(rèn)識莉掂。

(3)整理文檔

分析和收集得到的數(shù)據(jù)必須經(jīng)過篩選整理,并按一定格式和順序記載保存千扔,經(jīng)過審核成為正式的需求說明文檔憎妙,即需求說明書。實(shí)際上曲楚,需求說明書是在需求分析的過程中逐漸整理形成的尚氛,是隨著這一過程的不斷深入而反復(fù)修改與完善的對系統(tǒng)需求分析的全面描述。由用戶洞渤、領(lǐng)導(dǎo)和專家共同評審,是以后各設(shè)計(jì)階段的主要依據(jù)属瓣。這一步的工作是進(jìn)行全面的匯總與整理载迄,使之系統(tǒng)化,以形成標(biāo)準(zhǔn)化的統(tǒng)一形式抡蛙。

4 概念結(jié)構(gòu)設(shè)計(jì)

概念結(jié)構(gòu)設(shè)計(jì)階段所涉及的信息不依賴于任何實(shí)際實(shí)現(xiàn)時(shí)的環(huán)境护昧,即計(jì)算機(jī)的硬件和軟件系統(tǒng)。概念結(jié)構(gòu)設(shè)計(jì)的目標(biāo)是產(chǎn)生一個(gè)用戶易于理解的粗截,反映系統(tǒng)信息需求的整體數(shù)據(jù)庫概念結(jié)構(gòu)惋耙。概念結(jié)構(gòu)設(shè)計(jì)的任務(wù)是,在需求分析中產(chǎn)生的需求說明書的基礎(chǔ)上按照一定的方法抽象成滿足應(yīng)用需求的用戶的信息結(jié)構(gòu)熊昌,即通常所稱的概念模型绽榛。概念結(jié)構(gòu)的設(shè)計(jì)過程就是正確選擇設(shè)計(jì)策略、設(shè)計(jì)方法和概念數(shù)據(jù)模型并加以實(shí)施的過程婿屹。

概念數(shù)據(jù)模型的作用是:提供能夠識別和理解系統(tǒng)要求的框架灭美;為數(shù)據(jù)庫提供一個(gè)說明性結(jié)構(gòu),作為設(shè)計(jì)數(shù)據(jù)庫邏輯結(jié)構(gòu)昂利,即邏輯模型的基礎(chǔ)届腐。

概念模型的描述工具應(yīng)該能夠體現(xiàn)概念模型的特點(diǎn),如 E-R 模型蜂奸。近年來犁苏,由于面向?qū)ο髷?shù)據(jù)模型具有更豐富的語義、更強(qiáng)的描述能力而越來越受到人們的重視扩所,不但出現(xiàn)了商品化的面向?qū)ο?DBMS围详,而且開始實(shí)際應(yīng)用于概念模型的設(shè)計(jì)中,作為數(shù)據(jù)庫概念設(shè)計(jì)的工具碌奉。

Teory 等人提出的擴(kuò)展的 E-R 模型增加了類似面向?qū)ο髷?shù)據(jù)模型中的普遍化和聚合等語義描述機(jī)制短曾,為這種最為人們熟悉的數(shù)據(jù)模型注入了新的生機(jī)寒砖,為概念模型的描述增加了一種理想的選擇。

E-R 模型簡稱 E-R 圖哩都,它是描述概念世界,建立概念模型的實(shí)用工具婉徘。 E-R 圖包括3個(gè)要素 :

  1. 實(shí)體( 型) : 用矩形框表示漠嵌,框內(nèi)標(biāo)注實(shí)體名稱;
  2. 屬性 : 用橢圓形表示盖呼,并用連線與實(shí)體連接起來儒鹿;
  3. 實(shí)體之間的聯(lián)系 : 用菱形框表示,框內(nèi)標(biāo)注聯(lián)系名稱几晤,并用連線將菱形框分別與有關(guān)實(shí)體相連约炎,并在連線上注明聯(lián)系類型。

圖 12 就是一個(gè)教學(xué)系統(tǒng)的 E-R圖 ( 為了簡單起見蟹瘾,省略了部分實(shí)體的屬性和聯(lián)系的屬性 ):

概念結(jié)構(gòu)的設(shè)計(jì)策略主要有自底向上圾浅、自頂向下、由里向外和混合策略憾朴。在具體實(shí)現(xiàn)設(shè)計(jì)目標(biāo)時(shí)有兩種極端的策略或方案狸捕,一是建立一個(gè)覆蓋整個(gè)單位所有功能域的全局?jǐn)?shù)據(jù)庫,稱之為全局方案或全局策略众雷;另一種則是對每一個(gè)應(yīng)用都建立一個(gè)單獨(dú)的數(shù)據(jù)庫灸拍,稱之為應(yīng)用方案或應(yīng)用策略。

由于各個(gè)部門對于數(shù)據(jù)的需求和處理方法各不相同砾省,對同一類數(shù)據(jù)的觀點(diǎn)也可能不一樣鸡岗,它們有自己的視圖,所以可以首先根據(jù)需求分析階段產(chǎn)生的各個(gè)部門的數(shù)據(jù)流圖和數(shù)據(jù)字典中的相關(guān)數(shù)據(jù)設(shè)計(jì)出各自的局部視圖编兄,然后進(jìn)行視圖集成纤房。

4.1 視圖設(shè)計(jì)

在實(shí)體分析法中,局部視圖設(shè)計(jì)的第一步是確定其所屬的范圍翻诉,即它所對應(yīng)的用戶組炮姨,然后對每個(gè)用戶組建立一個(gè)僅由實(shí)體、聯(lián)系及它們的標(biāo)識碼組成的局部信息結(jié)構(gòu)(局部數(shù)據(jù)模式)框架碰煌,最后再加入有關(guān)的描述信息舒岸,形成完整的局部視圖(局部數(shù)據(jù)模式)。這樣做的目的是為了集中精力處理好用戶數(shù)據(jù)需求的主要方面芦圾,避免因無關(guān)緊要的描述細(xì)節(jié)而影響局部信息結(jié)構(gòu)的正確性蛾派。整個(gè)過程可分為 4 個(gè)步驟:確定局部視圖的范圍;識別實(shí)體及其標(biāo)識;確定實(shí)體間的聯(lián)系洪乍;分配實(shí)體及聯(lián)系的屬性眯杏。

4.1.1 確定局部視圖的范圍

需求說明書中標(biāo)明的用戶視圖范圍可以作為確定局部視圖范圍的基本依據(jù),但它通常與子模式范圍相對應(yīng)壳澳,有時(shí)因?yàn)檫^大而不利于局部信息結(jié)構(gòu)的構(gòu)造岂贩,故可根據(jù)情況修改,但也不宜分得過小巷波,過小會造成局部視圖的數(shù)量太大及大量的數(shù)據(jù)冗余和不一致性萎津,給以后的視圖集成帶來很大的困難。

局部視圖范圍確定的基本原則是:各個(gè)局部視圖支持的功能域之間的聯(lián)系應(yīng)最少抹镊。

實(shí)體個(gè)數(shù)適量锉屈。 一個(gè)局部視圖所包含的實(shí)體數(shù)量反映了該局部視圖的復(fù)雜性, 按照信息論中“7 2”的觀點(diǎn)垮耳, 人們在同一時(shí)刻可同時(shí)顧及的事情一般在 5~9 之間颈渊, 其中以 6 或 7 最為適當(dāng)。因此终佛,一個(gè)局部視圖內(nèi)的實(shí)體數(shù)不宜超過 9 個(gè)儡炼,否則就會過于復(fù)雜,不便于人們理解和管理查蓉。

4.1.2 識別實(shí)體及其標(biāo)識

在需求分析中,人們已經(jīng)初步地識別了各類實(shí)體榜贴、實(shí)體間的聯(lián)系及描述其性質(zhì)的數(shù)據(jù)元素豌研,這些統(tǒng)稱為數(shù)據(jù)對象,它們是進(jìn)一步設(shè)計(jì)的基本素材唬党。這一步的任務(wù)就是在確定的局部視圖范圍內(nèi)鹃共,識別哪些數(shù)據(jù)對象作為局部視圖的基本實(shí)體及其標(biāo)識,并定義有關(guān)數(shù)據(jù)對象在 E-R 模型中的地位驶拱。

4.1.3 確定實(shí)體間的聯(lián)系

實(shí)際上霜浴,識別聯(lián)系的主要任務(wù)是在需求分析階段完成的。這里的工作一是從局部視圖的角度進(jìn)行一次審核蓝纲,檢查有無遺漏之處阴孟,二是確切地定義每一種聯(lián)系。

在現(xiàn)實(shí)世界中税迷,諸多形式的聯(lián)系大致可分為三類:存在性聯(lián)系永丝、功能性聯(lián)系和事件聯(lián)系。

  1. 存在性聯(lián)系如學(xué)校有教師箭养、教室有學(xué)生慕嚷、工廠有產(chǎn)品、產(chǎn)品有顧客等;
  2. 功能性聯(lián)系如教師講授課程喝检、教師參與科研嗅辣、倉庫管理員管理倉庫等;
  3. 事件聯(lián)系如學(xué)生借書挠说、產(chǎn)品發(fā)運(yùn)等澡谭。

根據(jù)上述分類仔細(xì)檢查在給定的局部視圖范圍內(nèi)是否有未識別的聯(lián)系,在確認(rèn)所有的聯(lián)系都已識別并無遺漏之后纺涤,還需對聯(lián)系進(jìn)行正確的定義译暂。定義聯(lián)系就是對聯(lián)系語義的仔細(xì)分析,識別聯(lián)系的類型撩炊,確定實(shí)體在聯(lián)系中的參與度外永。

(1)二元聯(lián)系的類型與定義

二元聯(lián)系是指兩個(gè)實(shí)體類之間的聯(lián)系。根據(jù)參與聯(lián)系的兩個(gè)實(shí)體類值之間的對應(yīng)關(guān)系分為一對一拧咳、一對多及多對多三種類型伯顶。

  1. 一對一聯(lián)系

這是一種最簡單的聯(lián)系類型。若對于實(shí)體集 A 中的每一個(gè)實(shí)體骆膝,實(shí)體集 B 中至多有一個(gè)實(shí)體與之聯(lián)系祭衩,反之亦然,則稱實(shí)體集 A 與實(shí)體集 B 具有一對一聯(lián)系阅签,記為 1:1掐暮。

例如在一個(gè)施工單位中,如果規(guī)定每項(xiàng)工程最多只能由一名工程師負(fù)責(zé)管理政钟,而一名工程師最多也只能負(fù)責(zé)一項(xiàng)工程路克,則工程師與工程間的這種管理聯(lián)系便是一對一聯(lián)系。

  1. 一對多聯(lián)系

若對于實(shí)體集 A 中的每一個(gè)實(shí)體养交,實(shí)體集 B 中有 n 個(gè)實(shí)體(n≥0)與之聯(lián)系精算;反之,對于實(shí)體集 B 中的每一個(gè)實(shí)體碎连,實(shí)體集 A 中至多有一個(gè)實(shí)體與之聯(lián)系灰羽,則稱實(shí)體集 A 與實(shí)體集 B 有一對多的聯(lián)系,記為 1:n鱼辙。以專業(yè)與學(xué)生間的關(guān)系為例:如規(guī)定一個(gè)專業(yè)可以管理許多學(xué)生廉嚼,每個(gè)學(xué)生只能屬于一個(gè)專業(yè),這種聯(lián)系就是一對多聯(lián)系倒戏。

  1. 多對多聯(lián)系

若對于實(shí)體集 A 中的每一個(gè)實(shí)體前鹅,實(shí)體集 B 中有 n 個(gè)實(shí)體(n≥0)與之聯(lián)系,反過來峭梳,對實(shí)體集 B 中每一個(gè)實(shí)體舰绘,實(shí)體集 A 中也有 m 個(gè)實(shí)體(m≥0)與之聯(lián)系蹂喻,則稱實(shí)體集 A 與實(shí)體集 B 具有多對多聯(lián)系,記為 m:n捂寿。教師與學(xué)生這兩個(gè)實(shí)體類間的教與學(xué)的聯(lián)系就是多對多的聯(lián)系口四。這時(shí),只有<教師秦陋、學(xué)生>對才能確定一個(gè)特定的教學(xué)聯(lián)系蔓彩。

因此,一般情況下可以以兩個(gè)關(guān)聯(lián)實(shí)體的標(biāo)識拼湊作為聯(lián)系的標(biāo)識驳概。但這種方法對某些情況就不能構(gòu)成有效的聯(lián)系標(biāo)識赤嚼。當(dāng)一個(gè)實(shí)體值在同一個(gè)聯(lián)系上可能存在多個(gè)不同的聯(lián)系值時(shí),就會出現(xiàn)這種情況顺又。如教師與其講授的課程之間的聯(lián)系更卒,同一個(gè)教師可講授幾門不同的課程,也可以多次講授同一門課程稚照,這是一種特殊的多對多聯(lián)系蹂空。顯然,對于教師與講授課程間的聯(lián)系果录,如在教師檔案中要求記錄擔(dān)任教學(xué)工作的情況上枕,就需要在聯(lián)系標(biāo)識中增加表示授課日期的屬性,即其合適的聯(lián)系標(biāo)識可能為(教師號弱恒,課程號辨萍,授課日期)。

  1. 實(shí)體類內(nèi)部的聯(lián)系

這種聯(lián)系發(fā)生在同一類實(shí)體的不同實(shí)體之間返弹,因此稱為內(nèi)部聯(lián)系或自聯(lián)系锈玉,它也是一種二元聯(lián)系,其表示方式與前面的二元聯(lián)系并無不同琉苇,要注意仔細(xì)區(qū)別同一實(shí)
體類中的不同實(shí)體在聯(lián)系中扮演的不同角色及聯(lián)系標(biāo)識的選擇。

例如在職工類實(shí)體中間就存在著管理者與被管理者的聯(lián)系悦施。一個(gè)職工可以管理別的職工并扇,稱為管理者或領(lǐng)導(dǎo)者。一個(gè)管理者可以管理多個(gè)職工抡诞,而一個(gè)職工最多只從屬于一位管理者穷蛹,從而構(gòu)成了一對多聯(lián)系。若規(guī)定所有職工都要受管理(最高管理者考慮自己管理自己)昼汗,但不是所有職工都是管理者肴熏,則此聯(lián)系在“多”端呈現(xiàn)強(qiáng)制性。其中每個(gè)聯(lián)系實(shí)體包含兩個(gè)職工號值:職工號和管理員職工號顷窒,以區(qū)別不同的實(shí)體在聯(lián)系中的角色蛙吏。

(2)多元聯(lián)系的識別與定義

兩個(gè)以上的實(shí)體類之間的聯(lián)系稱為多元聯(lián)系源哩。例如在供應(yīng)商向工程供應(yīng)零件這類事件中,如果任一供應(yīng)商可向任一工程供應(yīng)任一種零件鸦做,則為了確定哪個(gè)供應(yīng)商向哪個(gè)工程供應(yīng)了何種零件励烦,就必須定義一個(gè)三元聯(lián)系,因?yàn)橹挥泄?yīng)商泼诱、工程及零件三者一起才能唯一地確定一個(gè)聯(lián)系值坛掠。其聯(lián)系的標(biāo)識由參與聯(lián)系的實(shí)體類的標(biāo)識拼接而成,在此例中由供應(yīng)商治筒、工程屉栓、零件三個(gè)實(shí)體類的標(biāo)識拼接而成。

4.2 視圖集成

視圖集成就是要將反映各用戶組數(shù)據(jù)的局部數(shù)據(jù)模式綜合成單位中某個(gè)確定范圍內(nèi)的單一數(shù)據(jù)視圖耸袜,即全局?jǐn)?shù)據(jù)模式友多,又稱模式匯總。該全局?jǐn)?shù)據(jù)模式是未來數(shù)據(jù)庫結(jié)構(gòu)的基礎(chǔ)句灌,因此視圖集成是數(shù)據(jù)庫設(shè)計(jì)過程中一個(gè)十分重要的步驟夷陋,也是一項(xiàng)較為復(fù)雜和困難的任務(wù)。

當(dāng)所有局部視圖設(shè)計(jì)完畢胰锌,就可開始視圖集成骗绕。集成過程中會發(fā)生一些沖突,沖突的表現(xiàn)和處理策略如下:

(1)同名異義

為了發(fā)現(xiàn)不同視圖間的同名異義問題资昧,可以列出所有同名數(shù)據(jù)對象酬土,然后逐一判別其語義。對同名異義沖突通常采用換名加以解決格带,既可對同名者之一換名撤缴,也可對兩者都給以重新命名。識別語義的主要方法是進(jìn)行值域分析叽唱。

(2)異名同義

識別異名同義比較困難屈呕,一般由設(shè)計(jì)者對所有對象一個(gè)不漏地逐一鑒別。它同樣采用換名的方法解決棺亭。若歸并時(shí)試圖將它們合并為一個(gè)對象虎眨,則可以把其中之一的名稱作為合并后的對象名;若集成后镶摘,它們?nèi)砸詢蓚€(gè)不同的對象存在嗽桩,則可對其一換名。當(dāng)然凄敢,若原名都不合適碌冶,則可以對兩者都重新命名。

(3)同名不同層次

如果兩個(gè)對象同名涝缝,但其中之一是作為一個(gè)視圖中的實(shí)體扑庞,而另一個(gè)是另一視圖中的屬性譬重,則在集成時(shí)就會發(fā)生同名不同層次的沖突。解決這種沖突的辦法有兩個(gè)嫩挤,一是將屬性轉(zhuǎn)換為實(shí)體害幅,二是將實(shí)體變換成屬性。

例如岂昭,設(shè)一局部視圖中有一部門實(shí)體 DEPT以现,而在另一與之集成的視圖中有職工實(shí)體 EMP,且 EMP 有屬性 DEPT约啊,于是發(fā)生了同名不同層次的沖突邑遏。此時(shí),可將 EMP 的 DEPT屬性去掉恰矩,另設(shè)一個(gè)實(shí)體 DEPT 與 EMP 建立聯(lián)系记盒,這時(shí)再與另一視圖集成就容易多了。

再如外傅,設(shè)一局部視圖中有一名為 STOR 的倉庫實(shí)體纪吮,其中含有一屬性部門號( DEPT-NO);在另一局部視圖中有一單位實(shí)體 DEPT萎胰,其中僅含有一個(gè)屬性 DEPT-NO碾盟。對這類同名不同層次的沖突,可將 DEPT 實(shí)體變換為其所在視圖中與 DEPT 相關(guān)的另一實(shí)體的屬性技竟,然后再進(jìn)行集成冰肴。

實(shí)體變換為屬性時(shí)通常要滿足一些特定條件,例如榔组,該實(shí)體通常只含有一個(gè)與同名屬性具有共同特征的屬性熙尉,且一定存在一個(gè)與該實(shí)體存在聯(lián)系的另外的實(shí)體。

(4)同名同義搓扯,但對象聯(lián)系測度不同

所謂聯(lián)系測度是指實(shí)體的聯(lián)系是一對一检痰、一對多還是多對多。若同名同義對象在一個(gè)局部視圖中為一對多聯(lián)系锨推,在另一局部視圖中為多對多聯(lián)系铅歼,則在集成時(shí)將發(fā)生聯(lián)系測度沖突。一般而言爱态,一對多包含一對一谭贪,多對多包含一對多境钟。所以解決這種沖突的方法往往取較高測度為集成后的相應(yīng)聯(lián)系的測度锦担。

5 邏輯結(jié)構(gòu)設(shè)計(jì)

數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)的任務(wù)就是把概念結(jié)構(gòu)設(shè)計(jì)階段設(shè)計(jì)好的基本 E-R 圖轉(zhuǎn)換為與具體機(jī)器上的 DBMS 產(chǎn)品所支持的數(shù)據(jù)模型相符合的邏輯結(jié)構(gòu)。這一階段是數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)的重要階段慨削。

數(shù)據(jù)庫邏輯設(shè)計(jì)的基礎(chǔ)是概念設(shè)計(jì)的結(jié)果洞渔,而其成果應(yīng)包括某 DBMS 所支持的外模式套媚、概念模式及其說明及建立外模式和概念模式的 DDL 程序误趴。因此幸冻,進(jìn)行邏輯設(shè)計(jì)前,必須了解數(shù)據(jù)庫設(shè)計(jì)的需求說明和概念設(shè)計(jì)的成果(包括 E-R 圖和其他文檔)慎王,并仔細(xì)閱讀有關(guān)DBMS 的文件浆熔。數(shù)據(jù)庫的外模式和概念模式是用戶所看到的數(shù)據(jù)庫本辐,是應(yīng)用程序訪問數(shù)據(jù)庫的接口,因此在數(shù)據(jù)庫邏輯設(shè)計(jì)階段医增,還必須提供應(yīng)用程序編制的有關(guān)說明慎皱,最好試編一些典型的訪問數(shù)據(jù)庫的應(yīng)用程序,以檢驗(yàn)所設(shè)計(jì)的概念模式是否滿足使用要求叶骨。概念模式是數(shù)據(jù)庫的基礎(chǔ)茫多,它的設(shè)計(jì)質(zhì)量對數(shù)據(jù)庫的使用和性能,以及數(shù)據(jù)庫在今后發(fā)展過程中的穩(wěn)定性均有直接的影響忽刽。為了設(shè)計(jì)出能夠正確反映一個(gè)項(xiàng)目數(shù)據(jù)間內(nèi)在聯(lián)系的好的概念模式天揖,設(shè)計(jì)時(shí)必須正確處理各種應(yīng)用程序之間、數(shù)據(jù)庫性能與數(shù)據(jù)模式的合理性和穩(wěn)定性之間的各種矛盾跪帝,對設(shè)計(jì)中出現(xiàn)的各種矛盾要權(quán)衡利弊今膊,分清主次,按統(tǒng)籌兼顧的原則加以正確處理歉甚。

邏輯結(jié)構(gòu)設(shè)計(jì)一般分為以下幾個(gè)步驟:

  1. 將概念結(jié)構(gòu)向一般關(guān)系模型轉(zhuǎn)化万细;
  2. 將第一步得到的結(jié)構(gòu)向特定的 DBMS 支持下的數(shù)據(jù)模型轉(zhuǎn)換。
  3. 依據(jù)應(yīng)用的需求和具體的 DBMS 的特征進(jìn)行調(diào)整與完善纸泄。

下面以常用的 E-R 模型和擴(kuò)充 E-R 模型為主赖钞,針對關(guān)系數(shù)據(jù)庫的邏輯設(shè)計(jì)介紹基本原則和方法。

5.1 基本 E-R 模型向關(guān)系模型的轉(zhuǎn)換

基本 E-R 模型主要包含實(shí)體和聯(lián)系兩個(gè)抽象概念聘裁,實(shí)體和聯(lián)系本身還可能附有若干屬性雪营。其轉(zhuǎn)換的基本原則是,實(shí)體和聯(lián)系分別轉(zhuǎn)換成關(guān)系衡便,屬性則轉(zhuǎn)換成相應(yīng)關(guān)系的屬性献起。因此, E-R 模型向關(guān)系模型的轉(zhuǎn)換比較直觀镣陕,但不同元數(shù)的聯(lián)系具體轉(zhuǎn)換方法稍有不同谴餐,下面根據(jù)不同的情況分別討論。

(1)一對一聯(lián)系

一個(gè) 1:1 聯(lián)系可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式呆抑,也可以與任意一端對應(yīng)的關(guān)系模式合并岂嗓。

如果轉(zhuǎn)換為一個(gè)獨(dú)立的模式,則與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性鹊碍,每個(gè)實(shí)體的碼均是該關(guān)系的候選鍵厌殉。

如果與某一端實(shí)體對應(yīng)的關(guān)系模式合并食绿,則需要在該關(guān)系模式的屬性中加入另一個(gè)關(guān)系模式的碼和聯(lián)系本身的屬性。

(2)一對多聯(lián)系

一個(gè) 1: n 聯(lián)系可以轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式公罕,也可以與任意 n 端對應(yīng)的關(guān)系模式合并器紧。如果轉(zhuǎn)換為一個(gè)獨(dú)立的模式,則與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性楼眷,而關(guān)系的碼為 n 端實(shí)體的碼铲汪。如果與 n 端實(shí)體對應(yīng)的關(guān)系模式合并,則需要在該關(guān)系模式的屬性中加入1 端關(guān)系模式的碼和聯(lián)系本身的屬性 罐柳。轉(zhuǎn)換模式本質(zhì)上與一對一聯(lián)系轉(zhuǎn)換模式相同桥状。

(3)多對多聯(lián)系

由兩個(gè)實(shí)體類之間多對多聯(lián)系組成的 E-R 模型向關(guān)系模型轉(zhuǎn)換時(shí),將兩個(gè)實(shí)體類和一個(gè)聯(lián)系類分別轉(zhuǎn)換成關(guān)系硝清,實(shí)體類的屬性分別轉(zhuǎn)換成對應(yīng)關(guān)系的屬性辅斟,其標(biāo)識屬性為其關(guān)鍵字,由聯(lián)系類轉(zhuǎn)換得到的關(guān)系的屬性由兩個(gè)實(shí)體類的標(biāo)識屬性和聯(lián)系類本身的屬性組成芦拿,其關(guān)鍵字是由兩個(gè)聯(lián)系的實(shí)體類的標(biāo)識屬性組成士飒。

(4)多元聯(lián)系

實(shí)體類分別轉(zhuǎn)換為相應(yīng)的關(guān)系,三個(gè)實(shí)體類間的多元聯(lián)系轉(zhuǎn)換為以該聯(lián)系名為關(guān)系名的關(guān)系蔗崎,關(guān)系的屬性由各實(shí)體的標(biāo)識屬性及其聯(lián)系的屬性組成酵幕,并以各實(shí)體的標(biāo)識屬性為其關(guān)鍵字。例如下圖所示的部件(PART)缓苛、工程(PROJECT)和供應(yīng)者(SUPPLIER)三者之間的聯(lián)系為 PJS芳撒,其屬性為 QTY。轉(zhuǎn)換時(shí)未桥,把 PART笔刹、 PROJECT、 SUPPLIER 和聯(lián)系 PJS 分別轉(zhuǎn)換為相應(yīng)的關(guān)系冬耿,其結(jié)果如下:

(5)自聯(lián)系

自聯(lián)系是同一實(shí)體集的實(shí)體間的聯(lián)系舌菜。例如對于職工實(shí)體類內(nèi)部有領(lǐng)導(dǎo)與被領(lǐng)導(dǎo)的聯(lián)系,在部件這個(gè)實(shí)體集的實(shí)體之間有組成成分與組成者之間的聯(lián)系等亦镶,均屬于
實(shí)體類的自聯(lián)系日月。在這種聯(lián)系中,參與聯(lián)系的實(shí)體雖然來自同一實(shí)體類缤骨,但所起的作用不一樣爱咬。

(6)弱實(shí)體類的轉(zhuǎn)換

一個(gè)實(shí)體類,如果它的存在依賴于另一實(shí)體類绊起,則稱之為弱實(shí)體類精拟。例如職工的親屬( DEPENDENTS)是依賴于職工( EMPLOYEE)實(shí)體類而存在的,因此實(shí)體集親屬( DEPENDENTS)是弱實(shí)體類。由于弱實(shí)體類不能獨(dú)立地存在串前,而是由其他實(shí)體標(biāo)識而存在,所以不能單獨(dú)地轉(zhuǎn)換成一個(gè)關(guān)系实蔽。

其中 kinship 表示職工親屬與職工的關(guān)系荡碾,可以取值為“配偶”、“兒子”局装、“女兒”等坛吁。

另外,還有4種情況是需要特別注意的 :

  1. 多值屬性的處理铐尚。如果 ER 圖中某實(shí)體具有一個(gè)多值屬性拨脉,則應(yīng)該進(jìn)行優(yōu)化,把該屬性提升為一個(gè)實(shí)體宣增∶蛋颍或者在轉(zhuǎn)化為關(guān)系模式時(shí),將實(shí)體的碼與多值屬性單獨(dú)構(gòu)成一個(gè)關(guān)系模式爹脾。
  2. BLOB 型屬性的處理帖旨。典型的 BLOB 是一張圖片或一個(gè)聲音文件,由于它們的容量比較大灵妨,必須使用特殊的方式來處理解阅。處理 BLOB 的主要思想就是讓文件處理器 ( 如數(shù)據(jù)庫管理器 ) 不去理會文件是什么,而是關(guān)心如何去處理它泌霍。因此货抄,從優(yōu)化的角度考慮,應(yīng)采用的設(shè)計(jì)方案是將 BLOB字段與關(guān)系的碼獨(dú)立為一個(gè)關(guān)系模式朱转;
  3. 派生屬性的處理蟹地。因?yàn)榕缮鷮傩钥捎善渌麑傩杂?jì)算得到,因此藤为,在轉(zhuǎn)化成關(guān)系模式時(shí)锈津,通常不轉(zhuǎn)換派生屬性 。
  4. 在對象 - 關(guān)系數(shù)據(jù)模型中凉蜂,這里的關(guān)系模式就對應(yīng)類琼梆,關(guān)系模式的屬性就對應(yīng)類的屬性。

5.2 數(shù)據(jù)模型的優(yōu)化

由 E-R 圖表示的概念模型轉(zhuǎn)換得到的關(guān)系模型經(jīng)過規(guī)范化以后窿吩,基本上可以反映一個(gè)企業(yè)數(shù)據(jù)的內(nèi)在聯(lián)系茎杂,但不一定能滿足應(yīng)用的全部需要和系統(tǒng)要求,因此纫雁,還必須根據(jù)需求分析對模型做進(jìn)一步的改善和調(diào)整煌往,其內(nèi)容主要是改善數(shù)據(jù)庫的性能和節(jié)省存儲空間兩個(gè)方面。

5.2.1 改善數(shù)據(jù)庫性能的考慮

查詢速度是關(guān)系數(shù)據(jù)庫應(yīng)用中影響性能的關(guān)鍵問題,必須在數(shù)據(jù)庫的邏輯設(shè)計(jì)和物理設(shè)計(jì)中認(rèn)真加以考慮刽脖,特別是那些對響應(yīng)時(shí)間要求較苛刻的應(yīng)用羞海,應(yīng)予以特別注意。

就數(shù)據(jù)庫的邏輯設(shè)計(jì)而論曲管,可從下列幾個(gè)方面提高查詢的速度却邓。

(1)減少連接運(yùn)算

連接運(yùn)算對關(guān)系數(shù)據(jù)庫的查詢速度有著重要的影響,連接的關(guān)系越多院水,參與連接的關(guān)系越大腊徙,開銷也越大,因而查詢速度也越慢檬某。對于一些常用的撬腾、性能要求較高的數(shù)據(jù)庫查詢,最好是一元查詢恢恼,但這與規(guī)范化的要求相矛盾民傻。有時(shí)為了保證性能,往往不得不犧牲規(guī)范化要求场斑,把規(guī)范化的關(guān)系再合并起來饰潜,稱之為逆規(guī)范化。當(dāng)然和簸,這樣做會
引起更新異常彭雾。總之锁保,逆規(guī)范化有得有失薯酝,設(shè)計(jì)者可根據(jù)實(shí)際情況進(jìn)行權(quán)衡。

(2)減小關(guān)系大小及數(shù)據(jù)量
被查詢的關(guān)系的大小對查詢速度影響較大爽柒。為了提高查詢速度吴菠,可以采用水平分割或垂直分割等方法把一個(gè)關(guān)系分成幾個(gè)關(guān)系,使每個(gè)關(guān)系的數(shù)據(jù)量減少浩村。例如做葵,對于大學(xué)中有關(guān)學(xué)生的數(shù)據(jù),既可以把全校學(xué)生的數(shù)據(jù)集中在一個(gè)關(guān)系中心墅,也可以用水平分割的方法酿矢,分系建立關(guān)系,從而減少了每個(gè)關(guān)系的元組數(shù)怎燥。前者對全校范圍內(nèi)的查詢較方便瘫筐,后者則可以顯著提高對指定系的查詢速度。也可采用垂直分割的方法铐姚,把常用數(shù)據(jù)與非常用數(shù)據(jù)分開策肝,以提高常用數(shù)據(jù)的查詢速度。例如,高校中教職工檔案之众,屬性很多拙毫,有些需經(jīng)常查詢,有些則很少查詢棺禾,如果放在一起缀蹄,則關(guān)系的數(shù)據(jù)量就會很大,影響查詢速度帘睦,因此把常用屬性和非常用屬性分開,就可提高對常用屬性的查詢速度坦康。

(3)盡量使用快照

快照是某個(gè)用戶所關(guān)心的那部分?jǐn)?shù)據(jù)竣付,與視圖一樣是一種導(dǎo)出關(guān)系,但它與視圖有兩點(diǎn)不同:一是視圖是虛關(guān)系滞欠,數(shù)據(jù)庫中并不存儲作為視圖的導(dǎo)出關(guān)系古胆,僅僅保留它的定義,快照則是一個(gè)由系統(tǒng)事先生成后保留在數(shù)據(jù)庫中的實(shí)關(guān)系筛璧;二是視圖隨數(shù)據(jù)當(dāng)前值的變化而變化逸绎,快照則不隨原來關(guān)系中數(shù)據(jù)的改變而及時(shí)改變,它只反映數(shù)據(jù)庫中某一時(shí)刻的狀態(tài)夭谤,不反映數(shù)據(jù)庫的當(dāng)前狀態(tài)棺牧,猶如照片只反映某一時(shí)刻的情景,不能反映情景變化一樣朗儒,之所以稱它為快照颊乘,原因就在于此。但它與照片又有不同醉锄,快照不是一成不變的乏悄,它可以由系統(tǒng)周期性地刷新,或由用戶用命令刷新恳不。刷新時(shí)用當(dāng)前值更新舊值檩小。在實(shí)際應(yīng)用中,快照可滿足相當(dāng)一部分應(yīng)用的需要烟勋,甚至有些應(yīng)用就是需要快照规求,而不是當(dāng)前值。例如注明列出“某年某月某日截止”的統(tǒng)計(jì)或報(bào)表就是快照卵惦。由于快照是事先生成并存儲在數(shù)據(jù)庫中的颓哮,因而可大大縮短響應(yīng)時(shí)間。目前不少 DBMS鸵荠,如 Oracle冕茅、 MS SQL Server 等支持快照。對不支持快照的 DBMS,用戶也可以把需要作為實(shí)關(guān)系使用的導(dǎo)出關(guān)系作為一個(gè)獨(dú)立關(guān)系存于數(shù)據(jù)庫中姨伤,但這種做法只能供查詢使用哨坪,對它們的刷新及管理由用戶負(fù)責(zé)。

5.2.2 節(jié)省存儲空間的一些考慮

盡管隨著硬件技術(shù)的發(fā)展乍楚,提供給用戶使用的存儲空間越來越大当编,但畢竟是有限度的。而數(shù)據(jù)庫徒溪,尤其是復(fù)雜應(yīng)用的大型數(shù)據(jù)庫忿偷,需要占用較大的外存空間。因此臊泌,節(jié)省存儲空間仍是數(shù)據(jù)庫設(shè)計(jì)中應(yīng)該考慮的問題鲤桥,不但要在數(shù)據(jù)庫的物理設(shè)計(jì)中考慮,而且還應(yīng)在邏輯設(shè)計(jì)中加以考慮渠概。在數(shù)據(jù)庫邏輯設(shè)計(jì)中可采取以下措施:

(1)縮小每個(gè)屬性占用的空間

減少每個(gè)屬性占用的空間茶凳,是節(jié)省存儲空間的一個(gè)有效的措施。通巢ゾ荆可以有兩種方法:即用編碼和用縮寫符號表示屬性贮喧,但這兩種方法的缺點(diǎn)是失去了屬性值含義的直觀性。

(2)采用假屬性

采用假屬性可以減少重復(fù)數(shù)據(jù)占用的存儲空間猪狈。設(shè)某關(guān)系模型 R 的屬性 A 和 B 之間存在函數(shù)依賴 A→B箱沦, B 的每一個(gè)值需要占用較大的空間,但 B 的域中不同的值卻比較少雇庙, A 的域中具有較多的不同值饱普,則 B 的同一值可能在多個(gè)元組中重復(fù)出現(xiàn),從而需要占用較多的空間状共。為了節(jié)省空間套耕,可利用屬性 B 的域中不同值少的特點(diǎn),對 B 的值進(jìn)行分類峡继,用 B′表示 B 的類型冯袍,則 A→B 可分解成兩個(gè)函數(shù)依賴,即:A→B′碾牌, B′→B康愤。

這樣,就可用 B′代替原來元組較多的關(guān)系 R 中的屬性 B舶吗,而另外建立一個(gè)較小的關(guān)系 R′來描述 B′與 B 的對應(yīng)關(guān)系征冷。這里 B′在原關(guān)系 R 中起了屬性 B 的替身的作用,所以稱 B′ 為假屬性誓琼。例如检激,在職工關(guān)系中肴捉,職工的經(jīng)濟(jì)狀況這一屬性通常由職工號決定,一個(gè)大型企業(yè)的職工人數(shù)很多叔收,如每一職工逐一填寫齿穗,就要占用較多的空間,為了節(jié)省空間可把經(jīng)濟(jì)狀況分為幾種類型饺律,在元組較多的職工關(guān)系中用經(jīng)濟(jì)狀況的類型代替原來的經(jīng)濟(jì)狀況窃页,這里經(jīng)濟(jì)狀況的類型就是假屬性,另外建立一個(gè)較小的關(guān)系來描述每種經(jīng)濟(jì)狀況類型的具體內(nèi)容复濒。

數(shù)據(jù)庫設(shè)計(jì)與數(shù)學(xué)問題求解不同脖卖,它是一項(xiàng)綜合性工作,受到各種各樣的要求和因素的制約巧颈,有些要求往往又是彼此矛盾的畦木,因此,設(shè)計(jì)結(jié)果很難說是最佳的洛二,常常有得有失馋劈,設(shè)計(jì)者必須根據(jù)實(shí)際情況攻锰,綜合運(yùn)用上述原則和有關(guān)理論晾嘶,在基本合理的總體設(shè)計(jì)的基礎(chǔ)上,做一些仔細(xì)的調(diào)整娶吞,力求最大限度地滿足用戶各種各樣的要求垒迂。

6 物理結(jié)構(gòu)設(shè)計(jì)

數(shù)據(jù)庫在實(shí)際的物理設(shè)備上的存儲結(jié)構(gòu)和存取方法稱為數(shù)據(jù)庫的物理結(jié)構(gòu)。數(shù)據(jù)庫物理設(shè)計(jì)是利用已確定的邏輯結(jié)構(gòu)及 DBMS 提供的方法妒蛇、技術(shù)机断,以較優(yōu)的存儲結(jié)構(gòu)、數(shù)據(jù)存取路徑绣夺、合理的數(shù)據(jù)存儲位置及存儲分配吏奸,設(shè)計(jì)出一個(gè)高效的、可實(shí)現(xiàn)的物理數(shù)據(jù)庫結(jié)構(gòu)陶耍。顯然奋蔚,數(shù)據(jù)庫的物理設(shè)計(jì)是完全依賴于給定的硬件環(huán)境和數(shù)據(jù)庫產(chǎn)品的。數(shù)據(jù)庫物理設(shè)計(jì)過程如圖 11 所示烈钞。

由于不同的 DBMS 提供的硬件環(huán)境和存儲結(jié)構(gòu)泊碑、存取方法,以及提供給數(shù)據(jù)庫設(shè)計(jì)者的系統(tǒng)參數(shù)毯欣、變化范圍有所不同馒过,因此,為了設(shè)計(jì)出一個(gè)較好的存儲模式酗钞,設(shè)計(jì)者必須了解以下幾方面的問題腹忽,做到心中有數(shù)来累。

(1)了解并熟悉應(yīng)用要求,包括各個(gè)用戶對應(yīng)的數(shù)據(jù)視圖留凭,即數(shù)據(jù)庫的外模式(子模式)佃扼,分清哪些是主要的應(yīng)用,了解各個(gè)應(yīng)用的使用方式蔼夜、數(shù)據(jù)量和處理頻率等兼耀,以便對時(shí)間和空間進(jìn)行平衡,并保證優(yōu)先滿足應(yīng)用的時(shí)間要求求冷。

(2)熟悉使用的 DBMS 的性能瘤运,包括 DBMS 的功能,提供的物理環(huán)境匠题、存儲結(jié)構(gòu)拯坟、存取方法和可利用的工具。

(3)了解存放數(shù)據(jù)的外存設(shè)備的特性韭山,如物理存儲區(qū)域的劃分原則郁季,物理塊的大小等有關(guān)規(guī)定及 I/O 特性等。

存儲模式和概念模式不一樣钱磅,它不是面向用戶的梦裂,一般的用戶不一定也不需要了解數(shù)據(jù)庫存儲模式的細(xì)節(jié)。所以數(shù)據(jù)庫存儲模式的設(shè)計(jì)可以不必考慮用戶理解的方便盖淡,其設(shè)計(jì)目標(biāo)主要是提高數(shù)據(jù)庫的性能年柠,其次是節(jié)省存儲空間。

在進(jìn)行物理設(shè)計(jì)時(shí)褪迟,設(shè)計(jì)人員可能用到的數(shù)據(jù)庫產(chǎn)品是多種多樣的冗恨。不同的數(shù)據(jù)庫產(chǎn)品所提供的物理環(huán)境、存儲結(jié)構(gòu)和存取方法有很大差別味赃,能供設(shè)計(jì)人員使用的設(shè)計(jì)變量掀抹、參數(shù)范圍也大不相同,因此沒有通用的物理設(shè)計(jì)方法可遵循心俗,只能給出一般的設(shè)計(jì)內(nèi)容和原則傲武。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市另凌,隨后出現(xiàn)的幾起案子谱轨,更是在濱河造成了極大的恐慌,老刑警劉巖吠谢,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件土童,死亡現(xiàn)場離奇詭異,居然都是意外死亡工坊,警方通過查閱死者的電腦和手機(jī)献汗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門敢订,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罢吃,你說我怎么就攤上這事楚午。” “怎么了尿招?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵矾柜,是天一觀的道長。 經(jīng)常有香客問我就谜,道長怪蔑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任丧荐,我火速辦了婚禮缆瓣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘虹统。我一直安慰自己弓坞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布车荔。 她就那樣靜靜地躺著渡冻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夸赫。 梳的紋絲不亂的頭發(fā)上菩帝,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天咖城,我揣著相機(jī)與錄音茬腿,去河邊找鬼。 笑死宜雀,一個(gè)胖子當(dāng)著我的面吹牛切平,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辐董,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼悴品,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了简烘?” 一聲冷哼從身側(cè)響起苔严,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎孤澎,沒想到半個(gè)月后届氢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡覆旭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年退子,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岖妄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寂祥,死狀恐怖荐虐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丸凭,我是刑警寧澤福扬,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站惜犀,受9級特大地震影響忧换,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜向拆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一亚茬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浓恳,春花似錦刹缝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晴圾,卻和暖如春颂砸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背死姚。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工人乓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人都毒。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓色罚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親账劲。 傳聞我的和親對象是個(gè)殘疾皇子戳护,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容