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