SQLとPrologの比較
2023-10-04 15:30:59
質問
Prologを学び始めたのですが、SQL言語との理論的な違いについて疑問に思っています。
例えば
- どちらも宣言型言語
- どちらもファクト駆動型の知識データベースをサポートする
- どちらも質問形式のデータ検索をサポートします。
- どちらも機能的な依存関係をサポートします。
他に共通する点はありますか?目立った違いはありますか?
どのように解決するのですか?
ここでの(以前の)回答のほとんどは、ほとんどの人がSQLとは何か(関係論理の実装であること)、それが何を意味するか(述語論理の形式であること)を知らないという事実の反映なのです。 以下の記述は、PrologとSQLの両方について言えることです。
- これらは両方とも論理駆動型です。
- どちらも関係(Prologの論理関係)を保存、表現、利用することができる。
- 複雑な論理条件を格納し、表現することができる
- 事実(SQLのデータ)を持ち、その事実から結論を導き出すことができる。
- どちらもクエリを持っており、それは実際には同じことを意味する
- どちらもデータ(Prologではファクト)を持っており、それらを同様に使用します。
- どちらもプログラミング言語である
- どちらもチューリングコンプリートである (ただし、どちらもアクセスするのはやや難しい)
- などなど。
一般に、人々はこれらの間の等価性を意識していません。
- 事実」と「データ」は同じものです。 これは Codd の元の論文からそのまま引用したものです。
- 関係理論における "Relation" は、SQL における "Table" と同じものであり、述語論理における Relation または関係関数と同じものであり、集合論におけるタプルセットと同じものである。
- SQLのエイリアスされたテーブル式(つまりViewなど)は、Prologのルールと同じものである。
では、両者の違いは何でしょうか? 同じ概念的な領域で動作していますが、焦点は全く違う方向にあります。 Prologの用語では、SQLは主に事実と関係(セット)のエンジンであり、Prologは主に規則と推論エンジンです。 それぞれは、限られた範囲内で、もう一方を行うことができますが、 少しでも複雑さが増すと、だんだん難しくなります。 例えば、SQLで推論をすることはできますが、それはほとんど手作業で、Prologの自動的な前方推論とは全く違います。 そして、Prologでデータ(事実)を保存することはできますが、SQLのように何千人もの同時使用者と何兆もの行の保存、検索、投影、縮小のために設計されたものでは全くありません。
さらに、SQLは主にサーバー言語のパラダイムであるのに対し、Prologは主にクライアント言語のパラダイムです。
関連
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQLのSELECTでIF...THENを実行するにはどうすればよいですか?
-
[解決済み] SQL Serverで、ある日付より大きいすべての日付を照会するにはどうすればよいですか?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Oracle Trigger ORA-04098: トリガーが無効で、再バリデーションに失敗しました。
-
[解決済み] PostgreSQLのCREATE DATABASE IF NOT EXISTSをシミュレートしてみませんか?
-
[解決済み] SQLのカラム名があいまいな場合のクエリエラー
-
[解決済み] SQLの結合形式 - 入れ子になった内側join
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] SQL Serverでストアドプロシージャ内のテキストを検索する
-
[解決済み] SQL Server の VARCHAR/NVARCHAR 文字列に改行を挿入する方法
-
[解決済み] mysqldumpで特定のテーブルをスキップする
-
[解決済み] T-SQL文の接頭辞Nの意味と使うべきタイミングは?
-
[解決済み] VARCHARとCHARの違いは何ですか?