數(shù)據(jù)庫的“完整性”是指數(shù)據(jù)的正確性和相容性。完整性是指數(shù)據(jù)庫中數(shù)據(jù)在邏輯上的一致性、正確性、有效性和相容性。完整性對于數(shù)據(jù)庫系統(tǒng)的重要性:1、數(shù)據(jù)庫完整性約束能夠防止合法用戶使用數(shù)據(jù)庫時向數(shù)據(jù)庫中添加不合語義的數(shù)據(jù);2、合理的數(shù)據(jù)庫完整性設(shè)計(jì),能夠同時兼顧數(shù)據(jù)庫的完整性和系統(tǒng)的效能;3、完善的數(shù)據(jù)庫完整性有助于盡早發(fā)現(xiàn)應(yīng)用軟件的錯誤。
本教程操作環(huán)境:windows7系統(tǒng)、Dell G3電腦。
數(shù)據(jù)庫完整性(Database Integrity)是指數(shù)據(jù)庫中數(shù)據(jù)在邏輯上的一致性、正確性、有效性和相容性。
數(shù)據(jù)庫完整性由各種各樣的完整性約束來保證,因此可以說數(shù)據(jù)庫完整性設(shè)計(jì)就是數(shù)據(jù)庫完整性約束的設(shè)計(jì)。數(shù)據(jù)庫完整性約束可以通過DBMS或應(yīng)用程序來實(shí)現(xiàn),基于DBMS的完整性約束作為模式的一部分存入數(shù)據(jù)庫中。通過DBMS實(shí)現(xiàn)的數(shù)據(jù)庫完整性按照數(shù)據(jù)庫設(shè)計(jì)步驟進(jìn)行設(shè)計(jì),而由應(yīng)用軟件實(shí)現(xiàn)的數(shù)據(jù)庫完整性則納入應(yīng)用軟件設(shè)計(jì)。
數(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的完整性控制機(jī)制來實(shí)現(xiàn)業(yè)務(wù)規(guī)則,易于定義,容易理解,而且可以降低應(yīng)用程序的復(fù)雜性,提高應(yīng)用程序的運(yùn)行效率。同時,基于DBMS的完整性控制機(jī)制是集中管理的,因此比應(yīng)用程序更容易實(shí)現(xiàn)數(shù)據(jù)庫的完整性。
3.合理的數(shù)據(jù)庫完整性設(shè)計(jì),能夠同時兼顧數(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)用軟件來實(shí)現(xiàn)。不同DBMS支持的數(shù)據(jù)庫完整性基本相同。
在實(shí)施數(shù)據(jù)庫完整性設(shè)計(jì)的時候,有一些基本的原則需要把握:
1.根據(jù)數(shù)據(jù)庫完整性約束的類型確定其實(shí)現(xiàn)的系統(tǒng)層次和方式,并提前考慮對系統(tǒng)性能的影響。一般情況下,靜態(tài)約束應(yīng)盡量包含在數(shù)據(jù)庫模式中,而動態(tài)約束由應(yīng)用程序?qū)崿F(xiàn)。
2.實(shí)體完整性約束、參照完整性約束是關(guān)系數(shù)據(jù)庫最重要的完整性約束,在不影響系統(tǒng)關(guān)鍵性能的前提下需盡量應(yīng)用。用一定的時間和空間來換取系統(tǒng)的易用性是值得的。
3.另一方面,觸發(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ù)庫完整性進(jìn)行細(xì)致的測試,以盡早排除隱含的完整性約束間的沖突和對性能的影響。
6.要有專職的數(shù)據(jù)庫設(shè)計(jì)小組,自始至終負(fù)責(zé)數(shù)據(jù)庫的分析、設(shè)計(jì)、測試、實(shí)施及早期維護(hù)。數(shù)據(jù)庫設(shè)計(jì)人員不僅負(fù)責(zé)基于DBMS的數(shù)據(jù)庫完整性約束的設(shè)計(jì)實(shí)現(xiàn),還要負(fù)責(zé)對應(yīng)用軟件實(shí)現(xiàn)的數(shù)據(jù)庫完整性約束進(jìn)行審核。
7.應(yīng)采用合適的CASE工具來降低數(shù)據(jù)庫設(shè)計(jì)各階段的工作量。好的CASE工具能夠支持整個數(shù)據(jù)庫的生命周期,這將使數(shù)據(jù)庫設(shè)計(jì)人員的工作效率得到很大提高,同時也容易與用戶溝通。