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