第3章
關系資料庫設計
3.1 關系資料庫設計過程
資料庫設計是開發一個好的資料庫應用系統的基礎,它的基本任務是根據使用者的需求,以及資料庫的支撐環境(包括DBMS、作業系統和硬體),設計出資料模式(包括外模式、模式和内模式)以及典型的應用程式。
在資料庫的設計過程中,不同的人員會參與到資料庫設計的不同階段。比如,使用者和資料庫管理者主要參與需求分析和資料庫的運作維護;應用開發人員在系統實施階段參與進來,負責編制程式和準備軟硬體環境;而系統分析人員、資料庫設計人員可能需要自始至終地參與資料庫設計。需要注意的是,在資料庫設計過程中必須充分調動使用者的積極性。另外,應用環境的改變、新技術的出現等都會導緻應用需求的變化,是以設計人員在設計資料庫時必須充分考慮系統的可擴充性,使設計靈活、易于修改。
資料庫設計是軟體工程的一部分,主要包括6個階段:需求分析階段、概念結構設計階段、邏輯結構設計階段、資料庫實體設計階段、資料庫實施階段、資料庫運作和維護階段。
作為一種主流的資料庫,關系資料庫設計的目标是生成一組關系模式,使得既可以友善地擷取資訊,又不必存儲不必要的備援資訊。關系資料庫的設計過程同樣也包括上述6個階段,如圖3-1所示,其核心是概念資料模組化,将概念模型轉為關系模型并進行規範化處理。具體來說就是将E-R圖轉換為關系模式,以及對關系模式進行規範化。比如,構造出來的關系模式是否适合所針對的具體問題,應該構造幾個關系模式,每個關系模式由哪些屬性構成等,這些都是關系資料庫設計過程中要解決的核心問題。
3.2 需求分析
需求分析是整個設計階段最困難、最耗時的階段,它是在資料庫建立的必要性和可行性分析研究的基礎上進行的。通常的工作包括詳細調查現實世界要處理的對象,如組織、部門、企業等,調查和分析使用者的業務活動和資料的使用情況,弄清所用資料的種類、範圍、數量以及它們在業務活動中交流的情況,确定使用者對資料庫系統的使用要求和各種限制條件等。在該階段需要準确了解、分析使用者的需求,形成需求分析說明書。使用者需求主要包括以下三方面:

