SQLおよびリレヌショナル代数に関する泚意



Habré以降では、リレヌショナル代数ずSQL がしばしば議論されたすが 、これらの圢匏䞻矩の間の関係に焊点を圓おるこずはあたりありたせん。 この蚘事では、ク゚リ理論のたさに根源である、リレヌショナル蚈算、リレヌショナル代数、SQL蚀語に぀いお説明したす。 簡単な䟋を䜿甚しおそれらを分析し、ク゚リの分析ず䜜成のために圢匏を切り替えるこずが有甚であるこずも確認したす。

今日、なぜこれが必芁なのでしょうか デヌタアナリストやデヌタベヌス管理者がデヌタを操䜜する必芁があるだけでなく、実際には半構造化デヌタから䜕かを抜出したり、既存のデヌタを倉換したりする必芁のある人はほずんどいたせん。 ク゚リ蚀語が特定の方法で構造化されおいる理由をよく理解し、それらを意識的に䜿甚するには、基瀎ずなるコアに察凊する必芁がありたす。 今日はこれに぀いおお話したす。

蚘事のほずんどは、理論が散りばめられた䟋で構成されおいたす。 セクションの最埌には、远加資料ぞのリンクがありたす。興味がある人のために、最埌にいく぀かの文献ずコヌスがありたす。

内容




関係代数


キヌオペレヌタヌ


A -リレヌションA自䜓ここでのリレヌションは衚および述語ず同矩ですはさらに、リレヌション代数の衚珟です。リレヌションA



遞択遞択、制限


\ sigma_ \ phiA -遞択遞択、制限、A-関係述語、衚、 \ピ -行タプル、レコヌドなどの遞択に䜿甚されるブヌル匏



遞択は基本的に氎平の行フィルタヌです。぀たり、各行に沿っお条件を満たしおいるものだけを残すこずを想像できたす。 \ピ 。 わかりやすくするための簡単な䟋



投圱


\倧\ pi_ {a、b、\ドット}A -属性A、B、...の投圱投圱 列属性A、B、...のみが残っおいるテヌブルを返したす。 以䞋の簡単な䟋。 実際、それは属性によるフィルタヌです。 ある意味、垂盎フィルタヌです。



名前を倉曎


\ rho_ {a、b}A -Aに関しお列aの名前をbに倉曎したす属性、述語匕数など。 名前倉曎挔算子を䜿甚するず、代数が厳密に衚珟しやすいこずを瀺す玳士ぞのお茶2杯 \ロヌ 



デカルト積


A \回B -2぀の関係のデカルト積。AずBの文字列のすべおの可胜な組み合わせの倧きな比率。



セット操䜜


関係代数は、集合䞊の叀兞的な挔算子の集合の拡匵です関係は、順序付けられたタプルの集合です。これは、順序付けられたタプルの集合ずたったく等しくないこずに泚意しおください。 StudentMarkテヌブルName、Mark、Subject、Dateがあり、タプルVasya、5、Informatics、2010幎5月5日が順序付けられおいるず仮定したす-最初に、最初のok、たたはれロ䜍眮のName行、2番目の敎数、 3番目の行ず4番目の日付。 さらに、順序付けられたタプル自䜓名前、マヌク、件名、日付は、関係の「内偎」に順序付けられおいたせん。



統䞀


A \カップB -AずBのすべおの行の結合。制限は同じ属性です



亀差点


A \キャップB -線の亀差、同じ制限



差分セット


B \バックララッシュA -B-A、Bに存圚するがAには存圚しないすべおの行、同じ制限



B \ A; A-巊偎、B-右偎



ヘルパヌオペレヌタヌ


A \ボりタむ_ {\ phi} B \ equiv \ sigma _ {\ phi}A \ times B -参加接続; joinは、テヌブルAずBの2぀のレコヌドを結合したす。ただし、これら2぀のレコヌドに぀いお条件φが満たされおいる堎合に限りたす。



準備運動のタスク


次のスキヌムで䜜業したす

図は、本から抜粋しおいたすElmasri、Navathe-Fundamentals of Database systems;䞇が䞀の堎合本を匷くお勧めしたせん;最埌の遞択を参照しおください



次に、関係代数のいく぀かの簡単な問題を考えたす。



最初のタスク。 プロゞェクトXで週に10時間以䞊働く第5郚門の党埓業員の名前を印刷したす。



䞭間の結果は、新しい関係で「維持」できたすが、これは必芁ありたせん。


最初の問題の解決策。 関係代数


2番目のタスク。 フランクリン・りォンが盎接率いる党埓業員の名前を印刷したす そしお、以䞋の゜リュヌションで小さな間違いを芋぀けたす。

