資源描述:
《數(shù)據(jù)保護(hù)(數(shù)據(jù)庫完整性)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第8章數(shù)據(jù)庫完整性約束8.1默認(rèn)值8.2規(guī)則8.31數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性是指數(shù)據(jù)的正確性、有效性和相容性,是為了防止數(shù)據(jù)庫中存在不合語義的數(shù)據(jù),防止錯(cuò)誤信息的輸入與輸出造成無效操作或錯(cuò)誤結(jié)果。完整性措施的防范對象是不合語義的數(shù)據(jù)。例:性別只能是“男”或“女”,學(xué)號必須唯一。系統(tǒng)提供多種強(qiáng)制數(shù)據(jù)完整性的機(jī)制,保證數(shù)據(jù)庫中數(shù)據(jù)的質(zhì)量。2數(shù)據(jù)完整性類型根據(jù)數(shù)據(jù)完整性措施所作用的數(shù)據(jù)庫對象和范圍不同,可以將數(shù)據(jù)完整性進(jìn)行分類。完整性約束作用的對象:關(guān)系(表):若干元組間,關(guān)系之間的聯(lián)系的約束;元組:元組中各個(gè)字段間的聯(lián)系的約束;列:列的類型、取值
2、范圍、精度、唯一性、為空性、默認(rèn)定義、CHECK約束、主鍵約束、外鍵約束。數(shù)據(jù)完整性約束分類:實(shí)體(表)完整性域(列)完整性參照完整性(引用完整性)用戶自定義完整性31、實(shí)體完整性又稱為行完整性。它把表中的每行都看作一個(gè)實(shí)體,要求所有行都具有唯一標(biāo)識。實(shí)體完整性作用對象是列,強(qiáng)制表的標(biāo)識符列或主鍵的完整性(在SQLServer中,可以通過建立PRIMARYKEY約束、UNIQUE約束、IDENTITY等措施來實(shí)施實(shí)體完整性)。例如,對“客戶信息表”,客戶編號就可以作為主鍵,每個(gè)客戶的編號能夠惟一地確定該客戶對應(yīng)的記錄信息,那么在輸入數(shù)據(jù)時(shí),則不能
3、有相同客戶編號的記錄存在,通過對客戶編號這一字段建立主鍵約束,可實(shí)現(xiàn)“客戶信息表”的實(shí)體完整性。42、域完整性域完整性又稱為列完整性。它要求表中指定列的數(shù)據(jù)具有正確的數(shù)據(jù)類型(通過定義數(shù)據(jù)類型)、數(shù)據(jù)格式(通過CHECK約束和規(guī)則實(shí)現(xiàn))和有效的數(shù)據(jù)范圍(通過FOREIGNKEY約束、CHECK約束、NOTNULL、DEFAULT定義和規(guī)則實(shí)現(xiàn))。例如對于課程表“COURSE1”,學(xué)生的某門課程的學(xué)分應(yīng)在10分以內(nèi),為了對學(xué)分這一數(shù)據(jù)項(xiàng)輸入的數(shù)據(jù)進(jìn)行限制,可以定義該表的學(xué)分字段的約束條件。5[例1]定義“COURSE1”以及學(xué)分字段的約束條件CRE
4、ATETABLECOURSE1(課程號CHAR(6)NOTNULL,課程名CHAR(18)NOTNULLUNIQUE,學(xué)分TINYINTCHECK(學(xué)分>=0and學(xué)分<=10),PRIMARYKEY(課程號))對列的約束對表的約束63、參照完整性又稱為引用完整性,它的作用對象是關(guān)系。它保證主表(被參照表)中的數(shù)據(jù)與從表(參照表)中數(shù)據(jù)的一致性。在SQLServer中,它通過主鍵約束PRIMARYKEY和外鍵FOREIGNKEY約束、觸發(fā)器等來實(shí)現(xiàn)。在數(shù)據(jù)庫管理系統(tǒng)中,保證數(shù)據(jù)庫的完整性是非常重要的。參照完整性確保鍵值在所有表中一致。在被參照的表
5、中,當(dāng)其主鍵值被其他表參照時(shí),一般情況下該行記錄既不能被刪除,也不允許被改變。74.用戶自定義完整性可以定義不屬于其它完整性分類的特定業(yè)務(wù)規(guī)則,作用的對象可以是列、也可以是元組或關(guān)系。所有的完整性類型都支持用戶自定義完整性,如通過CREATETABLE中所有列級和表級約束、存儲(chǔ)過程和觸發(fā)器等實(shí)現(xiàn)88.1約束主鍵(PRIMARYKEY)約束惟一性(UNIQUE)約束檢查(CHECK)約束外部鍵(FOREIGNKEY)約束為空性(NOTNULL)定義98.1.1主鍵約束主鍵是表中的一列或一組列,它們的值可以唯一地標(biāo)識表中的每一行。在創(chuàng)建和修改表時(shí),可
6、以定義主鍵約束。主鍵列的值不允許為空。兩種創(chuàng)建主鍵約束的方法使用企業(yè)管理器創(chuàng)建主鍵約束使用T-SQL語句創(chuàng)建主鍵約束10使用企業(yè)管理器創(chuàng)建主鍵約束在表設(shè)計(jì)器中單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“索引/鍵”,打開“屬性”對話框,在該對話框中可以查看、創(chuàng)建、修改和刪除主鍵,如下圖。11使用T-SQL語句創(chuàng)建主鍵約束語法(在CREATETABLE中加入)CONSTRAINT主鍵約束名PRIMARYKEY(列名1[,列名2,...列名n])12[例2]使用CREATETABLE語句創(chuàng)建“測試”表,同時(shí)定義“記錄編號”列為主鍵。CREATETABLE測試
7、(記錄編號int,記錄名稱varchar(50),CONSTRAINTPK_測試PRIMARYKEY(記錄編號))138.1.2唯一性約束如果一個(gè)字段值不允許重復(fù),則應(yīng)當(dāng)對該字段添加UNIQUE約束。與主鍵不同的是,在UNIQUE字段中允許出現(xiàn)NULL值,但為保持唯一性,最多只能出現(xiàn)一次NULL值。惟一性約束可以保證除主鍵外的其他一個(gè)或多個(gè)列的數(shù)據(jù)唯一性,以防止在列中輸入重復(fù)的值。兩種創(chuàng)建唯一性約束的方法使用企業(yè)管理器創(chuàng)建唯一性約束使用T-SQL語句創(chuàng)建唯一性約束14使用企業(yè)管理器創(chuàng)建唯一性約束在表設(shè)計(jì)器中單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“索
8、引/鍵”,打開“屬性”對話框,在這里可以查看、創(chuàng)建、修改和刪除鍵。單擊“新建”按鈕,選中“創(chuàng)建UNIQUE”復(fù)選框,可以創(chuàng)建唯一性約束,