首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Datalog到SQL的转换

Datalog到SQL的转换
EN

Stack Overflow用户
提问于 2011-07-01 18:04:22
回答 3查看 3.8K关注 0票数 5

我还在考虑如何将Datalog程序的递归性转换为SQL,例如

代码语言:javascript
复制
P(x,y) <- Q(x,y).
Q(x,y) <- P(x,z), A(y).

其中A/1是EDB谓词。这就是说,PQ之间存在着相互依赖的关系。对于较长的查询,如何解决此问题?

此外,有没有完全实现翻译的系统?如果有的话,我想知道我可以参考哪一个系统或哪一篇论文?

EN

回答 3

Stack Overflow用户

发布于 2011-07-05 22:07:51

如果你采用一种“列表”以前的结论和正向链推理的方法来推断新的结论,则不需要递归的“深度”。

请记住,Datalog需要对规则和变量进行一些限制,以确保有限的终止,从而确保有限多的结论。例如,变量必须具有有限范围的可能值。

假设您的示例引用的是常量,而不是变量:

代码语言:javascript
复制
P(x,y) <- Q(x,y).
Q(x,y) <- P(x,z), A(y).

一个问题是,您希望将A/1实现为扩展存储过程或外部代码。为此,我建议对所有可能的参数(数量有限)列出调用A的所有结果。毕竟,这些都是您的系统的结论(可证明的陈述)。

一旦完成,正向链接推理就会以迭代而不是递归的方式进行。在每个步骤中,考虑每个规则,如果它产生了新的结论,则将其应用于先前获得(提交)的结论的前提(右侧)。如果在当前步骤中没有规则生成新的结论,则停止。证明过程已经完成。

在您的示例中,证明在引用所有A事实后停止,因为没有足够的结论来应用这两条规则中的任何一条来获得新的结论。

票数 1
EN

Stack Overflow用户

发布于 2019-10-22 07:53:01

一种可能的方法是在SQL中使用递归CTE,它提供了传递闭包的功能。关系代数+传递闭包= Datalog。

票数 0
EN

Stack Overflow用户

发布于 2022-02-12 18:57:49

Logica做了这样的事情。它将类似数据记录的语言翻译成Google BigQuery、PostgreSQL和SQLite的SQL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6546502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档