在關係模型中有四類完整性約束:實體完整性、域完整性、參照完整性和用戶定義的完整性,其中實體完整性和參照完整性約束條件,稱爲關係的兩個不變性。數據庫
關係數據庫的完整性規則是數據庫設計的重要內容。絕大部分關係型數據庫管理系統RDBMS均可自動支持關係完整性規則,只要用戶在定義(創建)表的結構時,注意選定主鍵、外鍵及其參照表,RDBMS可自動實現其完整性約束條件。數據庫設計
(1)實體完整性(Entity Integrity)。實體完整性指表中行的完整性。主要用於保證操做的數據(記錄)非空、惟一且不重複。即實體完整性要求每一個關係(表)有且僅有一個主鍵,每個主鍵值必須惟一,並且不容許爲「空」(NULL)或重複。spa
(2)實體完整性規則要求。若屬性A是基本關係R的主屬性,則屬性A不能取空值,即主屬性不可爲空值。其中的空值(NULL)不是0,也不是空隔或空字符串,而是沒有值。實際上,空值是指暫時「沒有存放的值」、「不知道」或「無心義」的值。因爲主鍵是實體數據(記錄)的唯一標識,若主屬性取空值,關係中就會存在不可標識(區分)的實體數據(記錄),這與實體的定義矛盾,而對於非主屬性能夠取空值(NULL),所以,將此規則稱爲實體完整性規則。如學籍關係(表)中主屬性「學號」(列)中不能有空值,不然沒法操做調用學籍表中的數據(記錄)。設計
域完整性(Domain Integrity)是指數據庫表中的列必須知足某種特定的數據類型或約束。其中約束又包括取值範圍、精度等規定。表中的CHECK、FOREIGN KEY 約束和DEFAULT、 NOT NULL定義都屬於域完整性的範疇。字符串
參照完整性(Referential Integrity)屬於表間規則。對於永久關係的相關表,在更新、插入或刪除記錄時,若是隻改其一,就會影響數據的完整性。如刪除父表的某記錄後,子表的相應記錄未刪除,導致這些記錄稱爲孤立記錄。對於更新、插入或刪除表間數據的完整性,統稱爲參照完整性。一般,在客觀現實中的實體之間存在必定聯繫,在關係模型中實體及實體間的聯繫都是以關係進行描述,所以,操做時就可能存在着關係與關係間的關聯和引用。it
在關係數據庫中,關係之間的聯繫是經過公共屬性實現的。這個公共屬性常常是一個表的主鍵,同時是另外一個表的外鍵。參照完整性體如今兩個方面:實現了表與表之間的聯繫,外鍵的取值必須是另外一個表的主鍵的有效值,或是「空」值。數據類型
參照完整性規則(Referential Integrity)要求:若屬性組F是關係模式R1的主鍵,同時F也是關係模式R2的外鍵,則在R2的關係中,F的取值只容許兩種可能:空值或等於R1關係中某個主鍵值。引用
R1稱爲「被參照關係」模式,R2稱爲「參照關係」模式。數據
注意:在實際應用中,外鍵不必定與對應的主鍵同名。外鍵經常使用下劃曲線標出。關係型數據庫
用戶定義完整性(User-defined Integrity)是對數據表中字段屬性的約束,用戶定義完整性規則(User-defined integrity)也稱域完整性規則。包括字段的值域、字段的類型和字段的有效規則(如小數位數)等約束,是由肯定關係結構時所定義的字段的屬性決定的。如,百分制成績的取值範圍在0~100之間等。