關系模型的完整性規則是對關系的某種約束條件。
也就是說關系的值隨著時間變化時應該滿足一些約束條件。
(這些約束條件實際上是現實世界的要求。任何關系在任何時刻都要滿足這些語義約束)
關系模型中有三類完整性約束:
實體完整性?(關系模型必須滿足的完整性約束條件)
參照完整性?(關系模型必須滿足的完整性約束條件)→關系的兩個不變性
用戶定義的完整性 (應用領域需要遵循的約束條件,體現了具體領域中的語義約束)
2.3.1 實體完整性
? 實體完整性規則 若屬性(指一個或一組屬性)A是基本關系R的主屬性,則A不能取空值。
(所謂空值就是“不知道”或“不存在”或“無意義”的值)
按照實體完整性規則的規定,如果主碼由若干屬性組成,則所有這些主屬性都不能取空值。
對于實體完整性規則說明如下:
(1)一個基本表通常對應現實世界的一個實體集,例如學生關系對應于學生的集合。(實體完整性規則是針對基本關系而言的)
(2)現實世界中的實體是可區分的,即它們具有某種唯一性標識。
(3)關系模型中以主碼作為唯一性標識。
(4)主碼中的屬性即主屬性不能取空值。
2.3.2 參照完整性
現實世界中的實體之間往往存在某種聯系,在關系模型中實體及實體間的聯系都是用關系來描述的,
這樣就自然存在著關系與關系間的引用。
需要指出的是,外碼并不一定要與相應的主碼同名,如例2.3中學生關系的主碼為學號,玩嗎為班長。
不過,在實際應用中為了便于識別,當外碼與相應的主碼屬于不同關系時,往往給它們取相同的名字。
參照完整性規則就是定義外碼與主碼之間的引用規則。
參照完整性規則 若屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的主碼Ks相對應,則
對于R中每個元組在F上的值必須:
或者取空值(F的每個屬性值均為空值)
或者等于S中某個元組的主碼值
參照完整性規則中,R和S可以是同一個關系。
2.3.3 用戶定義的完整性
? 任何關系數據庫系統都應該支持實體完整性和參照完整性,這是關系模型所要求的。
用戶定義的完整性是針對某一具體關系數據庫的約束條件,它反映某一具體應用所涉及的數據必須滿足的語義要求。
例如某個屬性必須取唯一值、某個非主屬性不能取空值等。(學生不能沒有姓名,則可以定義學生姓名不能取空值;某個屬性(如學生的成績),的取值范圍可以定義在0~100之間等)
關系模型應提供定義和檢驗這類完整性的機制,以便用統一的系統的方法處理它們,而不需由應用程序承擔這一功能。
?