天天看點

《視圖更新與關系資料庫理論》——1.5 規則至上

本節書摘來自異步社群出版社《視圖更新與關系資料庫理論》一書中的第1章,第1.5節,作者:【美】c.j. date(達特),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

現在我們假設使用者隻能看到視圖ls(而不是視圖nls和基表s)。可以想見這個使用者仍然希望可以将視圖ls當作基表一樣操作。當然,這個使用者知道表的語義。

ls:供應商sno是已經簽約的,名稱為sname,狀态值為status且位于城市city中(london)。

并且了解如下限制。

{sno}是ls的鍵。

ls中的每一行city值為london。

很明顯,這個使用者無法向這個表插入新行,也不能更新表中的供應商編碼,因為這樣的操作很可能違反限制規則,而使用者并不知道這些限制(必須不知道)[7]。但是如果ls是一個基表,那麼使用者完全可以插入新行。否則,這張表将永遠是空的!那麼,前面所說的事情不就違背“可交換性原則”了嗎?

事實并非如此。盡管這個特定的使用者不被允許向這個表插入新行,但并不是所有使用者都不可以。這個使用者不能插入新行到ls的基本原因是他隻是管中窺豹,無法看到全局。對比來看,我們在上一部分所講的使用者可以同時看到ls和nls,它們合起來等價于表s,是以該使用者相當于能夠看到全局,也由此他就可以向ls(和/或是nls)插入新行。但是隻能看到ls的使用者等于隻能看到一部分資訊,是以一些特定操作是不允許他執行的。

最後,值得指出的是即便我們遇到的資料格式都是基表,使用者也會遇到類似的情況。也就是說,即使涉及的表都是基表,有時某些使用者也會被禁止在某些特定的表上執行某些特定的更新。舉個例子,讓我們想想隻能看到基表sp,但是看不到基表s的使用者。他會和隻能看到表ls的使用者一樣,無法執行插入操作,因為這樣的操作同樣可能違反使用者并不知道的(必須不知道)限制規則,這個限制就是從sp到表s和p的外鍵限制。