數(shù)據(jù)庫完整性就是數(shù)據(jù)庫完整性約束設(shè)計時間:2009-12-16 12:09:16來源:網(wǎng)絡(luò) 作者:未知 點擊:158次
數(shù)據(jù)庫完整性(Database Integrity)是指數(shù)據(jù)庫中數(shù)據(jù)的正確性和相容性。數(shù)據(jù)庫完整性由各種各樣的完整性約束來保證,因此可以說數(shù)據(jù)庫完整性設(shè)計就是數(shù)據(jù)庫完整性約束的設(shè)計。數(shù)據(jù)庫完整性約束可以通過DBMS或應(yīng)用程序
數(shù)據(jù)庫完整性(Database Integrity)是指數(shù)據(jù)庫中數(shù)據(jù)的正確性和相容性。數(shù)據(jù)庫完整性由各種各樣的完整性約束來保證,因此可以說數(shù)據(jù)庫完整性設(shè)計就是數(shù)據(jù)庫完整性約束的設(shè)計。數(shù)據(jù)庫完整性約束可以通過DBMS或應(yīng)用程序來實現(xiàn),基于DBMS的完整性約束作為模式的一部分存入數(shù)據(jù)庫中。通過DBMS實現(xiàn)的數(shù)據(jù)庫完整性按照數(shù)據(jù)庫設(shè)計步驟進行設(shè)計,而由應(yīng)用軟件實現(xiàn)的數(shù)據(jù)庫完整性則納入應(yīng)用軟件設(shè)計(本文主要討論前者)。數(shù)據(jù)庫完整性對于數(shù)據(jù)庫應(yīng)用系統(tǒng)非常關(guān)鍵,其作用主要體現(xiàn)在以下幾個方面:
1.?dāng)?shù)據(jù)庫完整性約束能夠防止合法用戶使用數(shù)據(jù)庫時向數(shù)據(jù)庫中添加不合語義的數(shù)據(jù)。
2.利用基于DBMS的完整性控制機制來實現(xiàn)業(yè)務(wù)規(guī)則,易于定義,容易理解,而且可以降低應(yīng)用程序的復(fù)雜性,提高應(yīng)用程序的運行效率。同時,基于DBMS的完整性控制機制是集中管理的,因此比應(yīng)用程序更容易實現(xiàn)數(shù)據(jù)庫的完整性。
3.合理的數(shù)據(jù)庫完整性設(shè)計,能夠同時兼顧數(shù)據(jù)庫的完整性和系統(tǒng)的效能。比如裝載大量數(shù)據(jù)時,只要在裝載之前臨時使基于DBMS的數(shù)據(jù)庫完整性約束失效,此后再使其生效,就能保證既不影響數(shù)據(jù)裝載的效率又能保證數(shù)據(jù)庫的完整性。
4.在應(yīng)用軟件的功能測試中,完善的數(shù)據(jù)庫完整性有助于盡早發(fā)現(xiàn)應(yīng)用軟件的錯誤。
數(shù)據(jù)庫完整性約束可分為6類:列級靜態(tài)約束、元組級靜態(tài)約束、關(guān)系級靜態(tài)約束、列級動態(tài)約束、元組級動態(tài)約束、關(guān)系級動態(tài)約束。動態(tài)約束通常由應(yīng)用軟件來實現(xiàn)。不同DBMS支持的數(shù)據(jù)庫完整性基本相同,Oracle支持的基于DBMS的完整性約束如下表所示:
數(shù)據(jù)庫完整性設(shè)計示例
一個好的數(shù)據(jù)庫完整性設(shè)計首先需要在需求分析階段確定要通過數(shù)據(jù)庫完整性約束實現(xiàn)的業(yè)務(wù)規(guī)則,然后在充分了解特定DBMS提供的完整性控制機制的基礎(chǔ)上,依據(jù)整個系統(tǒng)的體系結(jié)構(gòu)和性能要求,遵照數(shù)據(jù)庫設(shè)計方法和應(yīng)用軟件設(shè)計方法,合理選擇每個業(yè)務(wù)規(guī)則的實現(xiàn)方式;最后,認真測試,排除隱含的約束沖突和性能問題?;贒BMS的數(shù)據(jù)庫完整性設(shè)計大體分為以下幾個階段:
一.需求分析階段
經(jīng)過系統(tǒng)分析員、數(shù)據(jù)庫分析員、用戶的共同努力,確定系統(tǒng)模型中應(yīng)該包含的對象,如人事及工資管理系統(tǒng)中的部門、員工、經(jīng)理等,以及各種業(yè)務(wù)規(guī)則。
在完成尋找業(yè)務(wù)規(guī)則的工作之后,確定要作為數(shù)據(jù)庫完整性的業(yè)務(wù)規(guī)則,并對業(yè)務(wù)規(guī)則進行分類。其中作為數(shù)據(jù)庫模式一部分的完整性設(shè)計按下面的過程進行。而由應(yīng)用軟件來實現(xiàn)的數(shù)據(jù)庫完整性設(shè)計將按照軟件工程的方法進行。
二.概念結(jié)構(gòu)設(shè)計階段
概念結(jié)構(gòu)設(shè)計階段是將依據(jù)需求分析的結(jié)果轉(zhuǎn)換成一個獨立于具體DBMS的概念模型,即實體關(guān)系圖(ERD)。在概念結(jié)構(gòu)設(shè)計階段就要開始數(shù)據(jù)庫完整性設(shè)計的實質(zhì)階段,因為此階段的實體關(guān)系將在邏輯結(jié)構(gòu)設(shè)計階段轉(zhuǎn)化為實體完整性約束和參照完整性約束,到邏輯結(jié)構(gòu)設(shè)計階段將完成設(shè)計的主要工作。
三.邏輯結(jié)構(gòu)設(shè)計階段
此階段就是將概念結(jié)構(gòu)轉(zhuǎn)換為某個DBMS所支持的數(shù)據(jù)模型,并對其進行優(yōu)化,包括對關(guān)系模型的規(guī)范化。此時,依據(jù)DBMS提供的完整性約束機制,對尚未加入邏輯結(jié)構(gòu)中的完整性約束列表,逐條選擇合適的方式加以實現(xiàn)。
在邏輯結(jié)構(gòu)設(shè)計階段結(jié)束時,作為數(shù)據(jù)庫模式一部分的完整性設(shè)計也就基本完成了。每種業(yè)務(wù)規(guī)則都可能有好幾種實現(xiàn)方式,應(yīng)該選擇對數(shù)據(jù)庫性能影響最小的一種,有時需通過實際測試來決定。
數(shù)據(jù)庫完整性設(shè)計原則
在實施數(shù)據(jù)庫完整性設(shè)計的時候,有一些基本的原則需要把握:
1.根據(jù)數(shù)據(jù)庫完整性約束的類型確定其實現(xiàn)的系統(tǒng)層次和方式,并提前考慮對系統(tǒng)性能的影響。一般情況下,靜態(tài)約束應(yīng)盡量包含在數(shù)據(jù)庫模式中,而動態(tài)約束由應(yīng)用程序?qū)崿F(xiàn)。
2.實體完整性約束、參照完整性約束是關(guān)系數(shù)據(jù)庫最重要的完整性約束,在不影響系統(tǒng)關(guān)鍵性能的前提下需盡量應(yīng)用。用一定的時間和空間來換取系統(tǒng)的易用性是值得的。
3.要慎用目前主流DBMS都支持的觸發(fā)器功能,一方面由于觸發(fā)器的性能開銷較大,另一方面,觸發(fā)器的多級觸發(fā)不好控制,容易發(fā)生錯誤,非用不可時,最好使用Before型語句級觸發(fā)器。
4.在需求分析階段就必須制定完整性約束的命名規(guī)范,盡量使用有意義的英文單詞、縮寫詞、表名、列名及下劃線等組合,使其易于識別和記憶,如:CKC_EMP_REAL_INCOME_EMPLOYEE、PK_EMPLOYEE、CKT_EMPLOYEE。如果使用CASE工具,一般有缺省的規(guī)則,可在此基礎(chǔ)上修改使用。
5.要根據(jù)業(yè)務(wù)規(guī)則對數(shù)據(jù)庫完整性進行細致的測試,以盡早排除隱含的完整性約束間的沖突和對性能的影響。
6.要有專職的數(shù)據(jù)庫設(shè)計小組,自始至終負責(zé)數(shù)據(jù)庫的分析、設(shè)計、測試、實施及早期維護。數(shù)據(jù)庫設(shè)計人員不僅負責(zé)基于DBMS的數(shù)據(jù)庫完整性約束的設(shè)計實現(xiàn),還要負責(zé)對應(yīng)用軟件實現(xiàn)的數(shù)據(jù)庫完整性約束進行審核。
7.應(yīng)采用合適的CASE工具來降低數(shù)據(jù)庫設(shè)計各階段的工作量。好的CASE工具能夠支持整個數(shù)據(jù)庫的生命周期,這將使數(shù)據(jù)庫設(shè)計人員的工作效率得到很大提高,同時也容易與用戶溝通。