【发布时间】:2011-07-01 10:04:22
【问题描述】:
我还在思考如何将Datalog程序的递归转换成SQL,比如
P(x,y) <- Q(x,y).
Q(x,y) <- P(x,z), A(y).
其中A/1 是一个EDB 谓词。这就是P 和Q 之间的相互依赖关系。对于较长的查询,如何解决这个问题?
另外,有没有完全实现翻译的系统?如果有,请问我可以参考什么系统或哪篇论文?
【问题讨论】:
-
这个例子应该更正了。注意变量 y 没有出现在第二条规则的前提中,尽管它被用在了头部。数据记录是restricted so that all programs terminate。您是在询问消除递归以获得(可能)单个 SQL 查询等效项的方法,还是在考虑在 SQL 上下文中实现递归,这可能(有严重限制)使用存储过程?
-
@hardmath:抱歉,错字...谢谢指正。是的,我想用SQL实现递归,可以吗?
-
这是可能的,但我们可能会受到直接递归深度的限制。例如,MS SQL Server 2008 限制 the nesting depth of stored procedure calls to 32。演示一个概念可能就足够了,但不适用于生产应用程序。请注意,MS SQL Server 确实允许调用外部编码(扩展存储过程),其中调用的嵌套不受监控。
-
您可能对递归的间接方法感兴趣,其中重复应用“数据记录”规则以推断新结果,并且这些可以插入到一个或多个表中,直到没有新的推导可能。
-
@hardmath:这就是我的想法!递归将在程序上完成,而不是在 SQL 上......但是,如果存在非平凡的依赖关系,这对我来说仍然如此难以管理......
标签: sql translation datalog