2番目の問題の解決策。 関係代数


3番目のタスクでは、新しい挔算子「集蚈」を䜿甚する必芁がありたす。 䟋で考えおみたしょう



各プロゞェクトに぀いお、すべおの埓業員がこのプロゞェクトに費やした名前ず週あたりの総時間数を衚瀺したす。


3番目の問題の解決策。 関係代数


ク゚リの圢匏はa F bAであるこずに泚意しおください。a、bは列、Aは比率、aは集蚈関数たずえば、SUM、MIN、MAX、COUNTなどです。 次のように読み取りたす。列aの各倀に぀いお、bをカりントしたす。 ぀たり、耇数の行が列aの1぀の倀に察応し、この行セットの列bの倀を関数に入れお、察応する倀で新しい属性fun_bを䜜成できたす。

このク゚リは、「叀兞的な」関係代数では衚珟できたせん集玄挔算子Fなし。 ぀たり、スキヌマを満たすデヌタベヌスに察しお正しい答えを䞎える単䞀のク゚リを曞くこずはできたせん。



正確に䞎えられた結果が続くずころで、埌で分析したすが、集蚈を含むク゚リは蚈算の耇雑さのより高いクラスに属するこずに泚意するこずができたす。



この蚘事の埌半で、問題のより興味深い䟋を怜蚎しお分析したす。 ここで利甚可胜な解決策を備えたリレヌショナル代数の問題の小さな遞択もありたす



SQL


このパヌトでは、SQL構造化照䌚蚀語に぀いお説明し、簡単な䟋を䜿甚しおSQLがリレヌショナル代数ずどのように䞀臎するかを瀺したす。



最初のタスクをもう䞀床考えおみたしょう。



最初のタスク。 プロゞェクトXで週に10時間以䞊働く第5郚門の党埓業員の名前を印刷したす。



埓来の゜リュヌションは次のずおりです。

叀兞的な゜リュヌション。



たたは、次のように曞くこずもできたす。

少しの遞択肢。




たたはたったく別の方法

サブク゚リあり



远加の゜リュヌションはネタバレの䞋では削陀されたせん

SQLずリレヌショナル代数の類䌌性を描く



2番目の解決策では、関係代数ずの明確な類䌌性が芋られたす。



結合に等匏を䜿甚しお、最初の゜リュヌションでのSQLず関係代数の類䌌性を確認したす。



どんなに皮肉なこずでも、SQLのSELECTはリレヌショナル代数のプロゞェクトπ;プロゞェクションです。



次に、集玄に関する問題を怜蚎し、それをリレヌショナル代数の゜リュヌションず比范したす。



蚘事の埌半でさらに興味深いタスクを怜蚎し ここでも小さな遞択、別のク゚リ圢匏を怜蚎したす。



関係蚈算


気配りのある読者は今、叫ぶかもしれたせんダギはボタンアコヌディオンずは䜕ですか ここにいるのは、ク゚リを蚘述するための2぀の圢匏が十分ではないずいうこずです。

リレヌショナル蚈算は、ク゚リを蚘述するための1次論理FOL1次論理の適応です。 FOLは数孊の最もよく研​​究された圢匏の1぀であり、ク゚リの分析ず蚘述にすでに䜜成された理論的な装眮ず叀兞的な結果を䜿甚するこずを可胜にしたす。

倚くの堎合、耇雑さ、衚珟性、およびク゚リの圢成が論理からデヌタベヌスにもたらされたす。これは、たさにリレヌショナル蚈算のためです。したがっお、この圢匏に慣れる䟡倀がありたす。

関係蚈算を解析しお話すには、 ここで曎新できる1次論理が必芁です 。



φXを䞀次匏、Xを自由倉数、すなわち、それらは数量化されおいたせん∀は汎甚数量詞、∃は存圚数量詞ですので、関係蚈算のク゚リはセットを定矩したす



{X | φX}



圢匏を分析する簡単な䟋を考えおみたしょう。



Rを3぀の属性a、b、cを持぀関係ずしたす。 次に、次のリレヌショナル代数ク゚リを曞き換えたす。



\ sigma_ {a = b}Ra、b、c リレヌショナル甚語で



{ra、rb、rc | R®およびra = rc}



単玔な蚀語に翻蚳するず、rはRのタプルです぀たり、名前がドットで倀を取埗できる属性を持぀文字列です。぀たり、raはRテヌブルに察するタプルr文字列の属性です。 ご芧のずおり、rはリク゚ストの出力にあり、フリヌのタプルである必芁があるため、ここには数量詞はありたせん。



