數據庫設計概述
定義
數據庫設計是指對於一個給定的應用環境,構造(設計)優化的數據庫邏輯模式和物理結構,並以此建立數據庫及其應用系統,使之能夠有效的存儲和管理數據,滿足各種用戶的應用需求,包括信息管理要求和數據操作要求。
信息管理要求:數據庫中應存儲和管理的數據對象
數據操作要求:對數據對象進行的操作,如增刪改查。
特點
1. 三分技術、七分管理、十二分基礎數據
2. 要把數據庫結構設計和數據庫應用系統設計密切結合
方法
新奧爾良方法、基於E-R模型的設計方法、3NF的設計方法、面向對象的數據庫設計方法、UML方法等。
參與人員
系統分析人員、數據庫設計人員、應用開發人員、數據庫管理員和用戶代表
步驟
步驟總覽

需求分析
任務
通過詳細調查現實世界要處理的對象,在用戶的積極參與下,不斷與用戶交流充分了解原系統的工作概況,明確用戶的各種需求,在此基礎上考慮可擴展性來確定新系統的功能。
步驟
1. 調查用戶需求
調查組織機構情況
了解該組織部門組成情況,各部門的職責等
調查各部門業務的活動情況
了解各部門輸入與輸出數據是什么,如何加工,從何輸入,輸出到哪,輸出格式是什么等
明確用戶對新系統的要求
信息要求 用戶需要從數據庫中獲得的信息的內容與性質。
處理要求 用戶要完成的數據處理功能、對處理性能的要求。
安全性與完整性要求
確定新系統的邊界
確定哪些功能由計算機完成,哪些活動由人工完成
2. 分析和表達用戶需求
分析方法眾多,如結構化分析Structured Analysis
3. 提交分析結果
數據字典 是關於數據庫中數據的描述,即元數據。
數據項
是不可再分的數據單位
數據項描述={數據項名,數據項含義說明,別名,數據類型,長度,取值范圍,取值含義,與其他數據項的邏輯關系,數據項之間的聯系}
數據結構
反映數據之間的組合關系
數據結構描述={數據結構名,含義說明,組成:{數據項或數據結構}}
數據流
是數據結構在系統內傳輸的路徑
數據流描述={數據流名,說明,數據流來源,數據流去向,組成:{數據結構},平均流量,高峰期流量}
數據存儲
是數據結構停留停留或保存的地方,也是數據流的來源和去向之一。可以是手工文檔,也可以是計算機文檔。
數據存儲描述={數據存儲名,說明,編號,輸入來源,輸出的去向,組成:{數據結構},數據量,存儲頻率,存取方式}
存取方式:是批處理還是聯機處理,是檢索還是更新,是順序檢索還是隨機檢索
處理過程
處理過程的具體處理邏輯一般用判定表或判定樹來描述。數據字典中只需要描述處理過程的說明性信息。
處理過程描述={處理過程名,說明,輸入:{數據流},輸入:{數據流},處理:{簡要說明}}
簡單說明:主要說明該處理過程的功能及處理要求。
功能:該處理過程用來做什么
處理要求:處理頻度要求。如單位時間處理多少事務、多少數據量、響應時間要求等
概念結構設計
任務
將需求分析階段得到的應用信息抽象為信息世界的結構
概念模型特點:
真實、充分反映現實世界
易於理解
易於更改
易於向關系、網狀、層次等各種數據模型轉換
比數據模型更獨立於機器
方法
E-R模型(實體-關系模型)
實體型:學生(學號,姓名,年齡,...)
實體集:全體學生
實體間的聯系:
單實體型內部的聯系:一對一、一對多、多對多。
兩個實體型之間的聯系:一對一、一對多、多對多。
兩個以上實體型之間的聯系:一對一、一對多、多對多。
E-R圖
實體型--矩形
屬性--橢圓
聯系--菱形
ISA聯系--三角形
分類屬性--三角形右側加文字
根據分類屬性將父實體型的實體分派到子實體型中
不相交約束--三角形內加×
父類中的一個實體不可以同時屬於多個子類中的實體集
可重疊約束--默認
父類中的一個實體可以同時屬於多個子類中的實體集
完備性約束--完全特化--雙線
父類中的一個實體必須是子類中的實體
完備性約束--部分特化--單線
父類中的一個實體不必須是子類中的實體
基數約束 -- min..max
是一對一、一對多、多對多的細化。0<=min<=max
min=1,表示強制參與約束
min=0,表示非強制參與約束

