本节书摘来自异步社区出版社《视图更新与关系数据库理论》一书中的第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