數據庫設計與建模的技巧
一、 概述:
有關這數據庫設計的研究包括工程數據庫設計方法和輔助設計工具兩個方面。本文就工程數據庫設計中的一些問題進行討論,闡述了工程數據庫設計的基本概念和內容,分析工程數據庫設計的過程和項目中的通用處理原則。
二、 名詞解釋:
1、 數據庫建模:
在設計時,對現實世界進行分析、抽象、並從中找出內在聯繫,進而確定數據庫的結構,這一過程就稱為數據庫建模。它主要包括兩部分內容:確定最基本的數據結構和對約束建模。
2、 數據庫設計:
數據庫設計(Database Design)是指對於一個給定的應用環境,構造最優的數據庫模式,建立數據庫及其應用系統,使之能夠有效地存儲數據,滿足各種用戶的應用需求(信息要求和處理要求)。
3、數據和功能分析是設計工作的兩條主線:
數據和功能分析的兩條設計線
三、 設計原則:
1、 原始單據與實體之間的關係:
可以是一對一、一對多、多對多的關係。在一般情況下,它們是一對一的關係:即一張原始單據對應且只對應一個實體。在特殊情況下,它們可能是一對多或多對一的關係,即一張原始單證對應多個實體,或多張原始單證對應一個實體。
2、 主鍵與外鍵:
一般而言,一個實體不能既無主鍵又無外鍵。主鍵是實體的高度抽象,主鍵與外鍵的配對,表示實體之間的連接。
3、 表的性質:
基本表與中間表、臨時表不同,因為它具有如下四個特性:
a) 原子性:
基本表中的字段是不可再分解的;
b) 原始性:
基本表中的記錄是原始數據(基礎數據)的記錄;
c) 演繹性:
由基本表與代碼表中的數據,可以派生出所有的輸出數據;
d) 穩定性:
基本表的結構是相對穩定的,表中的記錄是要長期保存的;
4、 範式標準:
a) 標準理解:
基本表及其字段之間的關係,應儘量滿足第三範式。但是滿足第三範式的數據庫設計,往往不是最好的設計。
為了提高數據庫的運行效率,常常需要降低範式標準,適當增加冗餘,達到以空間換時間的目的。
b) 通俗理解:
i. 第一範式:
1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;
ii. 第二範式:
2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;
iii. 第三範式:
3NF是對字段冗餘性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗餘;
c) 圖解範式關係:
i. 標準理解:
範式關係圖
ii. 通俗理解:
範式通俗理解圖
d) 注意事項:
沒有冗餘的數據庫設計可以做到。但是沒有冗餘的數據庫未必是最好的數據庫,有時為了提高運行效率,就必須降低範式標準,適當保留冗餘數據。
具體做法是:在概念數據模型設計時遵守第三範式,降低範式標準的工作放到物理數據模型設計時考慮。降低範式就是增加字段,允許冗餘。
四、 主要步驟:
1、 步驟說明:
a) 需求分析:
瞭解用戶的數據需求、處理需求、安全性及完整性要求;
b) 概念設計:
通過數據抽象,設計系統概念模型,一般為E-R模型;
c) 邏輯結構設計:
設計系統的模式和外模式,對於關係模型主要是基本表和視圖;
d) 物理結構設計:
設計數據的存儲結構和存取方法,如索引、存儲過程、函數等等數據庫對象的設計;
e) 系統實施:
組織數據入庫、編制應用程序、試運行;
f) 運行維護:
系統投入運行,長期的維護工作;
2、 圖解:
數據庫設計步驟圖
數據庫設計步驟描述圖
五、 實際處理原則:
1、 儘量避免使用約束:
配置約束會導致數據庫計算和處理速度下降,同時不利於大型項目的數據導入導出功能,應儘量使用外部程序對約束進行維護(主鍵、唯一索引除外);
2、 默認添加數據維護字段:
在表結構設計過程中默認添加創建時間(create_time)、創建人(creator)、最後修改時間(last_modify_time)和備註(remark)等字段,這是為了提高表的排序和數據追溯能力(根據實際情況酌情增減);
3、 命名時增加前綴:
利用數據庫對象的英文單詞首字母作為命名時的前綴,可以達到快速區分對象類型的目的;
六、 主流設計軟件:
1、 繪製E-R圖:
Visio、PowerDesigner;
2、 繪製UML圖:
Visio、PowerDesigner;
3、 數據庫建模:
PowerDesigner:可同時支持概念數據模型和物理數據模型的設計及建模過程;