要開發一個基於數據庫的應用系統,其中最關鍵的一步就是整個系統所依據的數據庫的建模設計,從邏輯的到物理的,一個環節疏於設計,整個的應用系統便似建立在危房之上,隨著開發過程的不斷深入,它要隨時面臨著各種難以預料的風險,開發者要為修改或重新設計沒有設計好的數據庫系統而付出難以預料的代價。所以,一個良好的數據庫設計是高效率的系統所必須的。
一、邏輯建模
數據庫設計的方法因具體數據庫而異,但是建模階段的相同的,所以可以用一些通用的工具來進行,如Rational rose,PowerDesigner等,這一階段主要是依據系統的需求,獲取與分析要實現的應用系統信息,進行數據內部以及外在關系的分析,從而有效地建立整個系統的數據結構(在關系數據庫中通常稱為表結構),在此基礎上對數據庫的數據量、數據流量、及響應速度的估算分析,這樣數據模型就產生了。具體的操作准則是數據庫的幾個范式、用戶的具體需求和分析者的經驗,從數據庫的性能、安全、方便管理、易於開發等方面出發,具體方法因分析員的喜好和習慣而異,可以不用工具,最好使用工具,能讓分析過程簡便,最主要是能生成一些圖,如E-R圖,讓分析過程一目了然。
二、物理設計
此步設計和系統將具體使用的數據庫有關,也和數據庫所運行的硬、軟件平台有關,目的是盡量合理地給數據庫分配物理空間,這一步在數據庫設計中很重要,關系到數據庫數據的安全和數據庫的性能,具體的來說,這一步包括相應表空間的數據文件在磁盤上的分配,還要根據數據量的大小確定redolog文件、rollback段的大小,然後進行分配,這些文件的分配要遵循一些原則,本著利於備份,利於性能優化的原則,原則如下(以Oracle數據庫為例):
1、為表和索引建立不同的表空間,禁止在系統表空間中放入非核心Oracle系統成分的對象,確保數據表空間和索引表空間位於不同的磁盤磁盤驅動器上。
2、了解終端用戶怎樣訪問數據,如果可能,將經常同時查詢和頻繁查詢的對象放在不同的物理磁盤上。
3、當數據庫包含允許用戶並行訪問不同數據元素的大對象時,將對象分割存放在多個磁盤上是有好處的。可以采用分區。在某個操作系統平台上定義擁有數百萬行的表時,則更需小心,因為數據庫文件的大小受到限止,這種限制是由操作系統而不是由Oracle引起的。
4、在獨立的各盤上至少創建兩個用戶定義的rollback表空間,以存放用戶自己的rollback段。在初始化文件中安排rollback段的次序,使它們在多個磁盤之間進行切換。
5、將redo log文件放在一個讀寫較少的盤上。對於每個Oracle 實例要建立兩個以上的redo log 組,同組的兩個成員放在不同的設備上。
6、確立表和索引的大小,這決定了保存它們所需的表空間的尺寸,也決定了哪些表空間物理地裝在哪些盤上和哪些表空間可以結合在一起。具體的估算方法可以按照Oracle 一些公式,這裡還要按照各個表的具體特性,用途,定義它的存貯參數如(pctfree,pctused)。
三、關於數據庫參數的設計
每個數據庫在建立時,都有缺省的參數設置,但是對於具體的應用要求參數設置可能不同,缺省的參數設置往往需要根據應用系統的特點而需要改動,如每個數據庫的操作系統平台、instance 數目、各種內存大小的設置、采取的線程方式、備份方式等不同,具體的參數就一定要進行最為恰當的修改,這個步驟對數據庫性能很重要,也是保證應用系統所要求的數據庫功能得以實現重要一步。
四、與開發軟件的接口問題
數據庫設計最後要考慮的是與要選擇的開發軟件之間的接口問題,要准備好接口程序,有些是第三方軟件已經備好的,有些是數據庫本身要具備的,如jdbc,bde,ado,等與數據庫的接口,主要是考慮接口的可用性、效率問題。這一步主要從經驗出發,因為這種產品不斷出台,而且都是經過各商家的吹捧,要在實踐中決定哪個是最適合。
以上是數據庫建模設計的幾個重要步驟的大致分析,整個設計過程是不斷地改進的,是數據庫管理員、設計人員、開發人員共同完成的,只是各有側重點不同,數據庫管理員側重於是2、3步的設計,設計人員側重於1步的設計,而開發人員側重於4步的設計,由於有些應用系統的編程環境和實際應用環境不同,所以要做兩套設計,並注意兩套設計的兼容性可移植性。
下面結合一個實際開發的勞資管理系統中的數據庫設計,對以上幾個步驟做進一步解釋。
該系統應用於大型企業集團,包括幾十個分廠,基本數據均來源於各分廠,各分廠有一套Access數據庫,存貯著自己的人才檔案信息,由各廠自己維護,定期傳到總的數據庫裡,供勞資處各室查詢、統計用,。這是一個分部式的數據庫。
要開發一個基於數據庫的應用系統,其中最關鍵的一步就是整個系統所依據的數據庫的建模設計,從邏輯的到物理的,一個環節疏於設計,整個的應用系統便似建立在危房之上,隨著開發過程的不斷深入,它要隨時面臨著各種難以預料的風險,開發者要為修改或重新設計沒有設計好的數據庫系統而付出難以預料的代價。所以,一個良好的數據庫設計是高效率的系統所必須的。
一、邏輯建模
數據庫設計的方法因具體數據庫而異,但是建模階段的相同的,所以可以用一些通用的工具來進行,如Rational rose,PowerDesigner等,這一階段主要是依據系統的需求,獲取與分析要實現的應用系統信息,進行數據內部以及外在關系的分析,從而有效地建立整個系統的數據結構(在關系數據庫中通常稱為表結構),在此基礎上對數據庫的數據量、數據流量、及響應速度的估算分析,這樣數據模型就產生了。具體的操作准則是數據庫的幾個范式、用戶的具體需求和分析者的經驗,從數據庫的性能、安全、方便管理、易於開發等方面出發,具體方法因分析員的喜好和習慣而異,可以不用工具,最好使用工具,能讓分析過程簡便,最主要是能生成一些圖,如E-R圖,讓分析過程一目了然。
二、物理設計
此步設計和系統將具體使用的數據庫有關,也和數據庫所運行的硬、軟件平台有關,目的是盡量合理地給數據庫分配物理空間,這一步在數據庫設計中很重要,關系到數據庫數據的安全和數據庫的性能,具體的來說,這一步包括相應表空間的數據文件在磁盤上的分配,還要根據數據量的大小確定redolog文件、rollback段的大小,然後進行分配,這些文件的分配要遵循一些原則,本著利於備份,利於性能優化的原則,原則如下(以Oracle數據庫為例):
1、為表和索引建立不同的表空間,禁止在系統表空間中放入非核心Oracle系統成分的對象,確保數據表空間和索引表空間位於不同的磁盤磁盤驅動器上。
2、了解終端用戶怎樣訪問數據,如果可能,將經常同時查詢和頻繁查詢的對象放在不同的物理磁盤上。
3、當數據庫包含允許用戶並行訪問不同數據元素的大對象時,將對象分割存放在多個磁盤上是有好處的。可以采用分區。在某個操作系統平台上定義擁有數百萬行的表時,則更需小心,因為數據庫文件的大小受到限止,這種限制是由操作系統而不是由Oracle引起的。
4、在獨立的各盤上至少創建兩個用戶定義的rollback表空間,以存放用戶自己的rollback段。在初始化文件中安排rollback段的次序,使它們在多個磁盤之間進行切換。
5、將redo log文件放在一個讀寫較少的盤上。對於每個Oracle 實例要建立兩個以上的redo log 組,同組的兩個成員放在不同的設備上。
6、確立表和索引的大小,這決定了保存它們所需的表空間的尺寸,也決定了哪些表空間物理地裝在哪些盤上和哪些表空間可以結合在一起。具體的估算方法可以按照Oracle 一些公式,這裡還要按照各個表的具體特性,用途,定義它的存貯參數如(pctfree,pctused)。
三、關於數據庫參數的設計
每個數據庫在建立時,都有缺省的參數設置,但是對於具體的應用要求參數設置可能不同,缺省的參數設置往往需要根據應用系統的特點而需要改動,如每個數據庫的操作系統平台、instance 數目、各種內存大小的設置、采取的線程方式、備份方式等不同,具體的參數就一定要進行最為恰當的修改,這個步驟對數據庫性能很重要,也是保證應用系統所要求的數據庫功能得以實現重要一步。
四、與開發軟件的接口問題
數據庫設計最後要考慮的是與要選擇的開發軟件之間的接口問題,要准備好接口程序,有些是第三方軟件已經備好的,有些是數據庫本身要具備的,如jdbc,bde,ado,等與數據庫的接口,主要是考慮接口的可用性、效率問題。這一步主要從經驗出發,因為這種產品不斷出台,而且都是經過各商家的吹捧,要在實踐中決定哪個是最適合。
以上是數據庫建模設計的幾個重要步驟的大致分析,整個設計過程是不斷地改進的,是數據庫管理員、設計人員、開發人員共同完成的,只是各有側重點不同,數據庫管理員側重於是2、3步的設計,設計人員側重於1步的設計,而開發人員側重於4步的設計,由於有些應用系統的編程環境和實際應用環境不同,所以要做兩套設計,並注意兩套設計的兼容性可移植性。
下面結合一個實際開發的勞資管理系統中的數據庫設計,對以上幾個步驟做進一步解釋。
該系統應用於大型企業集團,包括幾十個分廠,基本數據均來源於各分廠,各分廠有一套Access數據庫,存貯著自己的人才檔案信息,由各廠自己維護,定期傳到總的數據庫裡,供勞資處各室查詢、統計用,。這是一個分部式的數據庫。
一、邏輯建模
首先是對數據庫的數據量、數據流量、及響應速度的估算分析,這一步對物理設計也是必須的,勞資系統的主要數據是人員檔案,大概有100兆左右,還有人員配備等信息加上工種序列、工資等級、廠礦車間等各種編碼,總的數據量大約在某些方面300兆左右。數據的輸入、維護大部分在各廠礦進行,然後到處裡集中,所以數據流量很大,對響應速度要求一般。
在邏輯建模上的工具上,采用Rantional rose 2000,根據用戶的需求,設計各種use case view, 在 logic vIEw中生成數據庫的實體,及實體之間的E-R圖,然後生成Data modeler,確定以後,用Schema generation在建好的數據庫中的對應的用戶下生成表。
詳細的圖很繁瑣,在這裡就不展示了。
二、物理設計
1、因為職工檔案信息庫很大,還有照片,所以把它分成兩個表,把照片單獨地放在一個表中,並且采用分區技術,在檔案表、照片表上建立分區,不同的分區分別放在不同的表空間。
2、因為職工檔案信息庫裡有許多編碼,查詢的時候要和編碼庫一起進行read操作,所以不把職工檔案信息表和編碼庫放在一個表空間。
3、建立二個rollback 表空間,十個rollback段,分區放在二個表空間裡,建立一個比較大的rollback段,因為職工檔案信息表經常會有批量的修改與添加。
4、將redo log文件放在一個讀寫較少的盤上。建立三個redo log 組,同組的兩個成員放在兩個盤上。因為選用的是ARCHIVELOG的備份方式。
5、根據每個表的性質,確定其存貯的參數,如職工檔案信息表的修改、刪除、插入都比較多,所以把它的Pctfree 10,Pctused 80定大小,估算出它大致需要的block數,算出存放這些表的表空間的數據文件的大小。
6、根據用戶的需求,建立一套數據庫的安全體系。也就是總結出幾種權限級別的用戶,建立這些用戶,並給這些用戶賦上相應的僅限,供開發人員編程時使用。
三、參數的設置
缺省的初始化參數文件中,選擇large。因為用戶數很多,100個左右。
SHARED_POOL_SIZE, 與數據庫大小有關,也與應用軟件有關。這裡設成缺省值的1.5倍。
DB_BLOCK_BUFFERS 根據所用服務器的內存與交易數的大小,設為25兆。
SORT_AREA_SIZE 根據所用服務器的內存,設為10兆
LOG_BUFFER 用缺省值的1.5倍。
DBWR_IO_SLAVES 設為1
ROLLBACK_SEGMENTS 根據交易量的大小,定為10個。分別放在兩個磁盤上。
PROCESS 80 MTS_SERVERS 3 MTS_DISPATCHERS tcp,3
ARCHIVE_LOG_START TRUE 采用ARCHIVE方式備份。
這些參數的確定是暫時的,沒有一個系統可以運行之前把參數確定得正好,需要在應用程序運行之後進行調整。
四、與開發軟件的接口問題
因為我們這個系統的開發軟件用的是Borland c++builder 5,所以采用的是比較成熟的BDE的接口,它是Borland公司提供的,性能比較好。
以上是根據多年數據庫管理、開發的實踐總結而出的數據庫建模與設計的大致思路,希望能對大家有所幫助。