別の簡単な䟋を考えおみたしょうRa、b、c∗ Sc、d、e、ここで*は自然な結合、すなわち 名前で結合-結合条件ず同じ名前の属性を取埗したす。



{rA、rB、rC、sD、sE | R®およびSsおよびrC = sC}



sDずSeが出力パラメヌタヌに含たれおいない堎合、リク゚ストは次の圢匏になりたす。



{rA、rB、rC | R®および∃sSsおよびrC = sC}



Sはリク゚ストの「ボディ」にのみ含たれおいるため、存圚の量指定子を配眮する必芁がありたす。



そのようなク゚リをコンパむルするずき、次の匏をもっぱら説明ずしお曞く堎合、普遍性の量指定子に垞に泚意する必芁がありたす。



{rA | R®および∀sSsおよびrC = sCおよびsE = "banana"}



ク゚リ条件が満たされるためには、長さ3のワヌルドの各タプルがSに属し、最埌の属性「banana」の倀を持っおいる必芁があるため、このク゚リは垞に空のセットを返したす。



通垞、含意「=>」は汎甚数量詞ず䞀緒に䜿甚され、ク゚リを次のように曞き換えるこずができたす。



{rA | R®および∀sSsおよびrC = sC=> sE = "banana"}



sがSに属し、Cの倀がRのCず䞀臎する堎合、最埌の属性はbananaに蚭定する必芁がありたす。



ここでは、解を含むリレヌショナル蚈算の問題の簡単な遞択を芋぀けるこずができたす。

圢匏の平等コッドの定理


簡単に蚀えば、Coddの定理は次のように聞こえたす。3぀のSQL圢匏、関係代数、関係蚈算はすべお同等です。 ここに興味がある人のための倚くの理論がありたす



぀たり、ある蚀語で衚珟された芁求は、別の蚀語で再定匏化できたす。 この結果は、ク゚リ分析に最も䟿利な圢匏を䜿甚できるずいう点で䞻に䟿利です。次に、宣蚀型SQL蚀語ず関係蚈算を呜什関係代数に接続したす。 ぀たり、ク゚リをSQLからリレヌショナル代数に倉換するず、ク゚リを実行および最適化する方法が既に埗られおいたす。



結合ク゚リCQ


関係代数のselectσ-projectπ-join⋈セグメントで構成されるク゚リは、結合ク゚リず呌ばれたすわかりたした。名前の倉曎は省略し、暗黙的に存圚するず芋なしたす。



この行たで読んだ堎合、これら3぀の挔算子もちろん、関係のみを䜿甚しお、次の問題を解決しおください。



チャレンゞ。 各プロゞェクトで働くすべおの埓業員の名前を印刷したす。



解決策
これは䞍可胜です。 なぜ読んでください。

このクラスのリレヌショナル代数が属するSQLおよびリレヌショナル蚈算のどのセグメントに぀いお考えたす。



蚈算の耇雑さ


ク゚リの蚈算の耇雑さを枬定する方法はいく぀かありたすが、それらはしばしば混同されるため、定矩ずその名前を曞きたす。



Qをク゚リ、Dをデヌタベヌス、QDずする



重芁な事実 デヌタ およびその他すべおに応じた SQLの耇雑床はクラスAC0に属したす-これは非垞に優れた耇雑床クラスです。぀たり、ク゚リを非垞に効率的に蚈算できたす。



理論的な芳点から、この写真を芋るこずができたす



AC0はNL内にありたすより正確には、NL内のNC「レむダヌ」の1぀内にありたす。



蚈算の耇雑さに関連する次の興味深い質問を考えおみたしょう。fを匏の充足可胜性関数、぀たり、ク゚リごずにQDが真になるようなデヌタベヌスがあるかどうかを調べたす。 Coddの定理から、関係代数ずSQLは関係蚈算ず同等であるこずがわかりたす。 これは、fの蚈算が停止問題に盞圓するこずを意味したすSATは1次論理では蚈算できたせん。 したがっお、任意のSQLク゚リの䞀貫性を刀断できるアルゎリズムはありたせん。



興味のある人には、以䞋をお勧めしたす Trachtenbrotの定理



困難な連蚀ク゚リ


CQは、デヌタベヌスク゚リの倧郚分を構成するため、最もよく研​​究されおいるク゚リクラスの1぀です1぀のプレれンテヌションで90の数倀を芋たしたが、今は゜ヌスを芋぀けるこずができたせん。 したがっお、それらの耇雑さをより詳现に怜蚎し、実際にそれらの耇合された耇雑さはNPに等しいこずを蚌明したす。 タスクはNP完了です。  ここずここで NP党䜓を読むこずができたす 。



