一、數據庫概念設計
主要解決數據需求,即如何准確地理解數據需求。
任務:
涉及的數據范圍、數據的屬性特征、數據之間的關系、數據的約束、數據安全性要求、數據處理需求、保證信息模型方便地轉換成數據庫的邏輯結構。
依據:
依據是需求說明書、功能模型、收集到的各類報表,從中抽取中數據之間的相互聯系和滿足的約束條件。
構造信息模型,編寫數據庫概念設計說明書(邏輯設計的依據)。
過程:
明確建模目標。
定義實體集(通常采用自底向上的方式):先分別畫出子系統的ER圖,然后將局部ER圖集合整合成應用系統總體的信息模型。
定義聯系:描述實體集之間的關聯關系。
建立信息模型:ER圖,先局部再總體。
確定實體集屬性:可以不畫在模型圖中。
對信息模型進行集成和優化。
數據建模方法
ER建模方法:
實體(實例):一個具體的人或物,也可以是抽象事物。
實體集:學生的實體集指全部學生的集合,集合中的一個元素是這個實體機的一個實例。
屬性:
碼:能唯一標識每一個實例的屬性或屬性組稱為該實體集的碼。
聯系:
實物之間的聯系
有一對一、一對多、多對多聯系。
IDEF1X建模方法:
IDEF0描述系統功能需求,是功能建模方法。
IDEF1X側重分析、抽象和概括應用領域中的數據需求,是數據建模方法。
元素:
實體集:每個實體集有唯一名字和編碼,寫在矩形框的上方——實體集/編號
獨立實體集:每個實例都被唯一地標識,不決定於它與其他實體集的聯系,比如學號。
從屬實體集:從屬實體的實例依賴於獨立實體的實例存在而存在。
例子:
合同條目號依賴於合同號,否則沒有意義。
聯系:
連接聯系分為:標定聯系和非標定聯系,又稱父子聯系或依存聯系。(一對多)
標定型聯系:(獨立實體與從屬實體的聯系,父實體的主關鍵字是子實體主關鍵字的一部分)
子女實體集中的每個實例都是由它與雙親的聯系而確定的。
如:選課成績由學生編號和課程編號確定,零件代碼與零件加工工序。
非標定型聯系:(父實體的主關鍵字不是子實體的主關鍵字,如顧客簽合同,兩個都是獨立實體)
分類聯系:
含一個一般實體實例和多個分類實體實例。
有相同屬性(在一般實體中),和不同屬性。
非確定聯系:(多對多聯系,如讀者借書)
引入相交實體實現實體間的聯系。
二、數據庫邏輯設計
把ER模型轉換為具體的數據庫管理系統支持的數據模型,並對其進行優化,是面向機器世界的。
函數依賴:
如果學號相同,姓名也相同,則學號決定於姓名,姓名依賴於學號,即學號相同的時候,姓名沒有不同的值)。
部分和完全函數依賴:
成績完全函數依賴於(學號,課號),姓名部分函數依賴於(學號,課號)。
傳遞函數依賴:
學號決定班號,班號決定班長,班長傳遞函數依賴於學號。
(商店,商品)決定商品經營部,商品經營部決定經營部經理,所以經營部經理傳遞函數依賴於(商店,商品)。
平凡函數依賴:
對任一關系模式必然成立。
(學號,班號)決定學號。
學號決定學號。
候選碼:如果某屬性組能唯一確定整個元組的值,則稱該屬性組為候選碼或候選關鍵字。
主碼:如果候選碼有多個,可以選一個作為主碼。
外碼:或外鍵,另外一個關系模式的主碼(或候選鍵)。如學號是學生信息的主碼,是SC關系的外碼。
非主屬性:不包含在候選鍵中的屬性。
關系模式規范化:
范式:關系模式所滿足的約束條件。
第一范式:每一個屬性都是不可再分的數據項(原子的)。
多值屬性或者復合屬性不滿足第一范式。
轉換為第一范式:
第二范式:首先要符合第一范式,每個非主屬性完全依賴於主碼。
(學號,課號)決定課程名(或姓名),存在部分依賴,不滿足第二范式。
第三范式:首先符合第二范式,每個非主屬性不傳遞依賴於主碼。
先由學號確定所在學院,再確定學院地點和電話,存在傳遞依賴。
三、數據庫物理設計
概述:
將數據的邏輯描述轉換為實現技術規范,目標是設計數據存儲方案,提供足夠好的性能。
不包括文件和數據庫的具體實現細節(比如如何創建文件)。
數據庫中的數據是以文件的形式存儲在外存上。
物理設計要解決的解決問題:
文件的組織、文件的結構、文件的存取、索引技術。
索引:
分類:
有序索引:(索引文件機制)
實現記錄域(查找碼,可以是主屬性,也可以是非主屬性,或者屬性的組合值)取值到記錄物理地址間的映射關系。
先查閱索引文件,找到對應的索引項,從索引項中找出數據記錄在數據文件中的物理地址,根據地址找到數據記錄。
散列技術:哈希。
聚集索引:數據文件中數據記錄的排列順序與索引文件中索引項的排列順序一致。
(屬性作為分組、排序條件,作為檢索限制條件)
一個主文件通常只有一個聚集索引,可以有多個非聚集索引。
主索引通常是聚集索引。
非聚集索引:
輔索引通常是非聚集索引。
稠密索引:主文件中每一個不同的值都有索引記錄與之對應。
非候選鍵作為查找碼時,索引記錄不能重復,主文件中字段須排序存儲。
如果主文件中沒有排序存儲,則索引記錄可重復。
稀疏索引:主文件中只有部分不同值有索引。(如何查找?:通過索引找到最近的值,再順序檢索)。
主索引:每個存儲塊有一個索引項,通常建立在主文件的主碼的排序字段上,通常屬於稀疏索引(沒有排序存儲的時候可能是稠密索引)。
輔索引:建立在非排序字段上,可使用中間鏈表來保存多個記錄的位置。
輔索引是稠密索引。
唯一索引:索引列不包含重復的值,在多列唯一索引的情況下,可以確保索引列中每個值的組合都是唯一的。
單層索引:也叫線性索引,如前面所提到的各類。
多層索引:通過多層樹型結構快速定位大數據量文件中的數據記錄。
B樹/B+樹索引,暫不展開。
倒排索引:
一個詞匯包含在哪些文檔中?
以關鍵詞為組織單位。
按照關鍵詞排序。
建立索引原則:
聚集函數參數、連接、
物理設計內容:
數據庫邏輯模式描述:把關系模式轉換成基本表和視圖,利用完整性約束設計業務規則。
文件組織和存取設計:對文件、順序文件、索引文件、散列文件等。存取方法:索引、聚簇、HASH等。
數據分布設計:根據類型、作用、頻率不同,合理安排在不同存儲介質中。
水平,垂直划分。
確定系統配置
物理模式評估:從多種可行方案中選擇合理的數據庫物理結構。
設計結果應形成物理設計文檔,供下一階段的數據庫實現與部署使用。
數據庫邏輯模式描述:
DB文件組織與存取設計
有序記錄文件:排序字段。排序效率高,更新效率不高。數據庫重組:將溢出文件合並到主文件。
堆文件:一個基本表中數據流少,插入、刪除、更新頻繁。無須建立索引,維護代價低。更新效率高,檢索效率低。
B-和B+樹文件:大數據量、等值查詢、范圍查詢、模糊查詢和部分查詢。動態索引,可以隨着數據文件的內容變化而不斷調整,保證性能不會惡化。
聚集文件:將相同或相似的記錄存放在連續的磁盤簇塊中,執行頻繁和需要進行多表連接的操作。
考慮建立索引的情況:
主碼、WHERE、連接、Order by、Group by、一個屬性有很多不同值。
很多數據庫管理系統中的索引不引用具有空值的行,對空值的查找需要使用全表掃描來實現。
關系模式去規范化:可以提高查詢效率,但是可能出現插入異常、刪除異常、更新異常和數據冗余的問題。