<font size="6"><b>このプロジェクトは凍結しました。</b></font>副問合せとかEXISTSとかのSELECTが外側の束縛変数参照するやつどうやって実装すればいいんですか集合関数とか何をどうやって束縛してるんですか...
この記事では、SQLのインタプリタをZFCで実装する。ZFCはC言語の亜種ではない。<s>この記事では、SQLのインタプリタをZFCで実装する。</s>実装しません。複雑すぎました。多分理論上は可能なんじゃないかと思います。ZFCはC言語の亜種ではない。
==導入==
##### タプルとは、\( \{ (S_1, T_1), \cdots, (S_n, T_n) \} \)の形の集合である。
[ここに関係表のvisualizationを挿入]
SQLの実装には直接必要ないが、正規形の話をしたくなったので書く。その前に関数従属性の話をしないといけない。SQLの実装には直接必要ないが、正規形の話をしたくなったので書く。その前に関数従属性の話をしないといけない。それに加えて主キーの話をしないといけない。その前に候補キーの話をしないといけない。その前にスーパーキーの話も入れておこう。
===関数従属性===
$$ (S_{i_1} = S'_{i_1} \wedge \cdots \wedge S_{i_v} = S'_{i_v}) \wedge ( S_{j_1} \neq S'_{j_1} \vee \cdots \vee S_{j_w} \neq S'_{j_w} ) $$
===スーパーキー===
\( S \)がその部分集合\( A \)に関数従属しているとき、\( A \)をその関係表の'''スーパーキー'''という。その定義から、\( S \)自身はスーパーキーである。
===候補キー===
\( S \)の部分集合\( A \)がスーパーキーであるが、どんな\( A \)の真部分集合もスーパーキーではないとき、\( A \)をその関係表の'''候補キー'''という。
===主キー===
候補キー\( A = {A_1, \cdots, A_v} \)であって、
$$ \exists T_A \in T, \exists w < v, (A_w, t) \in T_A \wedge t = \mathrm{NULL} $$
ではない(この制約を'''非NULL制約'''という)ものを関係表ごとに一つ固定し、それを'''主キー'''と呼ぶ。主キーになり得る候補キーであって主キーに選ばれなかったものを'''代理キー'''という。
関係表は多くの場合何らかの表として使われる(だから関係「表」というのである)。表に行の通し番号が与えられている場合、その通し番号のみからなる一元集合が主キーとなる場合が多い。
===第1正規形===