title: 資料庫設計
date: 2020-12-15 10:08:05
tags: 資料庫
[ ] 資料庫設計概述
[ ] 需求設計
[ ] 概念結構設計
[ ] 邏輯結構設計
[ ] 實體設計
[ ] 資料庫的實施和維護
廣義地講,是資料庫及其應用系統的設計,即設計整個資料庫應用系統;
狹義地講,是設計資料庫本身,即設計資料庫的各級模式并建立資料庫,這是資料庫應用系統設計的一部分。
什麼是資料庫設計?(一般性定義)
資料庫設計是指對于一個給定的應用環境,設計一個優良的資料庫邏輯模式和實體結構,并據此建立資料庫及其應用系統,使之能夠有效地存儲和管理資料,滿足各種使用者的應用需求,包括資訊管理要求和資料處理要求:
資訊管理要求:在資料庫中存儲和管理需要的資料對象。
資料處理要求:對資料對象需要進行的處理,如查詢、增删改、統計和分析等。
資料庫建設的基本規律
三分技術,七分管理,十二分基礎資料管理:
管理
資料庫建設項目管理
企業(即應用部門)的業務管理
基礎資料:資料的收集、整理、組織和不斷更新
結構(資料)設計和行為(處理)設計相結合
将資料庫結構設計和資料處理設計密切結合
傳統的軟體工程:重行為設計,忽視對應用中資料語義的分析和抽象,隻要有可能就盡量推遲資料結構設計
早期的資料庫設計:重結構設計,緻力于資料模型和資料庫模組化方法研究,忽視了行為設計對結構設計的影響
大型資料庫設計是涉及多學科的綜合性技術,又是一項龐大的工程項目。
要求多方面的知識和技術:
計算機的基礎知識
軟體工程的原理和方法
程式設計的方法和技巧
資料庫的基本知識
資料庫設計技術
應用領域的知識
手工設計法
設計品質與設計人員的經驗和水準有直接關系
缺乏科學理論和工程方法的支援,工程的品質難以保證
資料庫運作一段時間後常常又不同程度地發現各種問題,增加了維護代價
規範設計法
典型方法——新奧爾良(New Orleans)方法
将資料庫設計分為若幹階段和步驟
采用輔助手段實作每一過程
按設計規程用工程化方法設計資料庫
其他方法
基于E-R模型的設計方法:概念設計階段廣泛采用
3NF(第三範式)的設計方法:邏輯階段可采用的有效方法
ODL(Object Definition Language)方法:面向對象的資料庫設計方法
UML(Unified Modeling Language)方法:面向對象的模組化方法
資料庫設計工具
SYBASE PowerDesigner:資料庫模組化一UML工具
Rational Rose:UML工具一資料庫模組化
CA ERWin:ERwin全稱是ERwin Data Modele
功能強大、易于使用的資料模組化、資料庫設計與開發工具
設計一個完善的資料庫應用系統往往是上述6個階段的不斷反複。
這個設計步驟既是資料庫設計的過程,也包括了資料庫應用系統的設計過程。
把資料庫的設計和對資料庫中資料處理的設計緊密結合起來,将這兩個方面的需求分析、抽象、設計、實作在各個階段同時進行,互相參照,互相補充,以完善兩方面的設計。
資料庫設計各個階段産生的設計文檔:
參加資料庫設計的人員
系統分析人員和資料庫設計人員
●自始至終參與資料庫設計
資料庫管理者和使用者代表
●主要參加需求分析與資料庫的運作和維護
應用開發人員:包括程式員和操作員
●在實施階段參與進來,分别負責編制程式和準備軟硬體環境
概念設計階段:
形成獨立于機器特點,獨立于各個DBMS産品的概念模式(E-R圖)
邏輯設計階段:
1.首先将E-R圖轉換成具體的資料庫産品支援的資料模型,如關系模型,形成資料庫邏輯模式
2.然後根據使用者處理的要求、安全性的考慮,在基本表的基礎上再建立必要的視圖(View) ,形成資料的外模式
實體設計階段:
根據資料庫管理系統特點和處理的需要,進行實體存儲安排,建立索引,形成資料庫内模式
什麼是需求分析——分析使用者的要求
是設計資料庫的起點
需求分析的重要性
結果是否準确地反映了使用者的實際要求,将直接影響到後面各個階段的設計,并影響到設計結果是否合理和實用
需求分析常常被忽視
設計人員認為這是軟任務,急于進行具體設計使用者嫌麻煩
上司不重視
DBMS中的資料字典是,根據SQL語句,在運作時自動生成的,存放在資料庫系統中,也是資料庫運作時的重要依據
3、資料流
4、資料存儲
5、處理過程
把需求收集和分析作為資料庫設計的第一階段是十分重要的。第一階段收集的基礎資料用資料字典來描述
是下一步進行概念設計的基礎。
強調兩點
(1)設計人員應充分考慮到可能的擴充和改變,使設計易于更改,系統易于擴充
(2)必須強調使用者的參與,上司的重視
7.3.2 E-R模型
1、實體之間的聯系
(1)兩個實體型之間的聯系,可以分為三種:
一對一聯系(1∶1)
一對多聯系(1∶n)
多對多聯系(m : n)
一對一聯系(1∶1)
如果對于實體集A中的每一個實體,實體集B中最多有一個(也可以沒有)實體與之聯系,反之亦然,則稱實體集A與實體集B具有一對一聯系,記為1∶1。
例如,學校裡一個班級隻有一個正班長,而一個班長隻在一個班中任職,則班級與班長之間具有一對一聯系。
一對多聯系(1:n)
如果對于實體集A中的每一個實體,實體集B中有n個實體(n≥0)與之聯系,反之,對于實體集B中的每一個實體,實體集A中至多隻有一個實體與之聯系,則稱實體集A與實體集B有一對多聯系,記為1∶n。
多對多聯系(m: n)
如果對于實體集A中的每一個實體,實體集B中有n個實體(n≥0)與之聯系,反之,對于實體集B中的每一個實體,實體集A中也有m個實體(m≥0)與之聯系,則稱實體集A與實體集B具有多對多聯系,記為m : n。
例如,一門課程同時有若幹個學生選修,而一個學生可以同時選修多門課程,則課程與學生之間具有多對多聯系。
(2)兩個以上的實體型之間的聯系:也存在着一對一、一對多、多對多聯系。
對于課程、教師與參考書,如果一門課程可以有若幹個教師講授,使用若幹本參考書,而每一個教師隻講授一門課程,每一本參考書隻供一門課程使用。
則課程與教師、參考書之間的聯系是一對多的。
對于供應商、項目、零件,一個供應商可以供給多個項目多種零件,而每個項目可以使用多個供應商供應的零件,每種零件可由不同供應商供給。
可以看出供應商、項目、零件三者之間是多對多的聯系。
(3)單個實體型内的聯系,也存在一對一、一對多、多對多的聯系。
例如,職工實體型内部具有上司與被上司的聯系,即某一職工(幹部)“上司”若幹名職工,而一個職工僅被另外一個職工直接上司,是以這是一對多的聯系。
把參與聯系的實體型的數目稱為聯系的度。
兩個實體型之間的聯系度為2,也稱為二進制聯系;
三個實體型之間的聯系度為3,也稱為三元聯系;
N個實體型之間的聯系度為N,也稱為N元聯系。
聯系也可以具有屬性
為了增強和豐富基本E-R模型的表達能力。
進行了哪些擴充?
我們介紹主要的3種擴充:1.ISA聯系;2.基數限制;PART-OF聯系
1、ISA聯系
有的實體型是某個實體型的子類型,這種父類-子類聯系稱為ISA聯系,表示“is a”語義。用△表示。
ISA聯系的性質:子類繼承了父類的所有屬性,子類也可以有自己的屬性。
(1) 分類屬性
分類屬性是父實體型的一個屬性
分類屬性的值把父實體型中的實體分派到子實體型中
(2) 不相交限制與可重疊限制
不相交限制:描述父類中的一個實體不能同時屬于多個子類中的實體集。即一個父類中的實體最多屬于一個子類實體集。
用ISA聯系符号三角形的一個叉号“X"來表示。
可重疊限制:父類中的一個實體能同時屬于多個子類中的實體集。子類符号中沒有叉号表示是可重疊的。
(3)完備性限制
描述父類中的一個實體是否必須是某一個子類中的實體。如果是,則叫做完全特化( total specialization)
否則叫做部分特化(partial specialization)
完全特化用父類到子類的雙線連接配接來表示
部分特化用父類到子類的單線連接配接來表示
2、基數限制
什麼是基數限制
說明實體型中的任何一個實體可以在聯系中出現的最少次數和最多次數
對實體之間一對一、一對多、多對多聯系的細化。
限制用一個數對 min..max表示,O≤min≤max。例如,0..1,1..3,1..<code>*</code>,其中<code>*</code>代表無窮大。
基數限制的類别
min=1的限制叫做強制參與限制,即被施加基數限制的實體型中的每個實體都要參與聯系;
min=0的限制叫做非強制參與限制,被施加基數限制的實體型中的實體可以出現在聯系中,也可以不出現在聯系中
3、Part-of 聯系
什麼是Part-of 聯系
描述某個實體型是另外一個實體型的一部分。
Part-of 聯系可以分為兩種情況:
非獨占的Part-of聯系,簡稱非獨占聯系
整體實體如果被破壞,另一部分實體仍然可以獨立存在
獨占的Part-of聯系,簡稱獨占聯系
整體實體如果被破壞,部分實體不能存在
Part-of聯系如何表示?
用非強制參與聯系表示非獨占的Part-of聯系
用弱實體類型和識别聯系來表示獨占聯系
7.3.4 UML
7.3.5 概念結構設計
1.實體與屬性的劃分原則
對需求分析階段收集到的資料進行分類、組織
2.E-R圖的內建
把概念結構設計階段設計好的基本E-R圖轉換為與選用的DBMS産品所支援的邏輯結構
目前主要使用關系模型,關系模型的邏輯結構是一組關系模式的集合
轉換内容
将E-R圖轉換為關系模型:
将實體型、實體的屬性和實體型之間的聯系轉化為關系模式。
轉換原則
1 實體型的轉換:一個實體型轉換為一個關系模式
關系模式的屬性 : 實體的屬性
關系模式的碼 : 實體的碼
2.實體型間的1 : 1聯系 :
可以轉換為一個獨立的關系模式
關系模式的屬性:與該聯系相連的各實體的碼 + 聯系本身的屬性
關系模式的候選碼 : 每個實體的碼 均是 該關系模式的候選碼
也可以與相連的任意一端對應的關系模式合并
關系模式的屬性 :
與某一端關系模式合并,則在該關系模式的屬性中加入另一端關系模式的碼和聯系的屬性
合并後關系模式的碼:不變
eg .
3.實體型間的1 : n 聯系 :
轉換為一個獨立的關系模式
關系模式的屬性:與該聯系相連的各實體的碼+聯系本身的屬性
關系模式的碼 : n端的實體的碼
與 n 端對應的關系模式合并
合并後關系模式的屬性 : 在n端關系模式中 + 1端關系的碼+聯系本身的屬性
可以減少系統模式中的關系個數,一般情況下更傾向于采用這種方法
4 實體型間的m : n聯系 :
一個m:n聯系轉換為一個關系模式
關系的屬性:與該聯系相連的各實體的碼以及聯系本身的屬性
關系的碼:各實體碼的組合
5 三個或三個以上實體間的一個多元聯系
轉換為一個關系模式
關系模式的屬性 : 與該多元聯系相連的各實體的碼+聯系本身的屬性
關系模式的碼:各實體碼的組合
6 具有相同碼的關系模式可合并
目的 : 減少系統中的關系個數合并方法:
将其中一個關系模式的全部屬性加入到另一個關系模式中然後去掉其中的同義屬性(可能同名也可能不同名)适當調整屬性的次序
資料庫邏輯設計的結果不是唯一的。
得到初步資料庫模式後,還應該适當地修改、調整資料庫邏輯結構,以進一步提高資料庫應用系統的性能,這就是資料模型的優化。
關系資料模型的優化通常以規範化理論為指導。
優化資料模型的方法
(1)确定資料依賴
按需求分析階段所得到的語義,分别寫出每個關系模式内部各屬性之間的資料依賴以及不同關系模式屬性之間資料依賴。
(2)對于各個關系模式之間的資料依賴進行極小化處理,消除備援的聯系。
(3)按照資料依賴的理論對關系模式進行分析,考察是否存在部分函數依賴、傳遞函數依賴、多值依賴等,确定各關系模式分别屬于第幾範式。
(4)按照需求分析階段得到的各種應用對資料處理的要求,分析對于這樣的應用環境這些模式是否合适,确定是否要對它們進行合并或分解。包括水準分解和垂直分解。
個
幾點注意
對于一個具體應用來說,到底規範化進行到什麼程度,需要權衡響應時間和潛在問題兩者的利弊來決定。
當查詢經常涉及兩個或多個關系模式的屬性時,系統必須經常地進行連接配接運算,連接配接運算的代價是相當高的。這種情況下,需要降低規範化程度。
非BCNF的關系模式會存在不同程度的更新異常。如果在實際應用中對此關系模式隻是查詢,并不執行更新操作,就不會産生實際影響。
資料庫模式——全局模式。
考慮系統全局應用需求,時間效率、空間效率、易維護等。
使用者子模式——視圖機制
考慮局部應用的特殊需求和使用者體驗。
(1)使用更符合使用者習慣的别名
合并各分E-R圖曾做了消除命名沖突的工作,以使資料庫系統中同一關系和屬性具有唯一的名字。這在設計資料庫整體結構時是非常必要的。
在設計使用者子模式時可以設計子模式時重新定義某些屬性名,使其與使用者習慣一緻,以友善使用。
(2)針對不同級别的使用者定義不同的視圖,提高系統的安全性
假設有關系模式:
産品(産品号,産品名,規格,單價,生産工廠中的房間,生産負責人,産品成本,産品合格率,品質等級)
為一般顧客、為産品銷售部門和管理部門建立不同的視圖。
(3)簡化使用者對系統的使用
某些局部應用中經常要使用一些很複雜的查詢,為了友善使用者,可以将這些複雜查詢定義為視圖。
什麼是資料庫的實體設計
為一個給定的邏輯資料模型選取一個最适合應用要求的實體結構的過程,就是資料庫的實體設計。
資料庫在實體裝置上的存儲結構與存取方法稱為資料庫的實體結構,它依賴于標明的DBMS。
4 資料存儲
資料量
存取頻度:每小時、每天或每周存取次數,每次存取的資料量等資訊
存取方法:批處理/聯機處理;檢索/更新;順序檢索/随機檢索
5 處理過程
處理要求
處理頻度要求,如機關時間裡處理多少事務,多少資料量、響應時間要求等
實體設計的輸入及性能評價的标準
存取方法:資料庫關系模式選擇建立了索引,聚簇等
為關系模式選擇存取方法(建立存取路徑)
為關系、索引日志、備份等資料庫檔案選擇實體存儲結構
實體資料庫設計參數(部分列選)
資料庫查詢事務
查詢所涉及的關系
查詢條件所涉及的屬性
連接配接條件所涉及的屬性
查詢的投影屬性
資料更新事務
被更新的關系
每個關系上的更新操作條件所涉及的屬性
修改操作要改變的屬性值
每個事務在各關系上運作的頻率和性能要求
資料庫上運作的事務會不斷變化、增加或減少,要根據應用的變化,及時收集設計資訊,調整資料庫的實體結構。
1、索引方法
為什麼要建立索引
提高存取的效率——查詢、插入、删除、更新的效率如何選擇索引存取方法
索引存取方法的選擇
根據應用要求确定:
對哪些屬性列建立索引
對哪些索引要設計為唯一索引、組合索引
選擇合适的索引方法
如何建立索引
RDBMS 提供的索引方法
B-Tree(B+樹)、hash(散列),R-tree、Bitmap等
如果不指定,預設一般是B+樹
選擇索引存取方法的一般規則
如果一個(或一組)屬性經常在查詢條件中出現,則考慮在這個(這組)屬性上建立索引(或組合索引)
如果一個屬性經常作為最大值和最小值等聚集函數的參數,則考慮在這個屬性上建立索引;
如果一個(或一組)屬性經常在連接配接操作的連接配接條件中出現,則考慮在這個(或這組)屬性上建立索引
2、 B+樹索引簡介
B+樹索引的特點:
多分平衡樹,存取效率高
既能随機查找、又能順序查找
增删改操作,保持平衡
3、HASH存取方法的選擇
Hash存取方法,提高了随機查詢的效率
選擇Hash存取方法的規則
如果一個關系的屬性主要出現在等值連接配接條件中或主要出現在等值比較選擇條件中,而滿足下列兩個條件之一:
該關系大小可預知,而且不變
該關系的大小動态改變,但所選用的資料庫管理系統提供了動态Hash存取方法
索引帶來了額外的開銷
維護索引的開銷
查找索引的開銷
存取索引的開銷
确定是否需要建立索引,選擇哪種索引
4、聚簇方法
聚簇存取方法的選擇
什麼是聚簇:
為了提高某個屬性(或屬性組)的查詢速度,把這個(或這些)屬性上具有相同指的元組集中存放在連續的實體塊中稱為聚簇。
該屬性(或屬性組)稱為聚簇碼
許多RDBMS都提供聚簇功能
建立聚簇的方法示例:
聚簇的用途
1、大大提高按聚簇屬性進行查詢的效率
聚簇的适用範圍
既适用于單個關系獨立聚簇,也适用于多個關系組合聚簇
當SQL語句中包含有與聚簇碼有關的ORDER BY,GROUP BY,UNION, DISTINCT等子句或短語時,
上使用聚簇特别有利,可以省去或減少對結果集的排序操作
聚簇的局限性
在一個基本表上最多隻能建立一個聚簇索引
聚簇隻能提高某些特定應用的性能
建立與維護聚簇的開銷相當大
對已有關系建立聚簇,将導緻關系中元組的實體存儲位置移動,并使此關系上原有的索引無效,必須重建。
當一個元組的聚簇碼改變時,該元組的存儲位置也要相應改變。
聚簇索引的适用條件
很少對基表進行增删操作
很少對其中的變長列進行修改操作
影響資料存放位置和存儲結構的因素
硬體環境
應用需求
存取時間
存儲空間使用率
維護代價、
這三個方面常常是互相沖突的,必須進行權衡,選擇一個折中方案
1、确定資料的存放位置
基本原則:
根據應用情況和實體環境(磁盤或磁盤陣列的容量、記憶體的大小)
易變部分與穩定部分分開存放
經常存取部分與存取頻率較低部分分開存放
将日志檔案與資料庫對象(表、索引等)分開存放
在海量資料和多使用者環境下,把資料分布存放在不同的磁盤或磁盤陣列上,可以改進系統性能。
2、确定系統配置
資料庫管理系統一般都提供了一些存儲配置設定參數
同時使用資料庫的使用者數
同時打開的資料庫對象數
記憶體配置設定參數
緩沖區配置設定參數(使用的緩沖區長度、個數)
存儲配置設定參數
實體塊的大小
實體塊裝填因子
資料庫的大小
鎖的數目等
系統都為這些變量賦予了合理的預設值。
在進行實體設計時需要根據應用環境确定這些參數值,以使系統性能最優。
在實體設計時對系統配置變量的調整隻是初步的,要根據系統實際運作情況做進一步的調整,以切實改進系統性能
對資料庫實體設計過程中産生的多種方案進行評價,從中選擇一個較優的方案作為資料庫的實體結構
評價方法
定量估算各種方案
存儲空間
維護代價
對估算結果進行權衡、比較,選擇出一個較優的合理的實體結構
傳回使用者征求意見,修改設計
一 定義資料庫結構
用DBMS提供的DDL來建立資料庫結構
RDBMS産生目标模式,生成資料字典
二 資料裝載
組織資料入庫是資料庫實施階段最主要的工作
資料裝載 —— ETL
資料抽取
資料轉換
資料載入
使用ETL工具輔助完成
ETL工作是相當費力、費時的
三 編制與調試應用程式
資料庫應用程式的設計應該與資料設計并行進行
在資料庫實施階段,編制與調試資料庫的應用程式。調試應用程式時由于資料入庫尚未完成,可先使用模拟資料。*
資料庫的試運作
應用程式調試完成,并且已有一小部分資料入庫後,就可以開始對資料庫系統進行聯合調試。
主要工作包括:
功能測試:實際運作應用程式,執行對資料庫的各種操作,測試應用程式的各種功能。
性能測試:測量系統性能名額,分析是否符合設計目标。
資料庫性能名額的測量
資料庫實體設計階段,評價資料庫結構,估算時間、空間名額時,作了許多簡化和假設,必然是近似結果。
資料庫試運作則是要實際測量系統的各種性能名額如果結果不符合設計目标,則需要傳回實體設計階段,調整實體結構,修改參數;有時甚至需要傳回邏輯設計階段,調整邏輯結構。
注意點:
1、資料的分期入庫
重新設計實體結構甚至邏輯結構,會導緻資料重新入庫
由于資料入庫工作量實在太大,是以可以采用分期輸入資料的方法
先輸入小批量資料供先期聯合調試使用
待試運作基本合格後再輸入大批量資料
逐漸增加資料量,逐漸完成運作評價
2、資料庫的轉儲和恢複
在資料庫試運作階段,系統還不穩定,硬、軟體故障随時都可能發生
系統的操作人員對新系統還不熟悉,誤操作也不可避免是以必須做好資料庫的轉儲和恢複工作,盡量減少對資料庫的破壞
在資料庫運作階段,對資料庫經常性的維護工作主要是由資料庫管理者完成的,包
1、資料庫的轉儲和恢複
資料庫管理者要針對不同的應用要求制定不同的轉儲計劃,定期對資料庫和日志檔案進行備份。
一旦發生媒體故障,即利用資料庫備份及日志檔案備份,盡快将資料庫恢複到某種一緻性狀态。
2、資料庫的安全性、完整性控制
初始定義
資料庫管理者根據使用者的實際需要授予不同的操作權限
根據應用環境定義不同的完整性限制條件
修改定義
當應用環境發生變化,對安全性的要求也會發生變化,資料庫管理者需要根據實際情況修改原有的安全性控制
由于應用環境發生變化,資料庫的完整性限制條件也會變化,也需要資料庫管理者不斷修正,以滿足使用者要求
3、資料庫性能的監督、分析和改進
在資料庫運作過程中,資料庫管理者必須監督系統運作,對監測資料進行分析,找出改進系統性能的方法。
利用監測工具擷取系統運作過程中一系列性能參數的值
通過分析這些資料,判斷目前系統是否處于最佳運作狀态
如果不是,則需要通過調整某些參數來改進資料庫性能
4、資料庫的重組織與重構造
(1)資料庫的重組織
為什麼要重組織資料庫
資料庫運作一段時間後,由于記錄的不斷增、删、改,會使資料庫的實體存儲變壞,進而降低資料庫存儲空間的使用率和資料的存取效率,使資料庫的性能下降。
資料庫重組織的主要工作
按原設計要求
重新安排存儲位置
回收垃圾
減少指針鍊
資料庫的重組織不會改變原設計的資料邏輯結構和實體結構
資料庫管理系統一般都提供了供重組織資料庫使用的實用程式,幫助資料庫管理者重新組織資料庫。
(2)資料庫的重構造
為什麼要進行資料庫的重構造
資料庫應用環境發生變化,會導緻實體及實體間的聯系也發生相應的變化,使原有的資料庫設計不能很好地滿足新的需求
增加新的應用或新的實體
取消某些已有應用
改變某些已有應用
資料庫重構造的主要内容
根據新環境調整資料庫的模式和内模式
增加或删除某些資料項
改變資料項的類型
增加或删除某個表
改變資料庫的容量
增加或删除某些索引
重構造資料庫的程度是有限的
應用需求變化太大,軟體硬體發展太快
無法通過重構資料庫來滿足新的需求,或重構資料庫的代價太大,則表明現有資料庫應用系統的生命周期已經結束,應該重新設計新的資料庫應用系統了。