資料庫完整性(Database Integrity)是指資料庫中資料的正確性和相容性。資料庫完整性對於資料庫應用系統非常關鍵,體現在許多方面。 [關鍵字] SQLServer 資料庫完整性 資料庫完整性(Database Integrity)是指資料庫中資料的正確性和相容性。資料庫完整性由各種各樣的完整性條件約束來保證,因此可以說資料庫完整性設計就是資料庫完整性條件約束的 設計。資料庫完整性條件約束可以通過DBMS或應用程式來實現,基於DBMS的完整性條件約束作為模式的一部分存入資料庫中。通過DBMS實現的資料庫完整性按照 資料庫設計步驟進行設計,而由應用軟體實現的資料庫完整性則納入應用軟體設計(本文主要討論前者)。資料庫完整性對於資料庫應用系統非常關鍵,其作用主要 體現在以下幾個方面:
1.資料庫完整性條件約束能夠防止合法使用者使用資料庫時向資料庫中添加不合語義的資料。
2.利用基於DBMS的完整性控制機制來實現商務規則,易於定義,容易理解,而且可以降低應用程式的複雜性,提高應用程式的運行效率。同時,基於DBMS的完整性控制機制是集中管理的,因此比應用程式更容易實現資料庫的完整性。
3.合理的資料庫完整性設計,能夠同時兼顧資料庫的完整性和系統的效能。比如裝載大量資料時,只要在裝載之前臨時使基於DBMS的資料庫完整性條件約束失效,此後再使其生效,就能保證既不影響資料裝載的效率又能保證資料庫的完整性。
4.在應用軟體的功能測試中,完善的資料庫完整性有助於儘早發現應用軟體的錯誤。
資料庫完整性條件約束可分為6類:列級靜態約束、元組級靜態約束、關係級靜態約束、列級動態約束、元組級動態約束、關係級動態約束。動態約束通常由應用軟體來實現。不同DBMS支援的資料庫完整性基本相同,Oracle支援的基於DBMS的完整性條件約束如下表所示:
資料庫完整性設計樣本
一個好的資料庫完整性設計首先需要在需求分析階段確定要通過資料庫完整性條件約束實現的商務規則,然後在充分瞭解特定DBMS提供的完整性控制機 制的基礎上,依據整個系統的體繫結構和效能要求,遵照資料庫設計方法和應用軟體設計方法,合理選擇每個商務規則的實現方式;最後,認真測試,排除隱含的約 束衝突和效能問題。基於DBMS的資料庫完整性設計大體分為以下幾個階段:
一.需求分析階段
經過系統分析員、資料庫分析員、使用者的共同努力,確定系統模型中應該包含的對象,如人事及工資管理系統中的部門、員工、經理等,以及各種商務規則。
在完成尋找商務規則的工作之後,確定要作為資料庫完整性的商務規則,並對商務規則進行分類。其中作為資料庫模式一部分的完整性設計按下面的過程進行。而由應用軟體來實現的資料庫完整性設計將按照軟體工程的方法進行。
二.概念結構設計階段
概念結構設計階段是將依據需求分析的結果轉換成一個獨立於具體DBMS的概念性模型,即實體關聯圖(ERD)。在概念結構設計階段就要開始資料 庫完整性設計的實質階段,因為此階段的實體關聯將在邏輯結構設計階段轉化為實體完整性約束和參照完整性條件約束,到邏輯結構設計階段將完成設計的主要工作。
三.邏輯結構設計階段
此階段就是將概念結構轉換為某個DBMS所支援的資料模型,並對其進行最佳化,包括對關聯式模式的正常化。此時,依據DBMS提供的完整性條件約束機制,對尚未加入邏輯結構中的完整性條件約束列表,逐條選擇合適的方式加以實現。
在邏輯結構設計階段結束時,作為資料庫模式一部分的完整性設計也就基本完成了。每種商務規則都可能有好幾種實現方式,應該選擇對資料庫效能影響最小的一種,有時需通過實際測試來決定。
資料庫完整性設計原則
在實施資料庫完整性設計的時候,有一些基本的原則需要把握:
1.根據資料庫完整性條件約束的類型確定其實現的系統層次和方式,並提前考慮對系統效能的影響。一般情況下,靜態約束應盡量包含在資料庫模式中,而動態約束由應用程式實現。
2.實體完整性約束、參照完整性條件約束是關聯式資料庫最重要的完整性條件約束,在不影響系統關鍵效能的前提下需盡量應用。用一定的時間和空間來換取系統的易用性是值得的。
3.要慎用目前主流DBMS都支援的觸發器功能,一方面由於觸發器的效能開銷較大,另一方面,觸發器的多級觸發不好控制,容易發生錯誤,非用不可時,最好使用Before型語句級觸發器。
4.在需求分析階段就必須制定完整性條件約束的命名規範,盡量使用有意義的英文單詞、縮寫詞、表名、列名及底線等組合,使其易於識別和記憶, 如:CKC_EMP_REAL_INCOME_EMPLOYEE、PK_EMPLOYEE、CKT_EMPLOYEE。如果使用CASE工具,一般有預設 的規則,可在此基礎上修改使用。
5.要根據商務規則對資料庫完整性進行細緻的測試,以儘早排除隱含的完整性條件約束間的衝突和對效能的影響。
6.要有專職的資料庫設計小組,自始至終負責資料庫的分析、設計、測試、實施及早期維護。資料庫設計人員不僅負責基於DBMS的資料庫完整性條件約束的設計實現,還要負責對應用軟體實現的資料庫完整性條件約束進行審核。
7.應採用合適的CASE工具來降低資料庫設計各階段的工作量。好的CASE工具能夠支援整個資料庫的生命週期,這將使資料庫設計人員的工作效率得到很大提高,同時也容易與使用者溝通。