差分

ナビゲーションに移動 検索に移動

利用者:Nayuta Ito/プロジェクト・SQL

2,863 バイト追加, 2021年2月21日 (日) 17:36
本当は\( C_3 \)の元を格納するテーブル(__元ID__, 元)も必要でしょうけど...まあよいでしょう。
##### タプルとは、\( \{ (S_1, T_1), \cdots, (S_n, T_n) \} \)の形の集合である。
[ここに関係表のvisualizationを挿入]関係表はその名前の通り表の形で表されることが多い。以下でも、関係表が表であるかのように記述することがあるが、もちろん関係表は上の定義により与えられるZFCで定義された集合である。
<table border="1">
<caption>\( N \)</caption>
<tr bgcolor = "bisque"><td>\( S_1 \)</td><td>\( \cdots \)</td><td>\( S_n \)</td></tr>
<tr><td>\( T_{11} \)</td><td>\( \cdots \)</td><td>\( T_{1n} \)</td></tr>
<tr><td>\( T_{21} \)</td><td>\( \cdots \)</td><td>\( T_{2n} \)</td></tr>
<tr><td>\( \ \ \vdots \)</td><td>\( \ddots \)</td><td>\( \ \ \vdots \)</td></tr>
<tr><td>\( T_{m1} \)</td><td>\( \cdots \)</td><td>\( T_{mn} \)</td></tr>
</table>
 
ただし、上の表において\( D = \{ \{ (S_1, T_{11}), \cdots, (S_1, T_{1n}) \}, \cdots, \{ (S_1, T_{m1}), \cdots, (S_1, T_{mn}) \} \} \)である。\( R \)は\( N \)を除く表全体に対応し、\( D \)は\( T_{ij} \)からなる表本体に対応する。
 
例えば、巡回群\( C_3 \)の演算表は次のような関係表として格納される:
 
<table border="1">
<caption>\( MultTableOfC3 \)</caption>
<tr bgcolor = "bisque"><td>\( \mathrm{arg1} \)</td><td>\( \mathrm{arg2} \)</td><td>\( \mathrm{product} \)</td></tr>
<tr><td>\( 0 \)</td><td>\( 0 \)</td><td>\( 0 \)</td></tr>
<tr><td>\( 0 \)</td><td>\( 1 \)</td><td>\( 1 \)</td></tr>
<tr><td>\( 0 \)</td><td>\( 2 \)</td><td>\( 2 \)</td></tr>
<tr><td>\( 1 \)</td><td>\( 0 \)</td><td>\( 1 \)</td></tr>
<tr><td>\( 1 \)</td><td>\( 1 \)</td><td>\( 2 \)</td></tr>
<tr><td>\( 1 \)</td><td>\( 2 \)</td><td>\( 0 \)</td></tr>
<tr><td>\( 2 \)</td><td>\( 0 \)</td><td>\( 2 \)</td></tr>
<tr><td>\( 2 \)</td><td>\( 1 \)</td><td>\( 0 \)</td></tr>
<tr><td>\( 2 \)</td><td>\( 2 \)</td><td>\( 1 \)</td></tr>
</table>
 
関係表では縦軸と横軸を取ることができず、横軸しか存在しないため、群の演算表を関係表にする場合、群の位数の2乗の行数が必要となる。
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_I \)が一元集合であるとき、その集合をその元と同一視し、「\( S_J \)は\( S_{i_1} \)に関数従属している」のように表現することがある。\( S_J \)、もしくは\( S_I \)と\( S_J \)の両方が一元集合であるときも同様の同一視を行う。
===スーパーキー===
ではない(この制約を'''非NULL制約'''という)ものを関係表ごとに一つ固定し、それを'''主キー'''と呼ぶ。主キーになり得る候補キーであって主キーに選ばれなかったものを'''代理キー'''という。
関係表は多くの場合何らかの表として使われる関係表の(だから関係「表」というのである多くの場合左端の)。表に行の通し番号が与えられている場合、その通し番号のみからなる一元集合が主キーとなる場合が多い。列に行の通し番号が保存されている場合、その通し番号のみからなる一元集合が主キーとなる場合が多い。 また、主キーを明示するため、関係スキーマを列挙する際(表による表現も含む)に、主キーの元に下線を引くことがある。 上の\( C_3 \)の演算表の例では、どの2列の組も主キーになりうる。しかし、主キーは「行を一意に識別するためのデータ」という意味合いがあるため、\( \{ \mathrm{arg1}, \mathrm{arg2} \} \)が主キーに選ばれる。この場合、関係スキーマは $$ \underline{\mathrm{arg1}}, \underline{\mathrm{arg2}}, \mathrm{product} $$ と表現される。データベースエンジニアは数学者ではないので、集合を表す\( \{ \} \)は一般的に使用されない。
===第1正規形===
Wikiいけめん
217

回編集

案内メニュー