高見斌
(武漢職業(yè)技術學院,武漢 430074)
信息社會離不開數據庫,只有科學規(guī)范的數據庫才能夠滿足人們對信息的需求。數據庫設計是開發(fā)應用數據庫整個過程的第一環(huán),這個環(huán)節(jié)的優(yōu)劣直接影響后續(xù)的使用和開發(fā)效果,因此,數據庫的設計與優(yōu)化顯得尤為重要。
數據庫采用New Orleans方法設計,主要思想是過程迭代和逐步求精。數據庫設計通常分為四個階段:需求分析、概念設計、邏輯設計和物理設計。
此階段是與用戶交流溝通的過程,了解用戶需求,熟悉其數據及處理流程。根據用戶需求,畫出數據流程圖,數據流程圖表達了數據和處理過程之間的關系,一般包括數據項、數據結構、數據流、數據存儲和處理過程五個部分。同時建立數據字典,數據字典是各類數據描述和功能需求描述的集合。需求分析的重點是用戶對信息的要求、對數據處理的要求、數據安全性與完整性要求。最后把數據流程圖和數據字典反饋給用戶看,要求用戶簽字確認,形成原始文檔材料,這是進行下一步概念設計的依據。
依據需求分析的結果,形成不依賴于具體機器、獨立于各種數據庫管理系統產品的概念數據模型。這種概念數據模型利用ER或IDEF1X建模方法實現,用特定的圖形方式表達實體及其屬性、實體間的聯系以及各種約束等。
2.2.1 概念設計的一般步驟
(1)準備工作。這個階段所需做的是,組織建模人員,制定規(guī)章制度,確定建模目標,制訂建模計劃,收集源材料,源材料包括各種報表、數據和功能描述、業(yè)務流程等。
(2)定義實體。實體集是指具有相同屬性或特征的事物集合。大部分實體可以從收集的源材料中直接或間接標識出來。一般來說,表示物的術語和具有編號的術語,如學生、教師、教材、學號、課程號等名詞代表的實體能夠直接標識出來,形成初步的實體表。一些隱形的實體,比如診斷號,處罰號等,要結合業(yè)務需要和事情處理過程分析標識出來。
(3)定義主鍵。為了能夠惟一標識一個實體或聯系實例,從實體屬性中找出多個候選鍵,再從候選鍵中選定主鍵。通過非空約束和取值惟一約束來保證主鍵的有效性。比如把職工號定義成主鍵,那么它的取值不能是空值,也不能取相同值。
(4)定義聯系。實體集之間或一個實體集內各實體之間存在聯系,聯系類型有三種:一對一聯系、一對多聯系、多對多聯系。在此基礎上,聯系可再進一步分為分類聯系、標識聯系和非標識聯系。分類聯系是指父實體與子實體之間的聯系,父子代表的是同一個對象。標識聯系也是指父實體與子實體之間的聯系,特點是子實體的每個實例都需要通過和父實體的聯系來標識,否則為非標識聯系。非標識聯系又分為中強制聯系和為非強制聯系,強制聯系是指每個子實體的實例都與而且只與一個父實體的一個實例關聯,否則為非強制聯系。
(5)定義屬性。從上述實體表中,找出每個實體中包含的說明性字段作為屬性,比如學生實體屬性有學號、姓名、性別、出生日期等。實體集之間的聯系也有自己的屬性,比如學生和課程之間的聯系的屬性應是成績。屬性分為主屬性和非主屬性,作為主鍵的屬性是主屬性,否則是非主屬性。非主屬性要滿足完全函數依賴規(guī)則和非傳遞規(guī)則。完全函數依賴規(guī)則是指每個非主屬性必須依賴于整個主鍵且僅依賴于主鍵,非傳遞規(guī)則是指屬性之間不存在傳遞關系。
(6)定義其他對象和規(guī)則。定義屬性的數據類型、長度、默認值、非空和約束規(guī)則等。定義視圖、存儲過程、觸發(fā)器、角色、同義詞等對象信息。
2.2.2 ER方法設計概念模型的過程
(1)設計出局部ER圖。局部ER圖模型設計是從數據流程圖和數據字典出發(fā),確定實體和屬性。同時根據數據流程圖中表示的數據間的處理關系,確定實體之間的聯系。實體用矩形框表示,屬性用橢園表示,聯系用菱形表示,數據間聯結關系用直線表示。局部ER圖一般含有若干個。
(2)綜合成初步ER圖。局部ER圖設計完成之后,將所有的局部ER圖合并成全局概念ER圖。合并方法是,同一實體只出現一次,兩兩合并,消除合并引起的命名、屬性和結構的沖突問題。全局概念ER圖不僅要支持所有的局部ER圖,而且必須表示一個完整一致的數據概念模型。
(3)優(yōu)化成完美ER圖。上述得到的初步ER圖是全局的數據概念模型,基本能反映現實世界數據及其聯系,但它不一定是最優(yōu)的,可能還存在潛在的冗余屬性或聯系,這要根據實際應用情況來確定是否加以消除。
此階段的任務是將前面建立起來的概念模型轉換成某個具體的數據庫管理系統支持的數據模型。數據模型通常有三種:層次模型、網狀模型和關系模型。當前廣泛使用的數據模型是關系模型。關系模型是用用二維表結構來表示實體以及實體之間的聯系。目前流行的數據庫管理系統如SQL server、Mysql、Oracle、Access等都支持關系模型。概念模型轉換成關系模型的方法:
(1)實體轉換為關系模式。一個實體轉換為一個關系模式,實體的屬性就是關系的屬性。實體的主鍵就是關系的主鍵。這種轉換是直接轉換。(2)聯系轉化為關系模式。因聯系有三種類型,所以分三種情況分別進行轉換:一對一聯系時,將聯系與任意端合并,加入另一端主鍵和聯系的屬性;一對多聯系時,將聯系與n端合并,加入1端實體的主鍵和聯系的屬性;多對多聯系時,將聯系轉換成一個關系,加兩端實體的主鍵和聯系的屬性。
關系模型建立起來后,根據需求分析的要求,需要進行數據庫的完整性設計和規(guī)范化處理。數據的完整性是指保證數據庫中數據及語義的正確性和有效性,防止任何對數據造成錯誤的操作。規(guī)范是指改善數據的結構化、共享性、一致性和可操作性。不規(guī)范會產生數據冗余,帶來很多問題。在關系數據庫中的每個關系都需要進行規(guī)范化,使之達到一定的規(guī)范化程度。
一般說來,一個關系模式需要滿足三個范式。范式是指規(guī)范化的程度或級別。第一范式是指關系的所有屬性不可再分,這是最基本的要求,否則它就不是關系。第二范式是指所有非主屬性完全函數依賴每個候選關鍵字,非主屬性是指不是主鍵的屬性。第三范式是指所有非主屬性都不傳遞函數依賴每個候選鍵。如果一個關系不滿足第二、第三范式,會帶來數據冗余、更新異常、插入異常、刪除異常等問題。
關系模型,亦即基本表,就是數據庫的模式。在對模式進行規(guī)范化處理后,從安全性和用戶對處理的要求考慮,在基本表(TABLE)的基礎上再建立必要的視圖(VIEW),形成數據庫的外模式。視圖內容由SELECT查詢語句指定。同真實的表相似,包含一系列帶有名稱的列和行數據。行和列數據來自創(chuàng)建視圖的查詢所引用的表。視圖并不在數據庫中以存儲的數據值集形式存在,它是在被引用時動態(tài)生成,因此視圖是虛擬的表。視圖(VIEW)形成數據庫的外模式。視圖的作用有:簡化用戶的操作,即被經常使用的查詢可以被定義為視圖,使得用戶不必為以后的操作每次都指定全部的條件;提高安全性,即通過視圖,用戶只能查詢和修改他們所能見到的數據,并能限制到某些數據行,而其他數據既看不見也取不到;提高邏輯數據獨立性,即如果沒有視圖,應用一定是建立在表上。有了視圖之后,程序可以建立在視圖之上,從而使程序與數據庫表被視圖分隔開來。
根據數據庫管理系統的特點和處理的需要,對邏輯設計形式的關系模型進行物理存儲安排,設計索引,形成數據庫(DATABASE)內模式。物理設計由操作系統和數據庫管理系統共同完成。
[1] 熊發(fā)涯.SQL Server 2008數據庫技術與應用[M].北京:高等教育出版社,2017.