先给出下面规则:
create rule view_rule as on select to test_view do instead select s.sname, p.pname from supplier s, sells se, part p where s.sno = se.sno and p.pno = se.pno;当检测到对关系 test_view 的 select 时,就会触发上面给出的规则。这时这句选择语句将执行规则里的动作部分,而不是从 test_view 里选择记录。
给出下面的用户对 test_view 的查询:
select sname from test_view where sname <> 'Smith';这里是当一个用户查询作用于 test_view 时,查询重写系统执行的一系列步骤。(下面的列表只是一个非常不正式的关于查询重写的算法的描述,只是用于了解基础。更多的详细描述请参考 Stonebraker et al, 1989)。
把用户查询的 where 子句里的条件部分追加到规则动作部分的查询的条件上。
select s.sname from supplier s, sells se, part p where s.sno = se.sno and p.pno = se.pno and s.sname <> 'Smith';