小编典典

比较SQL和Prolog

sql

我已经开始学习Prolog,并想知道与SQL语言的理论差异。

例如:

  • 两者都是声明性语言
  • 两者都支持事实驱动的知识数据库
  • 都支持问题式的数据检索
  • 都支持功能依赖

还有其他共同点吗?有什么显着差异吗?


阅读 173

收藏
2021-04-15

共1个答案

小编典典

这里的大多数(较早的)答案反映了以下事实:大多数人不知道什么是SQL(它是关系演算的实现)或它的含义(它是谓词逻辑的一种形式)。以下语句对于Prolog和SQL都是正确的:

  • 他们都是逻辑驱动的
  • 他们可以存储,表达和使用关系(Prolog中的逻辑关系)
  • 它们既可以存储也可以表达复杂的逻辑条件
  • 他们都有事实(SQL中的数据)并且可以从这些事实中得出结论
  • 他们都有疑问,实际上是同一回事
  • 他们都有数据(Prolog中的事实)并类似地使用它们
  • 他们都是编程语言
  • 它们都是图灵完整的(尽管在它们两个中都很难访问)
  • 等,等等。

通常,人们并不了解它们之间的这些对等关系:

  1. “事实”和“数据”是同一件事。这直接来自Codd的原始论文。
  2. 关系理论中的“关系”与SQL中的“表”相同,与谓词逻辑中的关系或关系函数相同,并且与“集合论”中的元组集相同
  3. SQL中的别名表表达式(即,视图等)与Prolog中的规则相同。

那么他们有什么区别呢?尽管它们跨越相同的概念领域,但它们的重点却完全不同。用Prolog术语来说,SQL主要是事实和关系(set)引擎,而Prolog主要是规则和推理引擎。每个人都可以在有限的范围内做其他事情,但是随着复杂度的微小增加,它变得越来越困难。例如,您可以使用SQL进行推理,但实际上它几乎完全是手动的,根本不像Prolog的自动前向推理那样。是的,您可以在Prolog中存储数据(事实),但是SQL根本不是为“存储,检索,投影和减少具有成千上万同时用户的数以百万计的行而设计的”数据。

另外,SQL主要是服务器语言范例,而Prolog主要是客户端语言范例。

2021-04-15