Part-of聯系
表明某個實體型是另外一個實體型的一部分。
非獨占的Part-of聯系--通過在整體實體處的基數約束min=0,表示一個部分實體可以不用整體實體參與
整體實體如果破壞,部分實體仍可獨立存在。

獨占的Part-of聯系--用弱實體型和識別聯系表示
強實體型--不依賴於其他實體型的存在
弱實體型--依賴於其他實體型而存在
識別聯系--用雙菱形表示

UML(略)
步驟
1.根據實體與屬性的划分原則,對需求分析階段收集到的數據進行分類、組織,確定實體、實體的屬性、實體之間的聯系類型,形成分E-R圖
實體與屬性的划分原則:
屬性不能再有要描述的性質
屬性不能與其他實體具有聯系
2.分E-R圖通過解決沖突,得到初步E-R圖;初步E-R圖通過消除冗余,得到基本E-R圖
解決沖突(分E-R圖-->初步E-R圖)
屬性沖突
沖突類型
屬性域沖突(屬性的取值范圍或取值集合不同)
屬性取值單位沖突(公斤與斤)
解決:各部門協商解決
命名沖突
沖突類型
同名異義(不同意義的對象在不同局部應用中有相同的名字)
異名同義(相同意義的對象在不同局部應用中有不同的名字)
解決:各部門協商解決
結構沖突
沖突類型
①同一對象在不同應用中具有不同的抽象(職工有的當作屬性,有的當作實體)
②同一實體在不同子系統的E-R圖中所包含的屬性個數和屬性排列次序不同
③實體間的聯系在不同的E-R圖中為不同的類型

解決
①遵循實體與屬性的划分原則,把屬性變為實體,或實體變為屬性
②取所有屬性的並集,再調整次序
③

消除冗余(初步E-R圖-->基本E-R圖)
冗余類型
冗余數據:可由基本表導出的數據
冗余聯系:可由其他聯系導出的聯系
方法
①以數據字典和數據流圖為依據,分析數據項之間的邏輯關系來消除冗余

