企業資料庫設計原則

47328983發表於2009-03-07
要開發一個基於資料庫的應用系統,其中最關鍵的一步就是整個系統所依據的資料庫的建模設計,從邏輯的到物理的,一個環節疏於設計,整個的應用系統便似建立在危房之上,隨著開發過程的不斷深入,它要隨時面臨著各種難以預料的風險,開發者要為修改或重新設計沒有設計好的資料庫系統而付出難以預料的代價。所以,一個良好的資料庫設計是高效率的系統所必須的。 

一、邏輯建模 

資料庫設計的方法因具體資料庫而異,但是建模階段的相同的,所以可以用一些通用的工具來進行,如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,等與資料庫的介面,主要是考慮介面的可用性、效率問題。這一步主要從經驗出發,因為這種產品不斷出臺,而且都是經過各商家的吹捧,要在實踐中決定哪個是最適合。 

以上是資料庫建模設計的幾個重要步驟的大致分析,整個設計過程是不斷地改進的,是資料庫管理員、設計人員、開發人員共同完成的,只是各有側重點不同,資料庫管理員側重於是23步的設計,設計人員側重於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
設為

ROLLBACK_SEGMENTS
根據交易量的大小,定為10個。分別放在兩個磁碟上。 

PROCESS 80 

MTS_SERVERS 3 

MTS_DISPATCHERS tcp,3 

ARCHIVE_LOG_START TRUE
採用ARCHIVE方式備份。 

這些引數的確定是暫時的,沒有一個系統可以執行之前把引數確定得正好,需要在應用程式執行之後進行調整。 

四、與開發軟體的介面問題 

因為我們這個系統的開發軟體用的是Borland cc++builder 5,所以採用的是比較成熟的BDE的介面,它是Borland公司提供的,效能比較好。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/241379/viewspace-563215/,如需轉載,請註明出處,否則將追究法律責任。

相關文章