キャプチャするSQLの拡張


20

Immermanによると、SQLクエリに関連付けられた複雑度クラスは、(一次クエリとカウント演算子)の安全なクエリのクラスです。SQL安全なクエリをキャプチャします。(換言すれば、すべてのSQLクエリはで複雑性を有する、そして内のすべての問題 SQLクエリとして表現することができます。)Q F O C O U N T Q F O C O U N T ))Q(FO(COUNT))Q(FO(COUNT))Q(FO(COUNT))

この結果に基づいて、理論的な観点から、効率的に解決できるがSQLでは表現できない興味深い問題が数多くあります。したがって、まだ効率的なSQLの拡張は興味深いようです。だからここに私の質問があります:

キャプチャするSQL拡張機能業界で実装および使用)があり(つまり、すべての多項式時間の計算可能なクエリを表現でき、他のクエリは表現できません)。P

3つの条件をすべて満たすデータベースクエリ言語が必要です。SQLを拡張してをキャプチャする拡張機能を定義するのは簡単です。しかし私の質問は、そのような言語が実際的な観点から理にかなっているかどうかであるので、実際に使用されている言語が欲しいです。これが当てはまらず、そのような言語がない場合、実用的な観点からそのような言語を面白くしない理由があるかどうかを知りたいですか?たとえば、実際に発生するクエリは、通常、そのような言語を必要としないほど単純ですか?P


1
@JD、申し訳ありませんが、あなたのコメントに基づいて、私はあなたが質問を理解していないと思います。質問は明確に定義されています。言語による複雑度クラスの取得は、標準的な用語です。(明確に定義されていないのは、言語がクエリ言語であるべきという私の好みですが、それは好みに過ぎず、その好みのない人がいなければそうではないということを伝えました。)
カベ

1
@ Shog9、私はすでにそれに答えました。JDは質問を理解せず、キャプチャの意味すら知らず、Pをキャプチャする言語が定義上チューリング完全になり得ないことを認識していません。彼はそれが好きなように述べられることを期待しており、私は通常の記述的な複雑さの用語とクエリ言語の複雑さでそれを述べ、さらに彼にこれらを説明しました。ここで明確でないものは何ですか?
Kaveh

1
@ Shog9、動機は記述的複雑さから来ています。業界で使用されているPをキャプチャするSQLを拡張する言語があるかどうかを確認しようとしています。元のSQL言語は、Immermannの結果が示すように、理論的な観点から、多くの効率的な計算を記述することは不可能です。一方、言語の効率を維持したい(つまり)。そのような言語はありますか?(これらはおそらく記述の複雑さに精通している人々にとって明らかだと思います)。P
Kaveh

4
@ Shog9:この質問がモデレーターの介入を必要とし、閉じられた理由がわかりません。私はこれが本当の質問であると言うほど複雑な記述に十分満足しています(おそらくTCSに適しているかもしれませんが、少し難しい質問です)。
アレックス10ブリンク

1
私は別の質問は(も近い票を持っていた)だけでなくとして閉じてしまった気づいたように、私はそれについてのメタの質問を:meta.cs.stackexchange.com/questions/97/...
アレックス10ブリンク

回答:


5

主な質問については、Martin Groheによるこの短い調査をお勧めします。


実際に必要なクエリは、通常、より強力な言語を必要としないほど単純ですか?

一般的なクエリ言語(推移閉包、算術演算子、カウントなど)にかなりの量の拡張機能が追加されていることを考えると、これはほとんどの場合に当てはまると思います。これは、比較的単純なWebサイトや他のアプリケーションのフリーランス開発者として仕事をした人の観点から来ているので、より大きな産業/より大きなデータベースでのSQLの実際の使用についてはわかりません。

まれに、より強力な言語が必要になる場合がありますが、ソフトウェア開発者は、クエリ(C ++やjavaなど)ではなく、アプリケーションを作成する言語を使用してそれらを処理していると思います。


3

まず、SQLの表現力は見た目ほど明確ではありません。SQLの集約、グループ化、および算術機能は、非常に微妙な影響を及ぼします。先験的に、これらの機能を使用した代数演算子のエンコードによって、実際にSQLで到達可能性を表現できる可能性があります。これは、実際には「ローカル」であるSQL-92の場合ではないことがわかります