1)資訊需求,使用者要從資料庫獲得的資訊内容。
2)處理需求,即完成什麼處理功能及處理方式。
3)安全性和完整性要求,在定義資訊需求和處理需求的同時,必須要确定安全性要求、完整性限制條件等。
需求分析的3個主要步驟是:需求資訊的收集、分析整理和評審。評審是将需求分析結果再次送出給使用者,獲得使用者的認可,以避免重大疏漏和錯誤。
在了解使用者需求後,要進一步描述和分析使用者的需求,通常采用結構化分析(Structured Analysis,SA)方法自頂向下、逐層分解。SA方法的基本思想是“分解”和“抽象”。分解是指将大問題分解為若幹個小問題,将系統的複雜性降低到可以掌握的程度,然後再逐一解決這些小問題。抽象是指分解可以分層進行,即先考慮問題最本質的屬性,暫時略去細節,以後再逐層添加細節,直至涉及最具體的内容。
SA的描述方法有分層的資料流圖、資料字典、描述加工邏輯的結構化語言、判定表及判定樹等。一般使用判定表或判定樹來描述處理邏輯,使用資料字典來描述資料。
資料流圖(Data Flow Diagram,DFD)是常用的結構化分析工具之一,也是描述系統工作流程的一種圖形表示法,主要用來描述系統的資料流向和對資料的處理功能。資料流圖包括以下幾個主要元素:
1)帶箭頭的直線,表示資料流,是資料在系統内傳播的路徑。
2)矩形框,表示資料來源或輸出。
3)圓形或橢圓,表示對資料的加工處理。
4)非閉合矩形、單線或雙線,表示需要存儲的資料。
畫分層資料流圖的方法是“先全局後局部,先整體後細節,先抽象後具體”。通常将這種分層的DFD分為頂層、中間層、底層。具體步驟如下:
1)先确定系統範圍,畫出頂層的DFD。
2)逐層分解頂層DFD,獲得若幹中間層DFD。
3)畫出底層的DFD。
圖3-2給出了一個教務管理系統中排課子系統的頂層資料流圖的例子。
資料字典是對系統中資料的較長的描述,是對資料流圖的進一步補充,是下一步概要設計的必要輸入。它用于對資料庫資料描述的集中管理,并為DBA提供有關的報告。資料字典的内容主要有:資料項、資料結構、資料流、資料存儲、加工處理過程。其中,資料項是最基本也是最重要的内容,所謂資料項就是不可再分的資料機關,如學号、課程号、成績等。對資料項的描述主要包括:資料項名、含義說明、别名、類型、長度、取值範圍、取值含義等。
3.3 概念結構設計
概念結構設計是整個資料庫設計的關鍵階段。通過對使用者需求的綜合、歸納與抽象,形成一個獨立于具體DBMS的概念模型。常用E-R模型來描述概念模型。
在概念結構設計階段,設計人員僅從使用者角度看待資料及其處理要求和限制,并産生一個反映使用者觀點的概念模式。概念結構設計主要分為3個步驟:資料抽象,設計出局部概念模式;将局部概念模式合并成全局概念模式;最後進行評審,以确認該階段的任務是否完成,有無疏漏和錯誤。
設計概念結構通常有以下4類方法:
1)自頂向下:首先定義全局概念結構的架構,然後逐漸細化。
2)自底向上:首先定義各局部應用的概念結構,然後将它們內建起來,得到全局概念結構。
3)逐漸擴張:首先定義最重要的核心概念結構,然後向外擴充,以滾雪球的方式逐漸生成其他概念結構,直至形成總體概念結構。
4)混合政策:将自頂向下和自底向上相結合,使用自頂向下政策設計一個全局概念結構的架構,以它為骨架內建由自底向上政策設計的各局部概念結構。
通常采用自頂向下需求分析、自底向上設計概念結構。概念結構設計的特點如下:
1)能真實、充分地反映現實世界中實體間的聯系。
2)概念模式是各種基本資料模型的共同基礎,易于向關系、網狀、層次等各種資料模型轉換。
3)設計複雜程度得到降低,便于資料的組織管理,也易于修改。
4)概念模式不受特定DBMS的限制,也獨立于存儲安排,因而比邏輯設計得到的模式更為穩定。
5)概念模式不含具體的DBMS所附加的技術細節,更容易為使用者所了解,因而能準确地反映使用者的資訊需求。
3.4 邏輯結構設計
邏輯結構設計階段的主要工作是将概念模型轉換為資料庫的一種邏輯模式,即某種特定DBMS所支援的邏輯資料模式。如果采用基于E-R模型的資料庫設計方法,該階段的任務就是将概念結構設計階段得到的E-R圖,轉換為與選用的DBMS産品所支援的資料模型相符合的邏輯結構。
通常,E-R模型向關系模型轉換是資料庫邏輯結構設計的主要步驟。資料庫邏輯結構設計的關鍵是如何構造合适的資料模式。是以,關系資料庫邏輯設計的主要任務就是按照規則,将概念設計階段設計好的獨立于具體的DBMS的概念模型,轉換為RDBMS産品所支援的一組關系模式,并利用關系資料庫理論對這組關系模式進行規範化設計和優化處理,進而得到滿足所有資料要求的關系模型。
圖3-3給出了邏輯結構設計的主要步驟:首先将概念結構轉換為一般資料模型;然後将一般資料模型轉換為特定DBMS支援下的資料模型;最後對資料模型進行優化。所謂資料模型的優化,就是對得到的初步資料模型進行适當的修改,調整資料模型的結構,以進一步提高資料庫應用系統的性能。目前的DBMS産品多是關系型的,對于關系資料庫邏輯結構設計的主要步驟就是将E-R圖轉換為關系模式,然後利用規範化理論對這組關系模式進行修正和優化,相關内容将在第4章和第5章中介紹。
優化資料模型的方法是,首先确定資料依賴,按照需求分析階段所得到的語義,分别寫出每個關系模式内部各屬性之間的資料依賴,以及不同關系模式屬性之間的資料依賴;接着消除備援的聯系;之後确定每個關系模式所屬的範式;最後按照需求分析階段得到的資料處理要求,分析關系模式是否适合系統的應用環境,如果不适合,還需要對關系模式做進一步分解。
3.5 資料庫實體設計
資料庫實體設計階段是為邏輯資料模型選取一個最适合應用環境的實體結構。所謂資料庫的實體結構,主要是指資料庫的存儲結構和存取方法。
資料庫的實體設計完全依賴于給定的硬體環境和DBMS産品。具體地講,該階段就是根據特定的DBMS所提供的多種存儲結構和存取方法等依賴于具體計算機結構的各項實體設計措施,為具體的應用要求標明最合适的實體存儲結構(如檔案類型、資料的存放次序和索引結構等)、存取路徑和存取方法等。
資料庫實體設計具體包括:确定資料庫的存儲記錄結構;确定資料存儲安排、存取方法的設計;完整性和安全性的設計;應用程式的設計等。其中,應用程式設計通常指進行結構化程式的開發,産生一個可實作的算法集。
對于關系資料庫來說,系統會自動地将使用者設計好的資料庫全局模式轉換為相應的内模式,使用者隻需要考慮是否建立索引、使用什麼方式的索引等問題,有的DBMS會提供一些實體優化的選擇,如記憶體緩沖區的大小及個數、建立不同的磁盤分區等。
3.6 資料庫實施
資料庫實施也稱為資料庫實作。該階段的主要任務是産生一個具體的資料庫和應用程式,并将原始資料導入資料庫中。
對資料庫的實體設計初步評價後,就開始建立資料庫。資料庫實施包括:運用DBMS提供的資料庫語言(如SQL)及宿主語言,根據邏輯設計和實體設計的結果在計算機系統上建立實際的資料庫、裝載資料、編制與調試應用程式并進行資料庫試運作等。
具體地講,使用資料定義語言(DDL)來嚴格描述資料庫結構,在建立資料庫結構之後,開始向資料庫中裝載資料,裝載過程包括:篩選資料、資料格式的轉換、将轉換好的資料輸入計算機中、對資料進行校驗以檢查輸入的資料是否有誤等。編制與調試應用程式與組織資料入庫同步進行。調試應用程式時由于資料入庫可能尚未完成,通常使用模拟資料。應用程式調試完成并且已有一小部分資料入庫後,就可以開始資料庫的試運作。資料庫的試運作也稱為聯合調試,主要包括功能測試和性能測試。
3.7 資料庫運作和維護
試運作合格後即可投入正式運作。資料庫系統正式運作,标志着資料庫設計與應用開發工作的基本結束以及維護階段的開始,在資料庫系統運作過程中需要不斷地對其進行評價、調整與修改。
對資料庫的維護工作主要由DBA完成。運作和維護階段的主要任務包括:
1)維護資料庫的安全性與完整性:檢查系統安全性是否受到侵犯,及時調整授權和密碼。根據使用者要求,不斷修正資料的完整性限制條件。
2)實施資料庫的轉儲與恢複,以便發生故障後能及時恢複。
3)監測并改善資料庫運作性能:對資料庫的存儲空間狀況、響應時間等系統運作過程中的性能參數的值進行分析評價,結合使用者回報确定改進措施。
4)根據使用者要求對資料庫進行重新組織或重構。一般情況下,DBMS提供用于資料重組的實用程式,進行重新安排存儲結構、垃圾回收等工作。重構主要指對資料庫的模式和内模式進行部分修改。
3.8 小結
資料庫設計是資料庫開發的一個重要内容,其難點和核心主要是需求分析階段、概念設計階段、邏輯設計階段和實體設計階段。在資料庫的設計過程中逐漸形成資料庫的各級模式。
需求分析階段綜合各個使用者的應用需求(現實世界的需求),采用資料流圖和資料字典等描述工具,形成需求分析說明書。
概念設計階段形成獨立于機器特點、獨立于各個DBMS産品的概念模式(資訊世界模型),通常使用E-R圖來描述,并最終形成概念設計說明書。需求分析和概念設計這兩個階段獨立于任何具體的DBMS。
邏輯設計階段将E-R圖轉換成具體的資料庫産品支援的資料模型,如關系模型,形成資料庫邏輯模式,然後根據使用者處理的要求和安全性的考慮,在基本表的基礎上再建立必要的視圖,形成資料的外模式,該階段産生說明關系資料庫中的表、視圖、屬性和限制的資料庫邏輯設計說明書。
實體設計階段根據DBMS的特點和處理需要,進行實體存儲安排,建立索引,形成資料庫内模式,該階段産生用于說明資料庫存儲結構和存取方法的資料庫實體設計說明書。邏輯設計和實體設計這兩個階段與所選用的具體DBMS密切相關。
習題
1.簡述資料庫設計的六個階段的作用和産物。
2.資料庫邏輯設計的主要目的和任務是什麼?
3.資料字典的主要内容和作用是什麼?
4.資料庫系統投入運作後,還需要做哪些工作?