數據完整性
要想了解這三類完整性約束,先要了解什么是數據完整性。
數據庫中的數據是從外界輸入的,而數據的輸入由於種種原因,會發生輸入無效或錯誤信息。保證輸入的數據符合規定,成為了數據庫系統,尤其是多用戶的關系數據庫系統首要關注的問題。數據完整性因此而提出。
數據完整性(Data Integrity)是指數據的精確性(Accuracy) 和可靠性(Reliability)。即數據完整性是指數據庫中存儲的數據是有意義的或正確的,和現實世界相符。它是應防止數據庫中存在不符合語義規定的數據,和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。
數據完整性分為三類:實體完整性(Entity Integrity)、參照完整性(Referential Integrity)、用戶自定義完整性(User-definedIntegrity)。
數據庫采用多種方法來保證數據完整性,包括外鍵、約束、規則和觸發器。系統很好地處理了這幾者的關系,並針對不同的具體情況用不同的方法進行,相互交叉使用,相補缺點。
關系模型允許定義三類完整性約束;實體完整性、參照完整性和用戶定義的完整性。其中實體完整性和參照完整性是關系模型必須滿足的完整性約束條件,體現了具體領域中的語義約束。
一、實體完整性
實體完整性要求每個數據表都必須有主鍵,而作為主鍵的所有字段,其屬性必須是獨一及非空值。
實體完整性要保證關系中的每個元組都是可識別的和惟一的,指關系數據庫中所有的表都必須有主鍵,
而且表中不允許存在無主鍵值的記錄和主鍵值相同的記錄。因為實體必須可區分。
實際上,當在表中定義了主鍵時,數據庫管理系統會自動保證數據的實體完整性,即保證不允許存在主鍵值為空的記錄以及主鍵值重復的記錄。
二、參照完整性
參照完整性也稱為引用完整性。參照的完整性要求關系中不允許引用不存在的實體。與實體完整性是關系模型必須滿足的完整性約束條件,目的是保證數據的一致性。
現實世界中的實體之間往往存在着某種聯系,在關系模型中,實體以及實體之間的聯系都是用關系來表示的,這樣就自然存在着關系與關系之間的引用。
而參照完整性就是描述實體之間的聯系的。參照完整性一般是指多個實體或關系之間的關聯關系。
例如,若基本關系 R 的外鍵為 F,它與基本關系 S 的主鍵 K 相對應(基本關系 R 和 S 不一定是不同的關系),則對於 R 中的每個元組在 F 上的值必須為:
(1)空值,F 的每個屬性值均為空值。
(2)S 中某個元組中的主鍵值。
即參照的關系中的屬性值必須能夠在被參照關系找到或者取空值,否則不符合數據庫的語義。
在實際操作時如更新、刪除、插入一個表中的數據,通過參照引用相互關聯的另一個表中的數據,來檢查對表的數據操作是否正確,不正確則拒絕操作。
三、用戶定義完整性
用戶定義完整性也成為域完整性或語義完整性。用戶自定義完整性是針對某一具體關系數據庫的約束條件,它反映某一具體應用所涉及的數據必須滿足的語義要求。
實際上就是指明關系中屬性的取值范圍,防止屬性的值與應用語義矛盾。
關系模型應提供定義和檢驗這類完整性的機制,以便用統一的系統方法處理它們,而不要由應用程序承擔這一功能
主要包括非空約束、唯一約束、檢查約束、主鍵約束、外鍵約束。
