10

关系数据库语言和 clojuresql等逻辑编程语言在基本概念和实现方面有何异同?两者可以互换吗?prologcore.logic

4

3 回答 3

6

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

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

于 2012-06-29T20:44:19.413 回答
5

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

于 2012-06-29T12:44:46.037 回答
4

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

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

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

在关系数据库中,“关系”被具体化为表(或更灵活地,作为视图)。Prolog 最相似的方面是动态事实库,它在某些实现(SWI、Amzi)中允许为性能建立索引,非常类似于为 SQL 中的性能建立关系表的索引。

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

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

于 2012-07-01T05:31:08.480 回答