利用演绎数据库系统实现高效可扩展的逻辑程序归纳
1. 聚合工作转移至数据库系统
为了将聚合工作转移到数据库系统,需要将归纳的理论限制为非递归理论,即子句的头部不能作为子句体中的目标出现。在这种限制下,操作步骤如下:
1. 从程序代码中移除子句的断言。
2. 将正例或反例关系作为目标,与当前子句体中的目标进行合取。
3. 在视图定义中,对保存正例或反例的属性使用 count/2 谓词。并且,在视图定义中使用 once/1 原语,确保每个示例只在子句体目标中测试一个元组的存在性。
例如,视图定义如下:
db view(view(C), C is count(A, (h(A), once(p1(A, B), p2(B)))), conn)
这些关系操作的组合产生以下关系代数表达式:
Fcount $1(r0 ▷◁$1=$1 (σ(ϵ,1)(r1) ▷◁$2=$1 r2))
其中, r0 是与 h/1 相关联的数据库关系, ϵ 表示空条件。通过扩展 MYDDAS 接口,可以将此类表达式高效地转换为 SQL。上述视图生成的 SQL 表达式如下:
SELECT COUNT (A.attr1) FROM r0 A
超级会员免费看
订阅专栏 解锁全文
13

被折叠的 条评论
为什么被折叠?



