數據完整性測試
一、概述
數據的完整性,是指存儲在數據庫中的數據的正確性和可靠性,它是衡量數據中數據質量的一種標準。數據完整性可以分為四類。
1、實體完整性,實體完整性的目的是確保數據庫中所有實體的唯一性,也就是不應出現完全相同的數據記錄。
2、區域完整性,匹配完整性要求數據表中的數據位于某一個特定的允許范圍內。
3、參考完整性,是用來維護相關數據表之間數據一致性的手段,通過實現參考完整性,可以避免因一個數據表的記錄改變而造成另一個數據表內的數據變成無效值。
4、用戶自定義完整性,用戶自定義由用戶根據實際應用中的需要自行定義。
二、利用約束維護數據完整性
第一種:字段級約束,只能作用于一個字段。
第二種:數據級的約束;分為:
1、主鍵約束,使用數據表中的一列數據或多列數據來唯一標識一行數據。在數據表中不能存在主鍵相同的兩行數據,主鍵不能為NULL。
2、外鍵約束,主要用來實現數據的區域完整性和引用完整性。如果確定了數據表中某一個字段將作為該數據表與其他數據表關聯時使用的外鍵,則該字段的聚會范圍將決定于關聯數據表中該字段的取值范圍。外鍵可以與另一張表上的主鍵約束建立聯系,也可以與另一張表上的唯一約束建立聯系。當一行新的數據被加入到表中,或對表中已經存在的外鍵上的數據進行修改時,新的數據必須存在于另一張表的主鍵上,或者為NULL。
3、唯一約束,主要用來確保非主鍵字段中的唯一性。唯一約束可以用來同時約束一個或多個非主鍵字段中數據的唯一性,而主鍵約束只允許一個字段數據的唯一性或多個字段組合在一起的唯一性;使用唯一約束的字段中允許出現NULL值,而在使用主鍵約束時,字段中不允許出現NULL值。
4、檢查(CHECK)約束,檢查約束通過檢查輸入數據字段值來維護數據的完整性,以確保只有符合條件的數據才能夠進入數據表。它通常是通過一個邏輯表達式的結果是否為真來判斷是否符合條件。與外鍵約束不同,外鍵約束是從另一張表上獲得合理的數據,而檢查約束則是通過對一個表達式的結果進行判斷來對數據進行檢查。
三、利用規則維護數據完整性
規則限制了可以存儲在表中或用戶定義數據類型的值,它可以使用多種方式 來完成對數據值的檢驗,可以使用函數返回驗證信息,也可以使用關鍵字BETWEEN, LIKE, IN完成對輸入數據的檢查。
規則是數據庫對象之一,它的作用與CHECK約束的部分功能相同,在向表的某列插入或更新數據時,用它來限制輸入的新值的取值范圍,但規則作為單獨的數據庫對象來實現,在一列上只能使用一個規則卻可以使用多個CHECK,另外,規則可以應用于多個示例,還可以應用于用戶自定義的數據類型,而CHECK只能應用于它定義的列。
規則是實現區域完整性的方法之一,當數據庫中的數據被插入或更新時,需要檢查這個新值是否遵循規則,如果違反了規則,則操作失敗。
1、DEFAULT對象(數據庫對象),可以實現數據完整性,綁定到列或用戶自定義數據類型時,如果插入時沒有明確提供值,默認值便指定一個值,并將其插入到對象所綁定的列中。
2、RULES對象(數據庫對象),可以用它來實現數據完整性,當綁定到列或用戶自定義數據類型時,規則將指定可以插入到列中的可接受的值。
四、使用觸發器和存儲過程實現數據完整性
觸發器是一種特殊的存儲過程,它不能被顯示地調用,而是在向表中插入、更新或刪除數據時被自動激活。所以,觸發器可以用來對表實施復雜的完整性約束,當觸發器所的數據發生改變時,觸發器會自動被激活,從而防止對數據的不正確修改。
觸發器與數據表緊密相連,可以看作是數據表定義的一部分,能學它們都是以一組SQL語句的形式存在。觸發器基于一個表創建,介是可以針對多個表進行操作。觸發器可以實現所有的約束功能。觸發器可以引用其他表中的列。
觸發器可以評估數據修改前后的表狀態,并根據其差異采取對策,這也是約束無法實現的。
觸發器為系統自動觸發,而存儲過程則需要強制激活。
五、總結
1、使用約束的系統開銷最低,其次為使用默認值和規則,開銷最高的是脆性器和存儲過程;
2、功能最強的是觸發器和存儲過程,其次是默認值和規則,最后是使用約束;