これは、PTIMEをキャプチャするためにSQL-92に拡張機能が必要であり、結果の言語を「非ローカル」にできる拡張機能が必要であることを意味します。

しかし、可能規則正しい構造と現実的にSQL-92は、その均一な暗示する到達可能性を表現できないことを証明し、算術限定で、非常に困難であることがありそうです。(SQL-92のデータ型には常に自然な線形順序が存在するため、基礎となる構造が順序付けられていると仮定できると主張できます。)TC0NLOGSPACE

その後、SQL:1999(SQL3)に再帰が含まれていたため、ランドスケープが再び変更されました。したがって、SQL:1999は、少なくともカウントを伴う固定小数点ロジックと同じくらい表現力があるようです(ただし、順序の問題を含め、詳細はやはりややこしいかもしれませんが)。新しいコンストラクトがPTIMEをキャプチャするために必要なロジックをより表現力豊かにしたかどうかはわかりませんが、これを確立するにはいくつかの研究が必要です。その間、2003年2006年2008年2011年にさらなる改訂が行われました。(ISO文書であるため、ドラフトのみが自由に利用できます)。これらの改訂により、XQueryをSQLクエリの「一部」として許可するなど、多数の新機能が追加されました。私の推測では、「SQL」はPTIMEをキャプチャするのに必要な表現よりも表現力が豊かですが、そうするために必要なエンコーディングには、実際のシステムではサポートされない大規模でかなり不自然なクエリが必要になる場合があります。

したがって、PTIMEを正確にキャプチャして、あいまいな方法で質問に答えるSQLの産業拡張がないという証拠があると思います。つまり、産業用拡張機能はかなり強力であり、すでにPTIMEをオーバーシュートしている可能性があります。SQL:1999が少なくともPTIMEをキャプチャするのに十分強力であることが真実である場合、「SQL」がSQLに先行するバージョンを意味するために「SQL」を定義する必要があるため、質問で「SQL」が実際に何を意味するのかも明確ではありません: 1999。

最後に、PTIMEをキャプチャするロジックの検索に関するGroheの調査(Janomaも言及)は、言語の一部として線形順序がない限り、PTIMEをキャプチャするのが難しいだけでなく、そのようなロジックが存在しないという証拠も示されます意味します。PNP


András、特にSQL3が「再帰」をサポートしていることに言及してくれてありがとう、私はそれについて知られていることを確認しなければなりません。:)
カベ

追伸:読者のために複雑さの理論とPをキャプチャするロジックとの関係の議論を含めたと思いますが、補足として、また説明のために追加します。Immermanが結果でそれを使用したという意味でSQL結果は、SQLの正確な定義を使用します。複雑さのクラス分離とPをキャプチャするロジックの問題との関係については知っていますが、それらが私の質問への答えに影響を与えるとは思わない
-Kaveh

私の質問への答えは、正(または負)することができ、それらはNP対PとPのため不変ロジックの存在にすべての可能な答えと一致するであろう
Kaveh

Kaveh、ImmermanのようにSQLを定義した場合、既存の産業用拡張機能は弱すぎるか、または強力すぎるように見えるため、答えは「おそらくノー」だと思います。しかし(知る限り)、これに対する厳密な証拠はありません。おそらく拡張のいくつかのサブセットが正確PTIMEをキャプチャしますが、私は確かに、私はそれを分離しようとしているスペックを通じてトロールしたいと思いませんよ...
アンドラス・サラモン

-1

PPPPP

P=NPP=NPPPNPC

PNP

P=NP

おそらく実際の目的では存在しませんが、確かに存在し、構築可能で実装可能です。特定の単項ステップまでチューリングマシンをシミュレートできるものでその言語を定義できます。IE、P-complete問題を解決できます。ただし、このようなものを構築する場合、「単項数のステップを与える」制限を除き、チューリング完全です。SQLのような言語では、安全なクエリのみに制限する非常に奇妙な方法です。ステップが何らかのテーブルのレコードである場合、これを行うことができますが、これは実際の目的にとって価値のあるものには見えません。


2
FOAC0

1
NPPPFO(LFP)P
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.