1. ホーム
  2. sql

SQLとPrologの比較

2023-10-04 15:30:59

質問

Prologを学び始めたのですが、SQL言語との理論的な違いについて疑問に思っています。

例えば

  • どちらも宣言型言語
  • どちらもファクト駆動型の知識データベースをサポートする
  • どちらも質問形式のデータ検索をサポートします。
  • どちらも機能的な依存関係をサポートします。

他に共通する点はありますか?目立った違いはありますか?

どのように解決するのですか?

ここでの(以前の)回答のほとんどは、ほとんどの人がSQLとは何か(関係論理の実装であること)、それが何を意味するか(述語論理の形式であること)を知らないという事実の反映なのです。 以下の記述は、PrologとSQLの両方について言えることです。

  • これらは両方とも論理駆動型です。
  • どちらも関係(Prologの論理関係)を保存、表現、利用することができる。
  • 複雑な論理条件を格納し、表現することができる
  • 事実(SQLのデータ)を持ち、その事実から結論を導き出すことができる。
  • どちらもクエリを持っており、それは実際には同じことを意味する
  • どちらもデータ(Prologではファクト)を持っており、それらを同様に使用します。
  • どちらもプログラミング言語である
  • どちらもチューリングコンプリートである (ただし、どちらもアクセスするのはやや難しい)
  • などなど。

一般に、人々はこれらの間の等価性を意識していません。

  1. 事実」と「データ」は同じものです。 これは Codd の元の論文からそのまま引用したものです。
  2. 関係理論における "Relation" は、SQL における "Table" と同じものであり、述語論理における Relation または関係関数と同じものであり、集合論におけるタプルセットと同じものである。
  3. SQLのエイリアスされたテーブル式(つまりViewなど)は、Prologのルールと同じものである。

では、両者の違いは何でしょうか? 同じ概念的な領域で動作していますが、焦点は全く違う方向にあります。 Prologの用語では、SQLは主に事実と関係(セット)のエンジンであり、Prologは主に規則と推論エンジンです。 それぞれは、限られた範囲内で、もう一方を行うことができますが、 少しでも複雑さが増すと、だんだん難しくなります。 例えば、SQLで推論をすることはできますが、それはほとんど手作業で、Prologの自動的な前方推論とは全く違います。 そして、Prologでデータ(事実)を保存することはできますが、SQLのように何千人もの同時使用者と何兆もの行の保存、検索、投影、縮小のために設計されたものでは全くありません。

さらに、SQLは主にサーバー言語のパラダイムであるのに対し、Prologは主にクライアント言語のパラダイムです。