數(shù)據(jù)庫設(shè)計(Database Design)是指對于一個給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng),使之能夠有效地存儲數(shù)據(jù),滿足各種用戶的應(yīng)用需求(信息要求和處理要求)。在數(shù)據(jù)庫領(lǐng)域內(nèi),常常把使用數(shù)據(jù)庫的各類系統(tǒng)統(tǒng)稱為數(shù)據(jù)庫應(yīng)用系統(tǒng)。
定義
數(shù)據(jù)庫設(shè)計 數(shù)據(jù)庫設(shè)計 (Database Design)是指根據(jù)用戶的需求,在某一具體的數(shù)據(jù)庫管理系統(tǒng)上,設(shè)計數(shù)據(jù)庫的結(jié)構(gòu)和建立數(shù)據(jù)庫的過程。
數(shù)據(jù)庫設(shè)計是建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng)的技術(shù),是信息系統(tǒng)開發(fā)和建議中的核心技術(shù)。由于數(shù)據(jù)庫應(yīng)用系統(tǒng)的復(fù)雜性,為了支持相關(guān)程序運(yùn)行,數(shù)據(jù)庫設(shè)計就變得異常復(fù)雜,因此最佳設(shè)計不可能一蹴而就,而只能是一種“反復(fù)探尋,逐步求精”的過程,也就是規(guī)劃和結(jié)構(gòu)化數(shù)據(jù)庫中的數(shù)據(jù)對象以及這些數(shù)據(jù)對象之間關(guān)系的過程。
(1)數(shù)據(jù)庫是信息系統(tǒng)的核心和基礎(chǔ),把信息系統(tǒng)中大量的數(shù)據(jù)按一定的模型組織起來,提供存儲、維護(hù)、檢索數(shù)據(jù)的功能,使信息系統(tǒng)可以方便、及時、準(zhǔn)確地從數(shù)據(jù)庫中獲得所需的信息。
(2)數(shù)據(jù)庫是信息系統(tǒng)的各個部分能否緊密地結(jié)合在一起以及如何結(jié)合的關(guān)鍵所在。
(3)數(shù)據(jù)庫設(shè)計是信息系統(tǒng)開發(fā)和建設(shè)的重要組成部分。
(4)數(shù)據(jù)庫設(shè)計人員應(yīng)該具備的技術(shù)和知識:
數(shù)據(jù)庫的基本知識和數(shù)據(jù)庫設(shè)計技術(shù)
計算機(jī)科學(xué)的基礎(chǔ)知識和程序設(shè)計的方法和技巧
軟件工程的原理和方法
應(yīng)用領(lǐng)域的知識
特點(diǎn)
數(shù)據(jù)庫建設(shè)是硬件、軟件和干件的結(jié)合
三分技術(shù),七分管理,十二分基礎(chǔ)數(shù)據(jù)
技術(shù)與管理的界面稱之為“干件”
數(shù)據(jù)庫設(shè)計應(yīng)該與應(yīng)用系統(tǒng)設(shè)計相結(jié)合
結(jié)構(gòu)(數(shù)據(jù))設(shè)計:設(shè)計數(shù)據(jù)庫框架或數(shù)據(jù)庫結(jié)構(gòu)
行為(處理)設(shè)計:設(shè)計應(yīng)用程序、事務(wù)處理等
結(jié)構(gòu)和行為分離的設(shè)計
傳統(tǒng)的軟件工程忽視對應(yīng)用中數(shù)據(jù)語義的分析和抽象,只要有可能就盡量推遲數(shù)據(jù)結(jié)構(gòu)設(shè)計的決策早期的數(shù)據(jù)庫設(shè)計致力于數(shù)據(jù)模型和建模方法研究,忽視了對行為的設(shè)計
步驟
需求分析
調(diào)查和分析用戶的業(yè)務(wù)活動和數(shù)據(jù)的使用情況,弄清所用數(shù)據(jù)的種類、范圍、數(shù)量以及它們在業(yè)務(wù)活動中交流的情況,確定用戶對數(shù)據(jù)庫系統(tǒng)的使用要求和各種約束條件等,形成用戶需求規(guī)約。
概念設(shè)計
對用戶要求描述的現(xiàn)實(shí)世界(可能是一個工廠、一個商場或者一個學(xué)校等),通過對其中住處的分類、聚集和概括,建立抽象的概念數(shù)據(jù)模型。這個概念模型應(yīng)反映現(xiàn)實(shí)世界各部門的信息結(jié)構(gòu)、信息流動情況、信息間的互相制約關(guān)系以及各部門對信息儲存、查詢和加工的要求等。所建立的模型應(yīng)避開數(shù)據(jù)庫在計算機(jī)上的具體實(shí)現(xiàn)細(xì)節(jié),用一種抽象的形式表示出來。以擴(kuò)充的實(shí)體—(E-R模型)聯(lián)系模型方法為例,第一步先明確現(xiàn)實(shí)世界各部門所含的各種實(shí)體及其屬性、實(shí)體間的聯(lián)系以及對信息的制約條件等,從而給出各部門內(nèi)所用信息的局部描述(在數(shù)據(jù)庫中稱為用戶的局部視圖)。第二步再將前面得到的多個用戶的局部視圖集成為一個全局視圖,即用戶要描述的現(xiàn)實(shí)世界的概念數(shù)據(jù)模型。
邏輯設(shè)計
主要工作是將現(xiàn)實(shí)世界的概念數(shù)據(jù)模型設(shè)計成數(shù)據(jù)庫的一種邏輯模 式,即適應(yīng)于某種特定數(shù)據(jù)庫管理系統(tǒng)所支持的邏輯數(shù)據(jù)模式。與此同時,可能還需為各種數(shù)據(jù)處理應(yīng)用領(lǐng)域產(chǎn)生相應(yīng)的邏輯子模式。這一步設(shè)計的結(jié)果就是所謂“邏輯數(shù)據(jù)庫”。
物理設(shè)計
根據(jù)特定數(shù)據(jù)庫管理系統(tǒng)所提供的多種存儲結(jié)構(gòu)和存取方法等依賴于具體計算機(jī)結(jié)構(gòu)的各項物理設(shè)計措施,對具體的應(yīng)用任務(wù)選定最合適的物理存儲結(jié)構(gòu)(包括文件類型、索引結(jié)構(gòu)和數(shù)據(jù)的存放次序與位邏輯等)、存取方法和存取路徑等。這一步設(shè)計的結(jié)果就是所謂“物理數(shù)據(jù)庫”。
驗(yàn)證設(shè)計
在上述設(shè)計的基礎(chǔ)上,收集數(shù)據(jù)并具體建立一個數(shù)據(jù)庫,運(yùn)行一些典型的應(yīng)用任務(wù)來驗(yàn)證數(shù)據(jù)庫設(shè)計的正確性和合理性。一般,一個大型數(shù)據(jù)庫的設(shè)計過程往往需要經(jīng)過多次循環(huán)反復(fù)。當(dāng)設(shè)計的某步發(fā)現(xiàn)問題時,可能就需要返回到前面去進(jìn)行修改。因此,在做上述數(shù)據(jù)庫設(shè)計時就應(yīng)考慮到今后修改設(shè)計的可能性和方便性。
運(yùn)行與維護(hù)設(shè)計
在數(shù)據(jù)庫系統(tǒng)正式投入運(yùn)行的過程中,必須不斷地對其進(jìn)行評調(diào)整與修改。
至今,數(shù)據(jù)庫設(shè)計的很多工作仍需要人工來做,除了關(guān)系型數(shù)據(jù)庫已有一套較完整的數(shù)據(jù)范式理論可用來部分地指導(dǎo)數(shù)據(jù)庫設(shè)計之外,尚缺乏一套完善的數(shù)據(jù)庫設(shè)計理論、方法和工具,以實(shí)現(xiàn)數(shù)據(jù)庫設(shè)計的自動化或交互式的半自動化設(shè)計。所以數(shù)據(jù)庫設(shè)計今后的研究發(fā)展方向是研究數(shù)據(jù)庫設(shè)計理論,尋求能夠更有效地表達(dá)語義關(guān)系的數(shù)據(jù)模型,為各階段的設(shè)計提供自動或半自動的設(shè)計工具和集成化的開發(fā)環(huán)境,使數(shù)據(jù)庫的設(shè)計更加工程化、更加規(guī)范化和更加方便易行,使得在數(shù)據(jù)庫的設(shè)計中充分體現(xiàn)軟件工程的先進(jìn)思想和方法。
設(shè)計方法
手工試湊法
設(shè)計質(zhì)量與設(shè)計人員的經(jīng)驗(yàn)和水平有直接關(guān)系
缺乏科學(xué)理論和工程方法的支持,工程的質(zhì)量難以保證
數(shù)據(jù)庫運(yùn)行一段時間后常常又不同程度地發(fā)現(xiàn)各種問題,增加了維護(hù)代價
規(guī)范設(shè)計法
基本思想:過程迭代和逐步求精
(1)新奧爾良(New Orleans)方法:將數(shù)據(jù)庫設(shè)計分為四個階段 S.B.Yao方法:將數(shù)據(jù)庫設(shè)計分為五個步驟 I.R.Palmer方法:把數(shù)據(jù)庫設(shè)計當(dāng)成一步接一步的過程
(2)計算機(jī)輔助設(shè)計
ORACLE Designer 2000
SYBASE PowerDesigner
各級模式的形成過程
1.需求分析階段:綜合各個用戶的應(yīng)用需求
2.概念設(shè)計階段:形成獨(dú)立于機(jī)器特點(diǎn),獨(dú)立于各個DBMS產(chǎn)品的概念模式(E-R圖)
3.邏輯設(shè)計階段:首先將E-R圖轉(zhuǎn)換成具體的數(shù)據(jù)庫產(chǎn)品支持的數(shù)據(jù)模型,如關(guān)系模型,形成數(shù)據(jù)庫邏輯模式;然后根據(jù)用戶處理的要求、安全性的考慮,在基本表的基礎(chǔ)上再建立必要的視圖(View),形成數(shù)據(jù)的外模式
4.物理設(shè)計階段:根據(jù)DBMS特點(diǎn)和處理的需要,進(jìn)行物理存儲安排,建立索引,形成數(shù)據(jù)庫內(nèi)模式。
數(shù)據(jù)庫設(shè)計技巧
設(shè)計數(shù)據(jù)庫之前
(需求分析階段)
1) 理解客戶需求,詢問用戶如何看待未來需求變化。讓客戶解釋其需求,而且隨著開發(fā)的繼續(xù),還要經(jīng)常詢問客戶保證其需求仍然在開發(fā)的目的之中。
2) 了解企業(yè)業(yè)務(wù)可以在以后的開發(fā)階段節(jié)約大量的時間。
3) 重視輸入輸出。 在定義數(shù)據(jù)庫表和字段需求(輸入)時,首先應(yīng)檢查現(xiàn)有的或者已經(jīng)設(shè)計出的報表、查詢和視圖(輸出)以決定為了支持這些輸出哪些是必要的表和字段。 舉例:假如客戶需要一個報表按照郵政編碼排序、分段和求和,你要保證其中包括了單獨(dú)的郵政編碼字段而不要把郵政編碼糅進(jìn)地址字段里。
4) 創(chuàng)建數(shù)據(jù)字典和ER 圖表 ER 圖表和數(shù)據(jù)字典可以讓任何了解數(shù)據(jù)庫的人都明確如何從數(shù)據(jù)庫中獲得數(shù)據(jù)。ER圖對表明表之間關(guān)系很有用,而數(shù)據(jù)字典則說明了每個字段的用途以及任何可能存在的別名。對SQL 表達(dá)式的文檔化來說這是完全必要的。
5) 定義標(biāo)準(zhǔn)的對象命名規(guī)范
數(shù)據(jù)庫各種對象的命名必須規(guī)范。
表和字段的設(shè)計
(數(shù)據(jù)庫邏輯設(shè)計)
表設(shè)計原則
1) 標(biāo)準(zhǔn)化和規(guī)范化
數(shù)據(jù)的標(biāo)準(zhǔn)化有助于消除數(shù)據(jù)庫中的數(shù)據(jù)冗余。標(biāo)準(zhǔn)化有好幾種形式,但Third Normal Form(3NF)通常被認(rèn)為在性能、擴(kuò)展性和數(shù)據(jù)完整性方面達(dá)到了最好平衡。簡單來說,遵守3NF 標(biāo)準(zhǔn)的數(shù)據(jù)庫的表設(shè)計原則是:“One Fact in One Place”即某個表只包括其本身基本的屬性,當(dāng)不是它們本身所具有的屬性時需進(jìn)行分解。表之間的關(guān)系通過外鍵相連接。它具有以下特點(diǎn):有一組表專門存放通過鍵連接起來的關(guān)聯(lián)數(shù)據(jù)。 舉例:某個存放客戶及其有關(guān)定單的3NF 數(shù)據(jù)庫就可能有兩個表:Customer 和Order。Order 表不包含定單關(guān)聯(lián)客戶的任何信息,但表內(nèi)會存放一個鍵值,該鍵指向Customer 表里包含該客戶信息的那一行。 事實(shí)上,為了效率的緣故,對表不進(jìn)行標(biāo)準(zhǔn)化有時也是必要的。
2) 數(shù)據(jù)驅(qū)動
采用數(shù)據(jù)驅(qū)動而非硬編碼的方式,許多策略變更和維護(hù)都會方便得多,大大增強(qiáng)系統(tǒng)的靈活性和擴(kuò)展性。
舉例,假如用戶界面要訪問外部數(shù)據(jù)源(文件、XML 文檔、其他數(shù)據(jù)庫等),不妨把相應(yīng)的連接和路徑信息存儲在用戶界面支持表里。還有,如果用戶界面執(zhí)行工作流之類的任務(wù)(發(fā)送郵件、打印信箋、修改記錄狀態(tài)等),那么產(chǎn)生工作流的數(shù)據(jù)也可以存放在數(shù)據(jù)庫里。角色權(quán)限管理也可以通過數(shù)據(jù)驅(qū)動來完成。事實(shí)上,如果過程是數(shù)據(jù)驅(qū)動的,你就可以把相當(dāng)大的責(zé)任推給用戶,由用戶來維護(hù)自己的工作流過程。