程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> 解密數據庫應用系統中的數據庫完整性

解密數據庫應用系統中的數據庫完整性

編輯:更多數據庫知識

數據庫完整性(Database Integrity)是指數據庫中數據的正確性和相容性。數據庫完整性由各種各樣的完整性約束來保證,因此可以說數據庫完整性設計就是數據庫完整性約束的設計。數據庫完整性約束可以通過DBMS或應用程序來實現,基於DBMS的完整性約束作為模式的一部分存入數據庫中。通過DBMS實現的數據庫完整性按照數據庫設計步驟進行設計,而由應用軟件實現的數據庫完整性則納入應用軟件設計(本文主要討論前者)。數據庫完整性對於數據庫應用系統非常關鍵,其作用主要體現在以下幾個方面:

1.數據庫完整性約束能夠防止合法用戶使用數據庫時向數據庫中添加不合語義的數據。

2.利用基於DBMS的完整性控制機制來實現業務規則,易於定義,容易理解,而且可以降低應用程序的復雜性,提高應用程序的運行效率。同時,基於DBMS的完整性控制機制是集中管理的,因此比應用程序更容易實現數據庫的完整性。

3.合理的數據庫完整性設計,能夠同時兼顧數據庫的完整性和系統的效能。比如裝載大量數據時,只要在裝載之前臨時使基於DBMS的數據庫完整性約束失效,此後再使其生效,就能保證既不影響數據裝載的效率又能保證數據庫的完整性。

4.在應用軟件的功能測試中,完善的數據庫完整性有助於盡早發現應用軟件的錯誤。

數據庫完整性約束可分為6類:列級靜態約束、元組級靜態約束、關系級靜態約束、列級動態約束、元組級動態約束、關系級動態約束。動態約束通常由應用軟件來實現。不同DBMS支持的數據庫完整性基本相同,Oracle支持的基於DBMS的完整性約束如下表所示:

數據庫完整性設計示例

一個好的數據庫完整性設計首先需要在需求分析階段確定要通過數據庫完整性約束實現的業務規則,然後在充分了解特定DBMS提供的完整性控制機制的基礎上,依據整個系統的體系結構和性能要求,遵照數據庫設計方法和應用軟件設計方法,合理選擇每個業務規則的實現方式;最後,認真測試,排除隱含的約束沖突和性能問題。基於DBMS的數據庫完整性設計大體分為以下幾個階段:

1.需求分析階段

經過系統分析員、數據庫分析員、用戶的共同努力,確定系統模型中應該包含的對象,如人事及工資管理系統中的部門、員工、經理等,以及各種業務規則。

在完成尋找業務規則的工作之後,確定要作為數據庫完整性的業務規則,並對業務規則進行分類。其中作為數據庫模式一部分的完整性設計按下面的過程進行。而由應用軟件來實現的數據庫完整性設計將按照軟件工程的方法進行。

2.概念結構設計階段

概念結構設計階段是將依據需求分析的結果轉換成一個獨立於具體DBMS的概念模型,即實體關系圖(ERD)。在概念結構設計階段就要開始數據庫完整性設計的實質階段,因為此階段的實體關系將在邏輯結構設計階段轉化為實體完整性約束和參照完整性約束,到邏輯結構設計階段將完成設計的主要工作。

3.邏輯結構設計階段

此階段就是將概念結構轉換為某個DBMS所支持的數據模型,並對其進行優化,包括對關系模型的規范化。此時,依據DBMS提供的完整性約束機制,對尚未加入邏輯結構中的完整性約束列表,逐條選擇合適的方式加以實現。

在邏輯結構設計階段結束時,作為數據庫模式一部分的完整性設計也就基本完成了。每種業務規則都可能有好幾種實現方式,應該選擇對數據庫性能影響最小的一種,有時需通過實際測試來決定。

數據庫完整性設計原則

在實施數據庫完整性設計的時候,有一些基本的原則需要把握:

1.根據數據庫完整性約束的類型確定其實現的系統層次和方式,並提前考慮對系統性能的影響。一般情況下,靜態約束應盡量包含在數據庫模式中,而動態約束由應用程序實現。

2.實體完整性約束、參照完整性約束是關系數據庫最重要的完整性約束,在不影響系統關鍵性能的前提下需盡量應用。用一定的時間和空間來換取系統的易用性是值得的。

3.要慎用目前主流DBMS都支持的觸發器功能,一方面由於觸發器的性能開銷較大,另一方面,觸發器的多級觸發不好控制,容易發生錯誤,非用不可時,最好使用Before型語句級觸發器。

4.在需求分析階段就必須制定完整性約束的命名規范,盡量使用有意義的英文單詞、縮寫詞、表名、列名及下劃線等組合,使其易於識別和記憶,如:CKC_EMP_REAL_INCOME_EMPLOYEE、PK_EMPLOYEE、CKT_EMPLOYEE。如果使用CASE工具,一般有缺省的規則,可在此基礎上修改使用。

5.要根據業務規則對數據庫完整性進行細致的測試,以盡早排除隱含的完整性約束間的沖突和對性能的影響。

6.要有專職的數據庫設計小組,自始至終負責數據庫的分析、設計、測試、實施及早期維護。數據庫設計人員不僅負責基於DBMS的數據庫完整性約束的設計實現,還要負責對應用軟件實現的數據庫完整性約束進行審核。

7.應采用合適的CASE工具來降低數據庫設計各階段的工作量。好的CASE工具能夠支持整個數據庫的生命周期,這將使數據庫設計人員的工作效率得到很大提高,同時也容易與用戶溝通。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved