本節書摘來自異步社群出版社《視圖更新與關系資料庫理論》一書中的第1章,第1.3節,作者:【美】c.j. date(達特),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
現在,為了確定之前章節提到的限制在後續的某些特定更新更新完成後依然有效,就需要進行相應的補償性操作。通常情況下,補償性操作也稱為補償操作,是一種由資料庫管理系統自動執行的額外更新(不包括使用者自行請求的更新),其目的就是為了避免完整性沖突的發生[5]。級聯删除就是一個典型的例子[6]。事實上,有一點我們要明确,對于現在手上這個例子來說,我們很需要在進行delete操作時應用級聯方式。具體來說,不管是從表ls,還是表nls中,删除資料都需要級聯以使得表s中相同的資料行也能夠被删除。于是我們可以設想一些補償性操作,其實就是級聯删除規則,觀察以下僞代碼。
同樣,從表s中删除行也需要級聯以使表ls或表nls中同樣的行一并被删除。
這裡我要特别提醒的是,任何想對并不存在的行進行删除的嘗試都是無效的,是以我們可以将圓括号内的表達式直接替換為d。不過從定義方式的角度來講,圓括号内的定義表達方式更好,因為它們對變量的定義更加具體明确。
類似地,我們也需要為insert操作設定補償性操作,即級聯插入規則。
update s
set city = ‘oslo’
where sno = ‘s1’ ;
update ls