约束处理与论证语义增强
1. 约束处理
在处理查询的约束时,对于上一步生成的每一个组合,我们会创建一个规则 $R_i$,并检查该规则,看查询 $Q$ 中的约束是否能由 $R_i$ 中使用的视图里的约束推导得出。若可以,则将 $R_i$ 添加到重写结果 $R$ 中。这里的重写结果 $R$ 是包含的合取查询的并集。对于每一个规则 $R_i$,存在以下三种可能情况:
1. 情况一 :查询 $Q$ 中的约束 $C$ 能由 $R_i$ 中使用的视图里的约束推导得出。此时,直接将 $R_i$ 添加到结果 $R$ 中。
2. 情况二 :可以向 $R_i$ 中添加一组约束 $C’$,使得 $C’$ 和 $R_i$ 视图中的约束能推导出 $C$。这种情况下,将 $C’$ 附加到 $R_i$ 后,再把 $R_i$ 添加到 $R$ 中。
3. 情况三 :若上述两种情况都不满足,则丢弃规则 $R_i$。
最后,我们将所有 $R_i$ 的并集 $R$ 作为查询 $Q$ 的最小约束重写(MCR)返回。
下面通过一个简单的表格来总结这三种情况:
| 情况 | 条件 | 操作 |
| ---- | ---- | ---- |
| 情况一 | 查询 $Q$ 中的约束 $C$ 能由 $R_i$ 中视图约束推导得出 | 直接将 $R_i$ 添加到结果 $R$ 中 |
| 情况二 | 可添加约束 $C’$ 到 $R_i$,使 $C’$ 和 $R_i$ 视图约束能推导出 $C$ | 将 $C’$ 附加到 $R_i$ 后添加到 $R$ 中 |