②並不是所有的冗余數據與冗余聯系都必須加以消除。如果人為保留一些冗余數據,則應把數據字典中數據關聯的說明作為完整性約束條件。
③確定分E-R圖實體之間的數據依賴,逐一考察函數依賴,確定是否是冗余的聯系,如果是就把它去掉
邏輯結構設計
任務
把概念結構設計好的E-R圖轉換為與選用DBMS所支持的數據模型相符合的邏輯結構。
步驟
1. E-R轉換為關系模型
實體型
一個實體型轉換為一個關系模式
1:1聯系
可以轉換為一個獨立的關系模式(每個實體的碼均是候選碼)
也可以與任意一端對應的關系模式合並
1:n聯系
可以轉換為一個獨立的關系模式(碼為n端關系的碼)
也可以與n端對應的關系模式合並
m:n聯系
轉換為一個關系模式(各實體的碼組成關系的碼或關系碼的一部分)
m:n:p聯系
轉換為一個關系模式(各實體的碼組成關系的碼或關系碼的一部分)
注:具有相同碼的關系模式可以合並
2. 數據模型優化
①確定數據依賴,並進行冗余依賴去除,方法同概念模型(初步E-R圖-->基本E-R圖)
②確定各關系模式分別屬於第幾范式,並不是規范化越高的關系越優,需要權衡響應時間和潛在問題兩者的利弊決定。
③水平分解關系模式:把關系的元組分為若干子集合,根據“80/20原則”,把經常被使用的數據(通常占20%)分解出來,形成一個子關系;還可根據事務來划分,使每個事務存取的數據對應一個關系
④垂直分解關系模式:把經常在一起使用的屬性分解出來形成一個子關系模式,但需確保無損連接性和保持函數依賴。
3. 設計用戶子模式
視圖使用注意點
使用更符合用戶習慣的命名(視圖名、屬性名等)
對不同級別的用戶定義不同的視圖
簡化用戶的使用
物理結構設計
目的
通過對要運行的事務進行詳細分析(獲得物理數據庫設計所需要的參數),充分了解所用的RDBMS的內部特征(特別是RDBMS所提供的存取方法和存儲結構),為關系模式選擇適宜的存儲方法,同時設計關系、索引等數據庫文件的物理存儲結構。
存取方法選擇
常用的存取方法為索引方法和聚簇方法。
索引方法
B+樹索引
一個(組)屬性經常在查詢條件中出現
或一個(組)屬性經常作為最大(最小)值等聚集函數的參數
或一個(組)屬性進場在連接操作的連接條件中出現
hash索引
一個屬性經常出現在等值連接條件中或主要出現在等值比較選擇條件中,而且滿足下面兩個條件之一:
一個關系的大小可預知,而且不變
關系的大小動態改變,但DBMS提供了動態hash存取方法
聚簇方法
概念
聚簇是指將一些相關的數據存儲在同一個物理塊上。
利用聚簇,一個塊可以包含多個表的數據
原則
一個數據庫可以建立多個聚簇,一個關系只能加入一個聚簇。
特點
對已有關系建立聚簇將導致關系中元組移動其物理存儲位置,並使次關系上原來建立的所有索引無效,必須重建
舉例
員工表和部門表,這兩個表存在不同的segment上,甚至可能存儲在不同的tablespace中,所以它們各自的數據肯定不在同一個block中。而同時我們又經常查詢員工表.部門號=部門表.部門號,由於查詢主要是對block進行操作,查詢的block越多,系統IO就越大,效率就越慢,我們把這兩個表的數據聚集在少量的物理相鄰的block中,查詢效率會大幅提高。
候選聚簇的選擇原則
經常在一起進行連接操作的關系
經常出現在相等比較條件中
屬性(組)上的值重復率很高
候選聚簇的反選原則
經常進行全表掃描的關系
刪除遠多於連接的關系
多個聚簇時,選擇在此聚簇上運行各種事務的總代價最小的聚簇
聚簇的使用原則:
當通過聚簇碼進行訪問,是該關系的主要應用,與聚簇碼無關的其他訪問時很少或者是次要的,就可以使用聚簇
存儲結構策略制定
根據應用情況將數據的易變部分和穩定部分、經常存取部分和存取頻率較低部分、日志與數據等分開存放;
更改系統配置變量和存儲分配參數(參考各DBMS手冊)
評價物理結構(從存儲空間、存取時間和維護代價各方面比較)
數據庫實施與維護
數據載入(與應用調試同步進行)
將各類源數據從各個局部應用中抽取出來,輸入計算機,再分類轉換,最后綜合成符合新設計的數據庫結構的形式,輸入數據庫。
小批量調試數據--調試連通性用
數據庫試運行
對數據庫系統進行聯合調試,測量和評價系統性能指標,如果測試的結果和設計目標不符,就要重新調整物理結構,修改系統參數。
大批量調試數據--測性能用
日常維護
數據庫轉儲和恢復--即備份策略
數據庫安全性、完整性控制--即用戶權限變更、完整性約束變更等
數據庫性能的監督、分析和改造--即改進系統性能
數據庫的重組織與重構造
重組織--重新安排存儲位置、回收垃圾、減少指針鏈等
重構造--修改數據庫的內模式(物理結構、索引等)、外模式(邏輯結構、視圖等)
