关系数据库语言和逻辑编程的相似程度如何



关系数据库语言sql与逻辑编程语言(如prolog和Clojure的core.logic)在基本概念和实现方面有什么异同?两者可以互换吗?

数据日志查询语言捕获相似性。这是逻辑和数据库之间连接的动机和更好的解释。这段摘录应该可以解决您的问题:

尽管如此,将Prolog和关系数据库相结合,还是显示出一些 不和谐。Prolog中的事实和规则按总顺序组织 Prolog程序的语义取决于这个顺序。在 相反,数据库中的关系被视为 元组和查询结果独立于任何物理 次序。Prolog程序的处理是面向元组的,而 关系数据库是面向集的。Prolog提供程序 诸如剪切谓词之类的功能,允许程序员控制 推理过程。Prolog程序的评估顺序是 预先确定,而关系演算中的表达式纯粹是 声明性,实际评估留给查询处理器 这可能会出于优化目的重新排列查询。优化 的查询对于关系数据库的成功至关重要。这 Prolog引擎的过程性质留下了负担 与程序员一起优化。

一个重要的区别是SQL只是图灵完成了一些非常疯狂的技巧,这些技巧在ANSI SQL 99之前是不可能的。Prolog是图灵完备的,因此是一种通用编程语言。

尽管SQL和Prolog都演示了一阶逻辑概念,但都不是谓词演算的完整实现。

Prolog和其他逻辑编程语言严重依赖于递归,无论是数据结构的定义还是谓词。

SQL本身不允许递归,并且存储过程的引入对此类调用的嵌套深度进行了限制。 例如。SQL Server 2000 到 2012 最多允许 32 个嵌套调用。

在关系数据库中,"关系"被具体化为表(或者更灵活地,被化为视图)。 Prolog最相似的方面是动态事实库,在某些实现(SWI,Amzi)中,它允许对性能进行索引,这与SQL中关系表的性能索引非常相似。

尽管SQL RDBMS旨在有效地处理比Prolog实现通常需要的更大的数据集,但Prolog至少可用于对系统设计的数据库和流程方面进行原型设计。

请参阅此处查看 2005 年的论文,该论文探讨了使用 Prolog 推理扩展关系数据库。

最新更新