天天看點

資料庫關系模型的三類完整性限制

關系模型中有三類完整性限制,分别是:實體完整性,參照完整性,使用者定義完整性

實體完整性

定義:實體完整性是用于保證關系資料庫中每個元組都是可區分的,唯一的。

它的意思就是說資料表中每一行都應該有辦法将其唯一區分開來,這自然指的就是主鍵了,而且主鍵必須不能為空或部分為空。

那麼它大可以直接叫一些諸如“要有主鍵”等通俗的名字,但是為何要叫實體完整性呢?

首先第一點,“實體完整性”這個名字聽起來就很高大上,嘿嘿;

好了不開玩笑了,說認真的。

  • 一個基本表實際上是對應了現實生活中的一個實體集的,比如學生關系就對應了學生的集合,是以我們所謂的表,其實就相當于現實生活中的某一種實體的集合。
  • 而現實生活中的實體都是可以唯一區分的,他們本身就都具有了某種唯一性辨別,比如學生的學号,人的身份證等等。
  • 是以既然我們的表是相對于實體集的,那麼表中必然需要一個主鍵來作為這個實體在被抽象後的唯一辨別
  • 而主鍵不能為空就更好了解了,主鍵要是為空了那還拿什麼來唯一辨別這個實體呢?即這樣就會存在不可區分的實體了,那就和我們上面講的沖突了。
  • 是以,這個規則就叫做實體完整性,私下裡(不正式啊,隻是輔助了解與記憶)可以了解為主鍵完整性。

參照完整性

參照完整性中的參照,說白了就是資料表裡的外鍵。

舉個例子,下面有三個關系:

學生(學号,姓名)
課程(課程号,課程名)
選修(學号,課程号,成績)      

顯然,在選修關系中的學号,必須是學生表裡真正存在的學号,且選修表裡的課程号,也必須是課程表裡真正存在的課程号。這就是參照完整性的一個典型表現了。

在上面的例子中,選修表中的學号就稱為選修表的一個外碼,它對應的是學生表中的學号。并且稱選修關系為參照關系,而學生關系為被參照關系。

但是僅僅這麼說還有很多細節沒有講到,下面我們理一理外碼的定義。

首先要知道,外碼不能是這個關系(參照關系)的主碼,但是是它參照的關系(被參照關系)的主碼。

什麼意思呢,就是說學号這個屬性在學生表中是主碼,而在選修表中不是,這就稱學号是選修表中的一個外鍵(課程号同理)。

而且參照關系和被參照關系可以是同一個關系,比如:

學生(學号,姓名,班級,班長)      

在上面的關系中,班長屬性儲存的是班長的學号,那麼這就是自己參照自己了。

即“班長”是外碼,而學号是主碼。

而參照完整性,就是指如果屬性(或屬性組)F是關系R的外碼,且對應了關系S的主碼K(R和S可以是同一個關系),那麼對于R中的每個元組中的F上的值,必須滿足:

(1) 要麼F取空值

(2) 要麼等于S中某個元組的主碼的值

比如上面那個學生的例子,或許那個班級還沒有選出班長,則班長屬性為空。而如果選出了班長,那麼班長必然是某一個學生,則他的學号一定是在所有的學号中的某一個。

使用者定義的完整性

任何關系型資料庫,都一定要支援實體完整性和參照完整性。

但同時往往在不同的情況下,我們還需要一些特殊的限制條件,比如性别隻能是男或女,年齡不能超過150歲等等。

這種針對某一具體關系資料庫的限制條件稱為使用者定義的完整性,它反映某一具體應用所涉及的資料必須滿足的語意要求。

Additionally

另外,還有一種說法,說關系模型有四種完整性限制,而另外那種完整性限制即為—— 域完整性