リレーショナルモデル — 表と表を「キー」でつなぐ
現実のデータは「顧客」と「その注文」のように互いに関係し合っています。リレーショナルモデルは、データを複数の表に分け、主キーと外部キーという“合言葉”で表どうしをつなぎます。全部を1つの表に詰め込むと何が困るのか、キーをたどるとは何かを、クリックしながら確かめます。
1. 行を1つに特定する鍵 — 主キー
表の各行を「これだ」と1件に特定するための列を主キー(primary key)と呼びます。顧客IDのように重複せず、空(NULL)でない値です。名前だけだと同姓同名で区別できませんが、主キーがあれば必ず1行に定まります。
下の表で行をクリックしてみてください。検索キーを「主キー(ID)」にすると必ず1行に確定します。「名前」に切り替えて同姓同名(田中さんが2人)をクリックすると、特定できないことが分かります。
2. 表と表をつなぐ — 外部キー
注文の表に顧客の名前や住所を丸ごと書くと、同じ顧客の情報が何度も重複します。代わりに注文表には顧客ID(=顧客表の主キー)だけを持たせます。これが外部キー(foreign key)。注文.顧客ID が 顧客.ID を「参照」しているのです。
下で注文の行をクリックすると、外部キーの矢印をたどって、対応する顧客の行へ光の玉が走ります。番号をたどれば、実体(顧客の情報)に必ずたどり着けます。
3. キーでつないで1枚にする — 結合(JOIN)
見たいときには、外部キーをたどって両方の表の情報を1枚に組み合わせられます。これが結合(JOIN)です。各注文に、その顧客IDが指す顧客の名前をくっつけて、読みやすい表を作ります。
下のボタンで結合を実行。各注文が対応する顧客を見つけ、合体した行ができていく様子を見てください。
4. 壊さないための約束 — 参照整合性
外部キーが指す先は必ず存在しなければなりません。もし注文が参照している顧客をうっかり消すと、その注文は宛先を失った“みなしご(orphan)”になってしまいます。DBはこれを防ぎます — 参照されている親の削除を「拒否」するか、子ごと「カスケード削除」するかのどちらかで。
下で顧客を選んで削除実行してみてください。注文を持つ顧客を消そうとすると、拒否モードでは止められ、カスケードモードでは関連する注文も一緒に消えます。注文を持たない顧客(山田さん)は普通に削除できます。
5. まとめ — 表を分けてキーでつなぐ
- 主キー:各行を一意に識別する列。重複せず空でない。
- 外部キー:別の表の主キーを指す列。実体は1か所に置き、参照は番号で。重複が消える。
- 結合(JOIN):キーをたどって複数の表を1枚に組み合わせる“見え方”。
- 参照整合性:参照先は必ず存在。親の削除は「拒否」か「カスケード」で守る。