數(shù)據(jù)庫設計的過程:需求分析階段;概念結構設計階段;邏輯結構設計階段;數(shù)據(jù)庫物理設計階段;數(shù)據(jù)庫實施階段;數(shù)據(jù)庫運行和維護階段。設計一個完善的數(shù)據(jù)庫應用系統(tǒng)往往是上述六個階段的不斷反復。
需求分析的任務。通過詳細調查現(xiàn)實世界要處理的對象,充分了解原系統(tǒng)工作概況,明確用戶各種需求;在此基礎上確定新系統(tǒng)的功能,必須充分考慮今后可能的擴充和改變,不能僅僅按當前應用需求來設計數(shù)據(jù)庫。
需求分析的重點是調查、收集與分析用戶在數(shù)據(jù)管理中的信息要求、處理要求、安全性與完整性要求。信息要求,用戶需要從數(shù)據(jù)庫獲得信息的內容與性質;由用戶的信息要求可以導出數(shù)據(jù)要求,即在數(shù)據(jù)庫中需要存儲哪些數(shù)據(jù)。
確定用戶最終需求的難點:用戶缺少計算機知識,需求往往不斷變化;設計人員缺少用戶的專業(yè)知識,不易理解用戶的真正需求;新的硬件、軟件技術的出現(xiàn)會使用戶需求發(fā)生變化。
需求分析:調查組織機構總體情況,熟悉業(yè)務活動,明確用戶需求,確定系統(tǒng)邊界。
數(shù)據(jù)字典是各類數(shù)據(jù)描述的集合;是進行詳細的數(shù)據(jù)收集和數(shù)據(jù)分析所獲得的主要結果;在數(shù)據(jù)庫設計中占有很重要的地位。數(shù)據(jù)字典的內容:數(shù)據(jù)項;數(shù)據(jù)結構;數(shù)據(jù)流;數(shù)據(jù)存儲;處理過程。
數(shù)據(jù)項是不可再分的數(shù)據(jù)單位。數(shù)據(jù)結構反映了數(shù)據(jù)之間的組合關系,一個數(shù)據(jù)結構可由若干個數(shù)據(jù)項組成,也可由若干個數(shù)據(jù)結構組成,或混合組成。數(shù)據(jù)流是數(shù)據(jù)結構在系統(tǒng)內傳輸?shù)穆窂健?shù)據(jù)存儲是數(shù)據(jù)結構停留或保存的地方,也是數(shù)據(jù)流的來源和去向之一。處理過程的具體處理邏輯一般用判定表或判定數(shù)來描述,數(shù)據(jù)字典中只需要描述處理過程的說明性信息。
概念結構設計,將需求分析得到的用戶應用需求抽象為信息結構即概念模型的過程就是概念結構設計。概念結構是各種數(shù)據(jù)模型的共同基礎,它比數(shù)據(jù)模型更獨立于機器、更抽象,從而更加穩(wěn)定。概念結構設計是整個數(shù)據(jù)庫設計的關鍵。描述概念模型的工具:E-R圖。
設計概念結構的四類方法:自頂向下,首先定義全局概念結構的框架,然后逐步細化;自底向上,首先定義各局部應用的概念結構,然后集成起來,得到全局概念結構;逐步擴張,首先定義最重要的核心概念機構,然后向外擴充,以滾雪球方式逐步生成其他概念結構,直至總體概念結構;混合策略,將自頂向下和自底向上組合,用自頂向下策略設計一個全局概念結構的框架,以它為骨架集成由自底向上策略中設計的各局部概念結構。
自底向上設計概念結構的步驟:第一步,抽象數(shù)據(jù)并設計局部視圖;第二步,集成局部視圖,得到全局概念結構。
數(shù)據(jù)抽象。三種常用抽象:分類,抽象了對象值和型之間的“is member of”的語義;聚集,抽象了對象內部類型和成分之間“is part of”的語義;概括,抽象了類型之間的“is subset of”的語義。
設計分E-R圖的步驟:選擇局部應用;逐一設計分E-R圖。設計分E-R圖時,首先需要根據(jù)系統(tǒng)的具體情況,在多層的數(shù)據(jù)流圖中選擇一個適當層次的數(shù)據(jù)流圖,讓這組圖中每一部分對應一個局部應用,然后以這一層次的數(shù)據(jù)流圖為出發(fā)點,設計分E-R圖。
逐一設計分E-R圖。標定局部應用中的實體、屬性、碼,實體間的聯(lián)系。實體:現(xiàn)實世界中一組具有某些共同特性和行為的對象就可以抽象為一個實體。屬性:對象類型的組成成分可以抽象為實體的屬性。實體與屬性是相對而言的。一般原則:屬性不能再具有需要描述的性質,即屬性必須是不可分的數(shù)據(jù)項,不能再由另一些屬性組成;屬性不能與其他實體具有聯(lián)系,聯(lián)系只發(fā)生在實體之間。
視圖集成的兩種方式:一次集成,一次集成多個分E-R圖,通常用于局部視圖比較簡單時;逐步積累式,首先集成兩個局部視圖,以后每次講一個新的局部視圖集成進來。
集成E-R圖的步驟。合并,消除沖突;修改與重構,消除不必要的冗余。冗余的數(shù)據(jù)是指可由基本數(shù)據(jù)導出的數(shù)據(jù),冗余的聯(lián)系是指可由其他聯(lián)系導出的聯(lián)系。冗余數(shù)據(jù)和冗余聯(lián)系容易破壞數(shù)據(jù)庫的完整性,給數(shù)據(jù)庫維護增加困難。消除不必要的冗余后的初步E-R圖稱為基本E-R圖。
消除冗余的方法。分析方法,以數(shù)據(jù)字典和數(shù)據(jù)流圖為依據(jù),根據(jù)數(shù)據(jù)字典中關于數(shù)據(jù)項之間邏輯關系的說明來消除冗余。如果是為了提高效率,人為的保留了一些冗余數(shù)據(jù),則應把數(shù)據(jù)字典中數(shù)據(jù)關聯(lián)的說明作為完整性約束條件。函數(shù)依賴的概念提供了消除冗余聯(lián)系的形式化工具。
為了能夠用某一DBMS實現(xiàn)用戶需求,還必須將概念結構進一步轉化為相應的數(shù)據(jù)模型,這正是數(shù)據(jù)庫邏輯結構設計所要完成的任務。步驟:將概念結構轉化為一般的關系、網(wǎng)狀、層次模型;將轉化來的的關系、網(wǎng)狀、層次模型向特定DBMS支持下的數(shù)據(jù)模型轉換;對數(shù)據(jù)模型進行優(yōu)化。
E-R圖向關系模型轉換。將實體、實體的屬性和實體之間的聯(lián)系轉化為關系模式。一個實體型轉換為一個關系模式,關系的屬性:實體型的屬性;關系的碼:實體型的碼。
一個m:n聯(lián)系轉換為一個關系模式,關系的屬性:與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性;關系的碼:各實體碼的組合。
一個1:n的聯(lián)系可以轉換為一個獨立的關系模式,也可以與n端對應的關系模式合并。轉換為一個獨立的關系模式:關系的屬性,與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性;關系的碼,n端實體的碼。與n端對應的關系模式合并:關系的屬性,在n端關系中加入1端關系的碼和聯(lián)系本身的屬性;關系的碼:不變。第二種方法可以減少系統(tǒng)中的關系個數(shù),一般情況下更傾向于采用這種方法。
一個1:1聯(lián)系可以轉換為一個獨立的關系模式,也可以與任意一端對應的關系模式合并。轉換為一個獨立的關系模式:關系的屬性,與該聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性;關系的候選碼,每個實體的碼均是該關系的候選碼。與某一端對應的關系模式合并:合并后關系的屬性,加入對應關系的碼和聯(lián)系本身的屬性;合并后關系的碼,不變。
三個或三個以上實體間的一個多元聯(lián)系轉換為一個關系模式。關系的屬性,與該多元聯(lián)系相連的各實體的碼以及聯(lián)系本身的屬性;關系的碼,各實體碼的組合。
同一實體集的實體間的聯(lián)系,即自聯(lián)系,也可按上述1:1,1:n,m:n三種情況分別處理。
具有相同碼的關系模式可合并。目的,減少系統(tǒng)中的關系個數(shù)。合并方法,將其中一個關系模式的全部屬性加入到另一個關系模式中,然后去掉其中的同義屬性,并適當調整屬性的次序。
優(yōu)化數(shù)據(jù)模型的方法:確定數(shù)據(jù)依賴;對于各個關系模式之間的數(shù)據(jù)依賴進行極小化處理,消除冗余的聯(lián)系;按照數(shù)據(jù)依賴的理論對關系模式逐一進行分析,考查是否存在部分函數(shù)依賴、傳遞函數(shù)依賴、多值依賴等,確定各關系模式分別屬于第幾范式;按照需求分析得到的各種應用對數(shù)據(jù)處理的要去,分析對于這樣的應用環(huán)境這些模式是否合適,確定是否要對它們進行合并或分解;按照需求分析階段得到的各種應用對數(shù)據(jù)處理的要求,對關系模式進行必要的分解或合并,以提高數(shù)據(jù)操作的效率和存儲空間的利用率。
設計用戶子模式時更應該注重考慮用戶的習慣與方便。包括三個方面:使用更符合用戶習慣的別名;針對不同級別的用戶定義不同的外模式,以滿足系統(tǒng)對安全性的要求;簡化用戶對系統(tǒng)的使用。
為一個給定的邏輯數(shù)據(jù)模型選取一個最適合應用環(huán)境的物理結構的過程,就是數(shù)據(jù)庫的物理設計。
數(shù)據(jù)庫物理設計的步驟:確定數(shù)據(jù)庫的物理結構;對物理結構進行評價,評價的重點是時間和空間效率;如果評價結果滿足設計要求則可進入到物理實施階段,否則,重新設計或修改物理結構。
選擇物理數(shù)據(jù)庫設計所需參數(shù)。數(shù)據(jù)庫查詢事物:查詢的關系;查詢條件所涉及的屬性;連接條件所涉及的屬性;查詢的投影屬性。數(shù)據(jù)更新事務:被更新的關系;每個關系上的更新操作條件所涉及的屬性;修改操作要改變的屬性值。每個事務在各關系上運行的頻率和性能要求。
關系模式存取方法選擇。數(shù)據(jù)庫系統(tǒng)是多用戶共享的系統(tǒng),對同一個關系建立多條存取路徑才能滿足多用戶的多種應用要求。DBMS常用存取方法:索引方法,主要是針對B+數(shù)索引方法;聚簇方法;HASH方法。
確定數(shù)據(jù)庫的存儲結構。確定數(shù)據(jù)庫物理結構的內容:確定數(shù)據(jù)的存放位置和存儲結構;確定系統(tǒng)配置。
確定數(shù)據(jù)的存放位置。影響數(shù)據(jù)存放位置和存儲結構的因素:硬件環(huán)境;應許需求。基本原則:根據(jù)應用情況將 易變部分與穩(wěn)定部分;存取頻率較高部分與存取頻率較低部分 分開存放,以提高系統(tǒng)性能。
確定系統(tǒng)配置。DBMS產品一般都提供了一些存儲分配參數(shù):同時使用數(shù)據(jù)庫的用戶數(shù);同時打卡的數(shù)據(jù)庫對象數(shù);使用的緩沖區(qū)長度、個數(shù);時間片大小;數(shù)據(jù)庫大小;裝填因子;鎖的數(shù)目;等等。系統(tǒng)為這些變量賦予了合理的缺省值,但不一定適合每一種應用環(huán)境,需要根據(jù)應用環(huán)境確定參數(shù)值。物理設計時對系統(tǒng)配置變量的調整只是初步的,在系統(tǒng)運行時還要根據(jù)系統(tǒng)實際運行情況做進一步調整。
評價物理結構。評價內容,對數(shù)據(jù)庫物理設計過程產生的多種方案進行細致評價,從中選擇較優(yōu)的方案作為數(shù)據(jù)庫的物理結構。評價方法:定量估算各種方案,存儲空間,存取時間,維護代價;對估算結果進行權衡、比較,選擇出一個較優(yōu)的合理的物理結構;如果結構不符合用戶需求,需要修改涉及。
定義數(shù)據(jù)庫結構。確定了數(shù)據(jù)庫的邏輯結構與物理結構之后,可以用所選用的DBMS提供的數(shù)據(jù)定義語言DDL,來嚴格描述數(shù)據(jù)庫結構。
數(shù)據(jù)裝載。數(shù)據(jù)庫結構建立好后,就可以向數(shù)據(jù)庫中裝載數(shù)據(jù)了。組織數(shù)據(jù)入庫是數(shù)據(jù)庫實施階段最主要的工作。數(shù)據(jù)裝載方法:人工方法,計算機輔助數(shù)據(jù)入庫。
人工方法,適用于小型系統(tǒng)。步驟:篩選數(shù)據(jù);轉換數(shù)據(jù)格式;輸入數(shù)據(jù);校驗數(shù)據(jù)。計算機輔助數(shù)據(jù)入庫,適用于中大型系統(tǒng)。步驟:篩選數(shù)據(jù);輸入數(shù)據(jù);校驗數(shù)據(jù);轉換數(shù)據(jù);綜合數(shù)據(jù)。
編制與調試應用程序。數(shù)據(jù)庫應用程序的設計應該與數(shù)據(jù)設計并行進行。
數(shù)據(jù)庫試運行。數(shù)據(jù)庫試運行稱為聯(lián)合調試,主要工作包括:功能測試,實際運行應用程序,執(zhí)行對數(shù)據(jù)庫的各種操作,測試各種功能;性能測試,測量系統(tǒng)的性能指標,分析是否符合設計目標。
數(shù)據(jù)庫性能指標的測量。實際測量系統(tǒng)的各種性能指標,如果結果不符合設計目標,需要返回物理設計階段,調整物理結構,修改參數(shù);有時甚至需要返回邏輯設計階段,調整邏輯結構。
數(shù)據(jù)庫的轉儲和恢復。在數(shù)據(jù)庫試運行階段,系統(tǒng)還不穩(wěn)定,硬、軟件故障隨時可能發(fā)生;操作人員對新系統(tǒng)不熟悉,誤操作不可避免;必須做好數(shù)據(jù)庫的轉儲和恢復工作,盡量減少對數(shù)據(jù)庫的破壞。
數(shù)據(jù)庫運行與維護。數(shù)據(jù)庫試運行結果符合設計目標后,就可以真正投入運行了。對數(shù)據(jù)庫設計進行評價、調整、修改等維護工作是一個長期任務,也是設計工作的繼續(xù)和提高:應用環(huán)境在不斷變化;數(shù)據(jù)庫運行過程中物理存儲會不斷變化。
數(shù)據(jù)庫運行階段,對數(shù)據(jù)庫經(jīng)常性的維護工作主要由DBA完成,包括:數(shù)據(jù)的轉儲和恢復;數(shù)據(jù)庫的完整性、安全性控制;數(shù)據(jù)庫性能的監(jiān)督、分析和改進;數(shù)據(jù)庫的重組織和重構造。數(shù)據(jù)庫運行一段時間后,由于記錄的不斷增、刪、改,會使數(shù)據(jù)庫物理存儲變化,降低存儲空間利用率和存取效率,需要重組織;數(shù)據(jù)庫應用環(huán)境發(fā)生變化,會導致實體及實體間的聯(lián)系發(fā)生變化,使原有的數(shù)據(jù)庫設計不能很好地滿足新的需求,通過 增加新的應用或新的實體,取消某些已有應用,改變某些已有應用 來進行數(shù)據(jù)庫的重構造。