王希鋒
摘要:數據完整性是指數據的正確性、完備性和一致性,是衡量數據庫質量好壞的標準。本文從以下三個方面分析了數據的完整性。即實體完整性、參照完整性和用戶自定義完整性。
關鍵詞:實體完整性 用戶定義完整性 參照完整性
數據庫完整性(Database Integrity)是指數據庫中數據的正確性和相容性。數據庫完整性由各種各樣的完整性約束來保證,因此可以說數據庫完整性設計就是數據庫完整性約束的設計。數據庫完整性約束可以通過DBMS或應用程序來實現,基于DBMS的完整性約束作為模式的一部分存入數據庫中。通過DBMS實現的數據庫完整性按照數據庫設計步驟進行設計,而由應用軟件實現的數據庫完整性則納入應用軟件設計。
約束是用來確保數據的準確性和一致性。數據的完整性就是對數據的準確性和一致性的一種保證。數據完整性(Data Integrity)是指數據的精確(Accuracy)和可靠性(Reliability)。它是應防止數據庫中存在不符合語義規定的數據和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。數據完整性分為三類:實體完整性(Entity Integrity)、參照完整性(Referential Integrity)、用戶定義的完整性(User-definedIntegrity)。關系的完整性提供了一種手段,用于保證授權用戶對數據庫修改時不會破壞數據的一直性。實體完整性和參照完整性是關系模型必須滿足的完整性約束條件,被稱作是關系的兩個不變性,應該由關系系統自動支持。
關系模型的完整性規則是對關系的某種約束條件。關系模型中三類完整性約束:實體完整性、參照完整性、用戶定義的完整性。
實體完整性和參照完整性是關系模型必須滿足的完整性約束條件,被稱作是關系的兩個不變性,應該由關系系統自動支持。
實體完整性規則(Entity Integrity):若屬性A是基本關系R的主屬性,則屬性A不能取空值。
關系模型必須遵守實體完整性規則的原因:(1)實體完整性規則是針對基本關系而言的。一個基本表通常對應現實世界的一個實體集或多對多聯系。(2)現實世界中的實體和實體間的聯系都是可區分的,即它們具有某種唯一性標識。(3)相應地,關系模型中以候選碼作為唯一性標識。(4)候選碼中的屬性即主屬性不能取空值。所謂空值就是“不知道”或“無意義”的值。如果主屬性取空值,就說明存在某個不可標識的實體,即存在不可區分的實體,這與第(2)點相矛盾,因此這個規則稱為實體完整性。實體完整性規則規定基本關系的所有主屬性都不能取空值,而不僅是主碼整體不能取空值。
例:選修(學號,課程號,成績)
“學號、課程號”為主碼,
則學號和課程號兩個屬性都不能取空值
參照完整性:在關系模型中實體及實體間的聯系都是用關系來描述的,因此可能存在著關系與關系間的引用。
外碼:設F是基本關系R的一個或一組屬性,但不是關系R的碼。如果F與基本關系S的主碼Ks相對應,則稱F是基本關系R的外碼(Foreign Key),基本關系R稱為參照關系(Referencing Relation),基本關系S稱為被參照關系(Referenced Relation)或目標關系(Target Relation)。
說明:關系R和S不一定是不同的關系。目標關系S的主碼Ks和參照關系的外碼F必須定義在同一個(或一組)域上。外碼并不一定要與相應的主碼同名。當外碼與相應的主碼屬于不同關系時,往往取相同的名字,以便于識別。
參照完整性規則就是定義外碼與主碼之間的引用規則。
參照完整性規則:若屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的主碼Ks相對應(基本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值必須為:
或者取空值(F的每個屬性值均為空值)
或者等于S中某個元組的主碼值。
用戶定義的完整性:用戶定義的完整性是針對某一具體關系數據庫的約束條件,反映某一具體應用所涉及的數據必須滿足的語義要求。
關系模型應提供定義和檢驗這類完整性的機制,以便用統一的系統的方法處理它們,而不要由應用程序承擔這一功能。
例:課程(課程號,課程名,學分)
“課程名”屬性必須取唯一值
非主屬性“課程名”也不能取空值
“學分”屬性只能取值{1,2,3,4}
與表有關的約束是表中定義的一種約束??稍诹卸x時定義該約束,此時稱為列約束,列約束有(表約束 NOT NULL)。也可以在表定義時定義約束,此時稱為表約束,表約束有(PRIMARY KEY、foreign key、check、UNIQUE)。
not null(非空)約束:只用于定義列約束。(2)unique(惟一)約束:用于指明創建惟一約束的列上的取值必須惟一。(3)primary key(主鍵)約束:用于定義基本表的主鍵,起惟一標識作用,其值不能為null,也不能重復,以此來保證實體的完整性。(4)foreign key(外鍵)約束:定義了一個表中數據與另一個表中的數據的聯系。
foreign key約束指定某一個列或一組列作為外部鍵,其中包含外部鍵的表稱為子表,包含外部鍵所引用的主鍵的表稱為父表。系統保證,表在外部鍵上的取值要么是父表中某一主鍵,要么取空值,以此保證兩個表之間的連接,確保了實體的參照完整性。
以上通過實體完整性、參照完整性、用戶自定義完整性三個方面進行分析了數據庫中的完整性約束,并且通過實際的例子更容易清晰的理解和掌握完整性約束。