概述
數據完整性指數據庫中數據的正確性、相容性和一致性。包括現實世界中的應用需求的完整性。數據的完整性由完整性規則來定義。
關系模型的完整性規則是對關系的某種約束,提供一種手段來保證用戶對數據庫的修改時不會破壞數據庫中數據的完整性。保證數據是有意義的。
關系模型分三類約束:實體完整性約束、參照完整性約束和用戶自定義完整性約束。 前兩者是必須滿足的條件,稱作關系的兩個不變性。由DBMS自動支持
實體完整性約束(Entity Integrity Constraint)
此約束指關系的主屬性,主碼不能為空,在關系數據庫系統中,一個關系對應一張表,實體完整性指在數據存儲數據的表中,主鍵/碼不能取控值 NULL
參照完整性約束 (Referential Integrity Constraint)
現實世界中實體之間往往存在某種聯系,在關系模型中這種聯系通過關系來描述
參照完整性約束就說定義外碼和主碼之間的引用規則,是對關系間引用數據的一種限制。若屬性(屬性組)X 是基本關系 R 的外碼,它與基本關系 S 的主碼 Y 對應,那么 R 中每個元組在 F 上的值要么取 NULL,要么等於 S中對應元組的主碼值。 R 和 S 可以是不同的關系,也可以是同一關系。
如:
教師(職工號,姓名,性別,系編號)
系(系編號,系名,辦公地點)
上述兩個關系之間存在屬性的引用,系編碼既是 系
關系的主碼又是教師
關系的外部碼。那么教師
關系中系編碼屬性的取值需要參照 系
關系中系編碼的值或為 NULL。
用戶定義完整性約束 (User-defined Integrity constraint)
此約束針對某一應用環境的完整性約束條件,反映了某一具體應用所涉及的數據應滿足的要求。關系模型提供定義和檢驗的機制,此類規則一般在建立數據庫表的同時進行定義,如果某些條件未建立在庫表一級,則應在各個模塊的具體編程中通過程序進行檢查和控制。
關系模型完整性約束檢驗
在對數據庫進行修改時須檢驗是否滿足對上述三類完整性約束
插入操作
首先檢查實體完整性約束,檢查插入行在主碼屬性上的值是否已存在,不存在,可以執行插入,否則不可插入。再檢查參照完整性約束,如果是向被參照關系插入,則不需要考慮此約束;如果向參照關系插入,則檢查插入行在外碼屬性上的值是否已在相應被參照關系的主碼屬性中存在,存在,可插入,否則不可插入,或者將插入行的外碼屬性的值改為NULL,再插入,最后檢查自定義完整性約束,包括數據的類性、精度、取值范圍、是否允許空值、是否有默認值等,滿足即可執行插入操作,否則給出錯誤信息。
刪除操作
一般只需對被參照關系檢查參照完整性約束。如果主鍵被引用則不可刪,或將參照關系中對應行的外碼屬性改為為NULL,再刪除
更新操作
結合刪除 和 插入操作,先刪除再插入。