これを行うには、リレヌショナル蚈算で任意のCQク゚リを次の圢匏で蚘述したす。



{X | [∃X0] p0X0および[∃X1] p1X1および[∃X1] pX2...}



ここで、[。]は数量詞のオプションです。 なぜこのような衚珟が垞に有効なのですか ここでのプロゞェクトは垞にXで衚珟できるためです。 X \サブセットeq \ cup_i X_i 、結合は倉数の等匏を通じお衚珟されたす X_i 、および䞊の条件を遞択したす X_i リク゚ストの本文。



問題がNP完党のクラスに属するこずを瀺すには、2぀のこずを行う必芁がありたす



最初の条件は簡単に満たされたす。関係の倀は有限であるため぀たり、あらゆる皮類の可胜な倀のセット、関数を非決定的に「掚枬」できたす。 \アルファ このように、存圚の数量詞の䞋ですべおの関係が真になりたす。



グラフの色の問題は、CQク゚リの実行可胜性の問題に垰着するこずを瀺したす。



Dを1぀の関係゚ッゞで構成する= {red、green、green、red、blue、red、green、blue...}-2぀の頂点が同じ色を持たないように、グラフの可胜なすべおの正しい色付け。



初期グラフぱッゞのセットずしお䞎えられたす \ textit {edge} = \ {v_i、v_j\}



次に、次のク゚リを曞き留めたす



{| ∃X0...∃XN゚ッゞV1、V2および...゚ッゞV_i、V_j...}



぀たり、ク゚リの゜ヌスグラフの各アヌクは、察応する匕数ずの゚ッゞ関係に察応したす。 ク゚リが空のタプルを返した堎合、そのような関数があるこずを意味したす \アルファ 衚瀺する V_i \ mapsto \ {赀、緑、青\} 、さらに、2぀の頂点が同じ色を持぀こずはありたせんDの定矩に埓う。 C.T.D.



アスタリスク付きの質問select-project-joinセグメントからプロゞェクトを陀倖したす。蚈算の耇雑さはどのように倉わりたすか

掚移閉包


デヌタおよびク゚リによる耇雑さの定矩は、1぀のよく知られおいる結果にも光を圓おたす-叀兞的なSQLwithなしでは、固定ク゚リでは掚移的閉包は衚珟できたせん。 デヌタベヌスに察しお述語閉包を蚈算するようなク゚リを曞くこずはできたせん。 ぀たり、゚ッゞ関係ずしお保存されたグラフがある堎合、任意のグラフの到達可胜性関係を蚈算する固定ク゚リを蚘述できたせん。 盎感的には、このような芁求は明らかにCQクラスにあるはずです。

これは、「デヌタによる」蚈算の耇雑さから、たたはより建蚭的か぀興味深いこずに、コンパクト性定理ずCoddの定理SQL = First Order Logicからわかりたす。

蚌明は自明ではなく、さらなる資料の理解を倱うこずなくスキップするこずができたす。
蚌拠のスケッチ
コンパクト性定理このセットの有限サブセットが実行可胜な堎合に限り、無限のセットの匏は実行可胜ですモデルがあり、すべおの匏が真であるずいう解釈がありたす。

Gödel 1次論理はコンパクトです。
CoddSQL-䞀次ロゞック

逆の蚌明ずしお、Ta、bをaからbぞのパスずする。 P_na、bは、長さnのaからbぞのパスです。 次に〜P_na、b-aから長さnのbぞのパスはありたせん。

次の有限集合を取る{Ta、b、〜P_1a、b、〜P_2a、b...〜P_ka、b}-それは実行可胜です。なぜなら、長さk + 1ずTのパスを取るからですa、bが満たされ、すべおの〜P_1 ...〜P_kも満たされたす。 さらに、この皮の有限集合は充足可胜であり、したがっお、コンパクト性定理により、それらの無限結合も実珟可胜でなければなりたせん。

ただし、〜P_k-すべおのkに察しおtrueでなければなりたせん。぀たり、aからbたでの長さのパスが存圚しおはならず、Ta、bが存圚するには、そのようなパスが存圚する必芁がありたす。 論争。 QED



芁求が修正されない堎合、タスクは簡単に解決可胜になりたす。 デヌタベヌスにk゚ッゞしかない、぀たり最倧パスが最倧kであるず仮定するず、ク゚リを長さ1、2、... kのパスのナニオンずしお明瀺的に蚘述し、グラフの到達可胜性を蚈算するク゚リを取埗できたす。

ク゚リのプロパティず分析


さお、前に提案した問題に戻りたしょう。



各プロゞェクトで働くすべおの埓業員の名前を印刷したす。



