前言
關係模型的完整性約束規則是對關係的某種約束條件,是對現實世界的要求的反應,關係模型中有三類完整性約束:實體完整性、參照完整性和用戶定義的完整性。其中實體完整性和參照完整性是關係模型必須要滿足的完整性約束條件,被稱作是關係的兩個不變性,而用戶定義的完整性是應用領域需要遵循的約束條件,可以體現了具體領域中的語義約束
實體完整性
定義:若屬性(指一個或一組屬性)A是基本關係R的主屬性,則A不能取空值(null),即一張表中的主碼不可爲空(null)
規則說明:
- 實體完整性規則是針對基本關係而言的,就是隻在基本表上使用
- 現實世界中的實體是可區分的,即它們具有某種唯一性標識
- 相應地,關係模型中以主碼作爲唯一性的標識
- 主碼中的屬性即主屬性不能取空值
參照完整性
定義:設F是基本關係R的一或一組屬性,但不是關係R的碼,Ks是基本關係的主碼S的主碼,如果F與Ks相對應,則稱F是R的外碼,並稱基本關係R爲參照關係,基本關係S爲被參照關係或目標關係
規則說明:
- 外碼可以爲空
- 且外碼必須等於被參照屬性的值
- 同一基本表可以互相參照
如下面兩張表可知,學號是學生表的主碼,課程號是學生表的外碼,參照了課程表的主碼,課程表與學生表是被參照關係
學號(主碼) | 姓名 | 性別 | 年齡 | 課程號(外碼) |
---|---|---|---|---|
1 | 王五 | 男 | 20 | 1 |
課程號(主碼) | 課程名 | 教授老師 |
---|---|---|
1 | 數據庫 | 張三 |
用戶定義的完整性
用戶針對某一現實應用程序的某些要求,對基本表進行添加特殊約束條件
用戶定義的完整性約束條件主要有:
- 列值非空(not null)
create table(
name char(10) not null,
........
)
- 列值爲一(unique)
create table(
name char(10) unique not null,
........
)
- 檢查列值是否滿足一個條件表達式(check短語)
create table(
name char(10) not null,
sex char(2) ,
........
check(sex='男' or sex= '女')
)
借鑑
王珊,薩師煊.數據庫系統概論(第五版)[M].北京:高等教育出版社,2014:45-48.