關係模型中有三類完整性約束,分別是:實體完整性,參照完整性,使用者定義完整性
定義:實體完整性是用於保證關聯式資料庫中每個元組都是可區分的,唯一的。
它的意思就是說資料表中每一行都應該有辦法將其唯一區分開來,這自然指的就是主鍵了,而且主鍵必須不能為空或部分為空。
那麼它大可以直接叫一些諸如「要有主鍵」等通俗的名字,但是為何要叫實體完整性呢?
首先第一點,「實體完整性」這個名字聽起來就很高大上,嘿嘿;
好了不開玩笑了,說認真的。
參照完整性中的參照,說白了就是資料表裡的外來鍵。
舉個例子,下面有三個關係:
學生(學號,姓名)
課程(課程號,課程名)
選修(學號,課程號,成績)
顯然,在選修關係中的學號,必須是學生表裡真正存在的學號,且選修表裡的課程號,也必須是課程表裡真正存在的課程號。這就是參照完整性的乙個典型表現了。
在上面的例子中,選修表中的學號就稱為選修表的乙個外碼,它對應的是學生表中的學號。並且稱選修關係為參照關係,而學生關係為被參照關係。
但是僅僅這麼說還有很多細節沒有講到,下面我們理一理外碼的定義。
首先要知道,外碼不能是這個關係(參照關係)的主碼,但是是它參照的關係(被參照關係)的主碼。
什麼意思呢,就是說學號這個屬性在學生表中是主碼,而在選修表中不是,這就稱學號是選修表中的乙個外來鍵(課程號同理)。
而且參照關係和被參照關係可以是同乙個關係,比如:
學生(學號,姓名,班級,班長)
在上面的關係中,班長屬性儲存的是班長的學號,那麼這就是自己參照自己了。
即「班長」是外碼,而學號是主碼。
而參照完整性,就是指如果屬性(或屬性組)f是關係r的外碼,且對應了關係s的主碼k(r和s可以是同乙個關係),那麼對於r中的每個元組中的f上的值,必須滿足:
(1) 要麼f取空值
(2) 要麼等於s中某個元組的主碼的值
比如上面那個學生的例子,或許那個班級還沒有選出班長,則班長屬性為空。而如果選出了班長,那麼班長必然是某乙個學生,則他的學號一定是在所有的學號中的某乙個。
任何關係型資料庫,都一定要支援實體完整性和參照完整性。
但同時往往在不同的情況下,我們還需要一些特殊的約束條件,比如性別只能是男或女,年齡不能超過150歲等等。
這種針對某一具體關聯式資料庫的約束條件稱為使用者定義的完整性,它反映某一具體應用所涉及的資料必須滿足的語意要求。
另外,還有一種說法,說關係模型有四種完整性約束,而另外那種完整性約束即為——域完整性
域完整性:(domain integrity)是指資料庫表中的列必須滿足某種特定的資料型別或約束。其中約束又包括取值範圍、精度等規定
不過我覺得,域完整性其實就是所謂的使用者定義的完整性…
關係的三類完整性約束
規則2.1實體完整性規則 entity integrity 若屬性a是基本關係r的主屬性,則屬性a不能取空值 空值就是 不知道 或 不存在 或 無意義 的值 例 選修 學號,課程號,成績 學號 課程號 為主碼 學號 和 課程號 兩個屬性都不能取空值 實體完整性規則的說明 1 實體完整性規則是針對基本...
關係的三類完整性約束
關係的三類完整性約束 若屬性 指乙個或一組屬性 a是基本關係r的主屬性,則a不能取空值。若屬性 或屬性組 f是基本關係r的外碼,它與基本關係s的主碼k相對應 或者說f引用了k 則對於r中每個元組在f上的值必須為 或者取空值 或者等於s中某個元組的主碼值。針對某一具體關聯式資料庫的約束條件,它反映某一...
關係模型中三類完整性約束以及解釋
1 實體完整性 所謂的實體完整性就是指關係 所謂的關係就是表 的主碼不能取空值 比如學生表的主碼通常是取學號為主碼 2 參照完整性 是指參照關係中每個元素的外碼要麼為空 null 要麼等於被參照關係中某個元素的主碼 比如今天是9月2日是開學日,大學新生剛來報道,在學生表裡,有的學生可能還沒來得及分配...