資料庫完整性(Database Integrity)是指資料庫中資料在邏輯上的一緻性、正确性、有效性和相容性。
資料庫完整性由各種各樣的完整性限制來保證,是以可以說資料庫完整性設計就是資料庫完整性限制的設計。
原理
資料庫完整性對于資料庫應用系統非常關鍵,其作用主要展現在以下幾個方面:
1.資料庫完整性限制能夠防止合法使用者使用資料庫時向資料庫中添加不合語義的資料。
2.利用基于DBMS的完整性控制機制來實作業務規則,易于定義,容易了解,而且可以降低應用程式的複雜性,提高應用程式的運作效率。
同時,基于DBMS的完整性控制機制是集中管理的,是以比應用程式更容易實作資料庫的完整性。
3.合理的資料庫完整性設計,能夠同時兼顧資料庫的完整性和系統的效能。比如裝載大量資料時,隻要在裝載之前臨時使基于DBMS的資料庫完整性限制失效,此後再使其生效,就能保證既不影響資料裝載的效率又能保證資料庫的完整性。
4.在應用軟體的功能測試中,完善的資料庫完整性有助于盡早發現應用軟體的錯誤。
資料庫完整性限制可分為6類:列級靜态限制、元組級靜态限制、關系級靜态限制、列級動态限制、元組級動态限制、關系級動态限制。
動态限制通常由應用軟體來實作。不同DBMS支援的資料庫完整性基本相同。
關系模型
關系完整性的用于保證資料庫中資料的正确性。系統在進行更新、插入或删除等操作時都要檢查資料的完整性,核實其限制條件,即關系模型的完整性規則。
在關系模型中有四類完整性限制:實體完整性、域完整性、參照完整性和使用者定義的完整性,其中實體完整性和參照完整性限制條件,稱為關系的兩個不變性。
實體
關系資料庫的完整性規則是資料庫設計的重要内容。
絕大部分關系型資料庫管理系統RDBMS都可自動支援關系完整性規則,隻要使用者在定義(建立)表的結構時,注意標明主鍵、外鍵及其參照表,RDBMS可自動實作其完整性限制條件。
(1)實體完整性(Entity Integrity)。實體完整性指表中行的完整性。主要用于保證操作的資料(記錄)非空、唯一且不重複。
即實體完整性要求每個關系(表)有且僅有一個主鍵,每一個主鍵值必須唯一,而且不允許為“空”(NULL)或重複。
(2)實體完整性規則要求。若屬性A是基本關系R的主屬性,則屬性A不能取空值,即主屬性不可為空值。其中的空值(NULL)不是0,也不是空隔或空字元串,而是沒有值。
實際上,空值是指暫時“沒有存放的值”、“不知道”或“無意義”的值。
由于主鍵是實體資料(記錄)的惟一辨別,若主屬性取空值,關系中就會存在不可辨別(區分)的實體資料(記錄),這與實體的定義沖突,而對于非主屬性可以取空值(NULL),
是以,将此規則稱為實體完整性規則。如學籍關系(表)中主屬性“學号”(列)中不能有空值,否則無法操作調用學籍表中的資料(記錄)。
域完整性
域完整性(Domain Integrity)是指資料庫表中的列必須滿足某種特定的資料類型或限制。
其中限制又包括取值範圍、精度等規定。表中的CHECK、FOREIGN KEY 限制和DEFAULT、 NOT NULL定義都屬于域完整性的範疇。
參照完整性
參照完整性(Referential Integrity)屬于表間規則。對于永久關系的相關表,在更新、插入或删除記錄時,如果隻改其一,就會影響資料的完整性。
如删除父表的某記錄後,子表的相應記錄未删除,緻使這些記錄稱為孤立記錄。
對于更新、插入或删除表間資料的完整性,統稱為參照完整性。通常,在客觀現實中的實體之間存在一定聯系,在關系模型中實體及實體間的聯系都是以關系進行描述,
是以,操作時就可能存在着關系與關系間的關聯和引用。
在關系資料庫中,關系之間的聯系是通過公共屬性實作的。這個公共屬性經常是一個表的主鍵,同時是另一個表的外鍵。
參照完整性展現在兩個方面:實作了表與表之間的聯系,外鍵的取值必須是另一個表的主鍵的有效值,或是“空”值。
參照完整性規則(Referential Integrity)要求:
若屬性組F是關系模式R1的主鍵,同時F也是關系模式R2的外鍵,則在R2的關系中,F的取值隻允許兩種可能:空值或等于R1關系中某個主鍵值。
R1稱為“被參照關系”模式,R2稱為“參照關系”模式。
注意:在實際應用中,外鍵不一定與對應的主鍵同名。外鍵常用下劃曲線标出。
使用者定義完整性
使用者定義完整性(User-defined Integrity)是對資料表中字段屬性的限制,使用者定義完整性規則(User-defined integrity)也稱域完整性規則。
包括字段的值域、字段的類型和字段的有效規則(如小數位數)等限制,是由确定關系結構時所定義的字段的屬性決定的。
如,百分制成績的取值範圍在0~100之間等。