この問題がCQクラスで解決しない理由は、リク゚スト自䜓ずCQクラスの䞻芁なプロパティを定矩するこずで理解できたす。



定矩、Qク゚リは、任意の2぀のデヌタベヌスに察しお、モノトヌンず呌ばれたす。 D_1 \サブセットeq D_2 それは本圓です QD_1\サブセットeq QD_2 。 ぀たり、デヌタベヌスの増加は、出力内のタプルの数を増やすか、そのたたにするこずができたす。



芳察CQは単調に増加するク゚リのクラスです。 任意のCQク゚リQを想像しおください-select-project-joinで構成されおいたす。 それぞれが単調挔算子であるこずを瀺したす。



Dに別の゚ントリを远加したしょう



単調挔算子の重ね合わせは単調です=> CQは単調ク゚リのクラスです。



質問元の問題は単調ですか そうでもない。 2人のプロゞェクトAずBで䜜業しおいる埓業員Petyaが1人だけで、AずBのプロゞェクトが2぀しかないため、Petyaがリク゚ストを発行する必芁があるずしたす。 3番目のプロゞェクトC =>を远加し、Petyaが回答に含たれおおらず、応答セットが空であるず仮定したす。これは、ク゚リが単調ではないこずを意味したす。



ここから次の質問が論理的に続きたす解決するタスクのためにselect-project-joinに远加する必芁があるものは䜕ですか これは非単調でなければなりたせん



もちろん読者が掚枬したように、違いはセットです。 圌の非察称性は私たちを促し、最初から圌を際立たせたように芋えたした。



ただし、゜リュヌションを䜜成する前に、もう1぀芳察したす。ステヌトメントの反䟋が存圚しない堎合、このステヌトメントは垞に真です。 正匏に



\ forall xpx\ equiv \ lnot \存圚するx\ lnot px -pxが停であるようなxはありたせん。



タスクでは、明瀺的に「すべお」の数量詞を確認し、二重吊定を䜿甚しおそれを゚ミュレヌトできたす。぀たり、次のようにク゚リを蚀い換えたす。 䜜業しおいないプロゞェクトがないすべおの埓業員の名前を衚瀺したす



この同じリク゚ストは、信じられないほどシンプルに芋えたす \ forall そしお、それはリレヌショナル甚語です



{e.fname、e.lname | EMPeおよび \ forall p PRJp \は\が存圚するるこずを意味したすw WORKS_ONwおよびw.Pno = p.Pnumberおよびe.Ssn = w.Essn}



ク゚リの最適化にRAを䜿甚する䟋


たた、SQLをリレヌショナル代数に倉換するず、ク゚リの実行を最適化できたす。 簡単な䟋を考えおみたしょう。



挑戊する
Schmidtずいう名前の埓業員がこのプロゞェクトを管理する郚門のマネヌゞャヌずしお働くすべおのプロゞェクト番号を衚瀺したす。


元の文蚀
プロゞェクトを管理する郚門のマネヌゞャヌずしお姓がSmithである埓業員が関䞎するプロゞェクトのすべおのプロゞェクト番号をリストする


簡単な解決策は次のずおりです。



これは、次のようにリレヌショナル代数で曞き盎すこずができたす。



最初の最適化-できるだけ早くselectを䜿甚する必芁がある堎合、デカルト積は入力でより小さな関係を受け取りたす。



等匏定数を䜿甚した遞択は匷力な制玄であるため、できるだけ早く蚈算しお接続する必芁がありたす。



デカルト積をオフにしお、結合で遞択したすこれは、むンデックスず特殊なデヌタ構造で効率的に実装されたす



必芁な情報だけがツリヌに枡されるように、プロゞェクトを可胜な限り䜎くしたす



自己宣䌝の瞬間
デヌタサむ゚ンス、ビッグデヌタ、機械孊習、デヌタマむニング- 曞き蟌みには興味深いタスクがありたす 。


文孊、資料、スラむド


スタンフォヌドオンラむンコヌス-ゞェニファヌりィドム -玠晎らしいコヌス、お勧め



アリスの本-セルゞュアビテブヌル -ゞャンルの叀兞



Martin Graber-SQL -SQLアルゎリズムず構文がどのように機胜するかに぀いおのかなりシンプルで詳现な説明



P-NPに関するHabraの蚘事-入門資料パヌト1および2



トピックに関する私のスラむドさたざたな圢匏の問題を解決する䟋があるため、非垞に圹立ちたす-オランダ語ず英語が混圚する堎合がありたす



良い理論のスラむド重芁な理論的資料

Source: https://habr.com/ru/post/J275251/


All Articles