在充分了解數據庫完整性各種控制機制的基礎上
確定要通過數據庫完整性約束實現的業務規則
然後依據整個系統的體系結構和性能要求
合理選擇各個業務規則的實現方式
最後進行測試
解決約束沖突和性能瓶頸
這是數據庫完整性設計的一個完整流程
隨著計算機技術的發展和普及
數據庫系統的應用越來越廣泛
數據庫在計算機系統中的地位日益凸顯出來
一個好的數據庫應用系統需要一個好的數據庫設計
而數據庫完整性設計作為數據庫設計的一個重要組成部分
直接影響到數據庫系統能否真實地反映現實世界
因此設計
實施和維護數據庫完整性的重要性不言而喻
數據庫總體上可分為網狀數據庫
層次數據庫和關系數據庫
其中以關系數據庫最為成熟
關系數據庫不僅具有管理大型數據的能力
良好的性能和穩定性
還有較為完備的數據完整性
在實際應用中最為廣泛
本文以關系數據庫為例說明數據庫完整性設計問題
下文中的數據庫均指關系數據庫
數據庫完整性概述
數據庫完整性是指數據庫中數據的正確性和相容性
數據庫完整性由各種各樣的完整性約束來保證
因此可以說數據庫完整性設計就是數據庫完整性約束的設計
數據庫完整性約束可以通過DBMS或應用程序來實現
基於DBMS的完整性約束作為模式的一部分存入數據庫中
通過DBMS實現的數據庫完整性按照數據庫設計步驟進行設計
而由應用軟件實現的數據庫完整性則納入應用軟件設計(本文主要討論前者)
數據庫完整性對於數據庫應用系統非常關鍵
其作用主要體現在以下幾個方面
.數據庫完整性約束能夠防止合法用戶使用數據庫時向數據庫中添加不合語義的數據
.利用基於DBMS的完整性控制機制來實現業務規則
易於定義
容易理解
而且可以降低應用程序的復雜性
提高應用程序的運行效率
同時
基於DBMS的完整性控制機制是集中管理的
因此比應用程序更容易實現數據庫的完整性
.合理的數據庫完整性設計
能夠同時兼顧數據庫的完整性和系統的效能
比如裝載大量數據時
只要在裝載之前臨時使基於DBMS的數據庫完整性約束失效
此後再使其生效
就能保證既不影響數據裝載的效率又能保證數據庫的完整性
.在應用軟件的功能測試中
完善的數據庫完整性有助於盡早發現應用軟件的錯誤
數據庫完整性約束可分為
類
列級靜態約束
元組級靜態約束
關系級靜態約束
列級動態約束
元組級動態約束
關系級動態約束
動態約束通常由應用軟件來實現
不同DBMS支持的數據庫完整性基本相同
Oracle支持的基於DBMS的完整性約束如下表所示
數據庫完整性設計示例
一個好的數據庫完整性設計首先需要在需求分析階段確定要通過數據庫完整性約束實現的業務規則
然後在充分了解特定DBMS提供的完整性控制機制的基礎上
依據整個系統的體系結構和性能要求
遵照數據庫設計方法和應用軟件設計方法
合理選擇每個業務規則的實現方式
最後
認真測試
排除隱含的約束沖突和性能問題
基於DBMS的數據庫完整性設計大體分為以下幾個階段
.需求分析階段
經過系統分析員
數據庫分析員
用戶的共同努力
確定系統模型中應該包含的對象
如人事及工資管理系統中的部門
員工
經理等
以及各種業務規則
在完成尋找業務規則的工作之後
確定要作為數據庫完整性的業務規則
並對業務規則進行分類
其中作為數據庫模式一部分的完整性設計按下面的過程進行
而由應用軟件來實現的數據庫完整性設計將按照軟件工程的方法進行
.概念結構設計階段
概念結構設計階段是將依據需求分析的結果轉換成一個獨立於具體DBMS的概念模型
即實體關系圖(ERD)
在概念結構設計階段就要開始數據庫完整性設計的實質階段
因為此階段的實體關系將在邏輯結構設計階段轉化為實體完整性約束和參照完整性約束
到邏輯結構設計階段將完成設計的主要工作
.邏輯結構設計階段
此階段就是將概念結構轉換為某個DBMS所支持的數據模型
並對其進行優化
包括對關系模型的規范化
此時
依據DBMS提供的完整性約束機制
對尚未加入邏輯結構中的完整性約束列表
逐條選擇合適的方式加以實現
在邏輯結構設計階段結束時
作為數據庫模式一部分的完整性設計也就基本完成了
每種業務規則都可能有好幾種實現方式
應該選擇對數據庫性能影響最小的一種
有時需通過實際測試來決定
數據庫完整性設計原則
在實施數據庫完整性設計的時候
有一些基本的原則需要把握
.根據數據庫完整性約束的類型確定其實現的系統層次和方式
並提前考慮對系統性能的影響
一般情況下
靜態約束應盡量包含在數據庫模式中
而動態約束由應用程序實現
.實體完整性約束
參照完整性約束是關系數據庫最重要的完整性約束
在不影響系統關鍵性能的前提下需盡量應用
用一定的時間和空間來換取系統的易用性是值得的
.要慎用目前主流DBMS都支持的觸發器功能
一方面由於觸發器的性能開銷較大
另一方面
觸發器的多級觸發不好控制
容易發生錯誤
非用不可時
最好使用Before型語句級觸發器
.在需求分析階段就必須制定完整性約束的命名規范
盡量使用有意義的英文單詞
縮寫詞
表名
列名及下劃線等組合
使其易於識別和記憶
如
CKC_EMP_REAL_INCOME_EMPLOYEE
PK_EMPLOYEE
CKT_EMPLOYEE
如果使用CASE工具
一般有缺省的規則
可在此基礎上修改使用
.要根據業務規則對數據庫完整性進行細致的測試
以盡早排除隱含的完整性約束間的沖突和對性能的影響
.要有專職的數據庫設計小組
自始至終負責數據庫的分析
設計
測試
實施及早期維護
數據庫設計人員不僅負責基於DBMS的數據庫完整性約束的設計實現
還要負責對應用軟件實現的數據庫完整性約束進行審核
.應采用合適的CASE工具來降低數據庫設計各階段的工作量
好的CASE工具能夠支持整個數據庫的生命周期
這將使數據庫設計人員的工作效率得到很大提高
同時也容易與用戶溝通
From:http://tw.wingwit.com/Article/program/Oracle/201311/18093.html