資源描述:
《完整性約束定義》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、5.4數(shù)據(jù)完整性的概念與實(shí)施方法5.4.1數(shù)據(jù)完整性概念數(shù)據(jù)完整性是指數(shù)據(jù)的正確性、完備性和一致性,是衡量數(shù)據(jù)庫(kù)質(zhì)量好壞的重要標(biāo)準(zhǔn)。在用INSERT、DELETE、UPDATE語(yǔ)句修改數(shù)據(jù)庫(kù)內(nèi)容時(shí),數(shù)據(jù)的完整性可能會(huì)遭到破壞??赡軙?huì)存在下列情況:無效的數(shù)據(jù)被添加到數(shù)據(jù)庫(kù)的表中。如:將學(xué)生考試成績(jī)輸入成負(fù)數(shù);SQLServer提供了對(duì)數(shù)據(jù)庫(kù)中表、列實(shí)施數(shù)據(jù)完整性的方法。對(duì)表進(jìn)行設(shè)計(jì)數(shù)據(jù)完整性有兩個(gè)重要內(nèi)容:標(biāo)識(shí)列的有效值和確定如何強(qiáng)制列中的數(shù)據(jù)完整性。11.域完整性域完整性是指一個(gè)列的輸入有效性,是否允許空值。強(qiáng)制域完整性的方法有:限制類型(通過設(shè)定列的數(shù)據(jù)類型)、格式(通過CH
2、ECK約束和規(guī)則)或可能值的范圍(通過FOREIGNKEY約束、CHECK約束、DEFAULT定義、NOTNULL定義和規(guī)則)。2.實(shí)體完整性實(shí)體完整性是指保證表中所有的行唯一。實(shí)體完整性要求表中的所有行都有一個(gè)唯一標(biāo)識(shí)符。這個(gè)唯一標(biāo)識(shí)符可能是一列,也可能是幾列的組合,稱之為主鍵。也就是說,表中主鍵在所有行上必須取值唯一。強(qiáng)制實(shí)體完整性的方法有:索引、UNIQUE約束、PRIMARYKEY約束或IDENTITY屬性。3.參照完整性參照完整性也叫引用完整性。參照完整性總是保證主關(guān)鍵字(被引用表)和外部關(guān)鍵字(引用表)之間的參照關(guān)系。它涉及兩個(gè)或兩個(gè)以上表數(shù)據(jù)的一致性維護(hù)。25.4
3、.2數(shù)據(jù)完整性實(shí)施方法1.聲明型數(shù)據(jù)完整性聲明型數(shù)據(jù)完整性一般在對(duì)象創(chuàng)建時(shí)定義,由SQLServer強(qiáng)制實(shí)施,通常使用約束、缺省值和規(guī)則來實(shí)現(xiàn)。實(shí)現(xiàn)基本數(shù)據(jù)完整性的首選方法是使用聲明型數(shù)據(jù)完整性。聲明型數(shù)據(jù)完整性作為數(shù)據(jù)庫(kù)對(duì)象說明的一部分在語(yǔ)法中實(shí)現(xiàn),在CREATETABLE和ALTERTABLE定義中使用CONSTRAINT、DEFAULT等語(yǔ)句限制表中的值。使用這種方法實(shí)現(xiàn)數(shù)據(jù)完整性簡(jiǎn)單且不易出錯(cuò),系統(tǒng)直接將實(shí)現(xiàn)數(shù)據(jù)完整性的要求定義在表和列上。2.過程型數(shù)據(jù)完整性過程型數(shù)據(jù)完整性是指由某個(gè)過程引發(fā)而實(shí)施的數(shù)據(jù)完整性。一般先寫出實(shí)施數(shù)據(jù)完整性的條件,再寫出強(qiáng)制該條件所執(zhí)行的用
4、于保證數(shù)據(jù)完整性的腳本。通常由觸發(fā)器和存儲(chǔ)過程實(shí)現(xiàn)。過程型數(shù)據(jù)完整性也可以在客戶機(jī)和服務(wù)器上使用其它編程語(yǔ)言和工具實(shí)現(xiàn)。35.4.3約束1.約束的定義和類型約束是SQLServer提供的自動(dòng)保持?jǐn)?shù)據(jù)庫(kù)完整性的一種方法。列級(jí)約束:列級(jí)約束是行定義的一部分,只能夠應(yīng)用在一列上。表級(jí)約束:表級(jí)約束的定義獨(dú)立于列的定義,可以應(yīng)用在一個(gè)表中的多列上。約束有六種類型:非空約束、缺省約束、檢查約束、主鍵約束、唯一約束、外鍵約束(參照約束)。非空約束(NOTNULL):表中的某些列必須存在有效值,不允許有空值出現(xiàn)。這是最簡(jiǎn)單的數(shù)據(jù)完整性約束,可在建表時(shí)將該列聲明為NOTNULL即可。缺省約束(
5、DEFALUTCONSTRAINTS):當(dāng)向數(shù)據(jù)庫(kù)中的表插入數(shù)據(jù)時(shí),如果用戶沒有明確給出某列的值,SQLServer自動(dòng)為該列輸入指定值。4檢查約束(CHECKCONSTRAINTS):限制插入列中的值的范圍。主鍵約束(PRIMARYKEYCONSTRAINTS):要求主鍵的列上沒有兩行具有相同值,也沒有空值。唯一約束(UNIQUECONSTRAINTS):要求表中所有行在指定的列上沒有完全相同的列值。外鍵約束(FROEIGNKEYCONSTRAINTS):要求正被插入或更新的列(外鍵)的新值,必須在被參照表(主表)的相應(yīng)列(主鍵)中已經(jīng)存在。5不同的約束強(qiáng)制不同類型的數(shù)據(jù)完整
6、性。表中給出了兩者的對(duì)應(yīng)關(guān)系。完整性類型約束類型域完整性非空約束DEFAULTCHECK實(shí)體完整性PRIMARYKEYUNIQUE參照完整性FOREIGNKEY62.使用T-SQL語(yǔ)言創(chuàng)建、管理約束(1)使用CREATETABLE語(yǔ)句創(chuàng)建約束使用CREATETABLE語(yǔ)句創(chuàng)建約束的一般語(yǔ)法如下:CREATETABLEtable_name(column_namedata_type[[CONSTRAINTconstraint_name]{PRIMARYKEY[CLUSTERED
7、NONCLUSTERED]
8、UNIQUE[CLUSTERED
9、NONCLUSTERED]
10、[FOREIG
11、NKEY]REFERENCESref_table[(ref_column)]
12、DEFAULTconstant_expression
13、CHECK(logical_expression)}][,...n])7其中:table_name:創(chuàng)建約束所在的表的名稱。column_name:列名。data_type:數(shù)據(jù)類型。constraint_name:約束名。在創(chuàng)建、修改、實(shí)現(xiàn)約束時(shí)注意以下幾點(diǎn):①可以在已有的表上創(chuàng)建、修改、刪除約束,而不必刪除并重建表。②可以在應(yīng)用程序中創(chuàng)建錯(cuò)誤檢查邏輯,測(cè)試是