⏱ 8分 ★★★★★ 頻出:高

カーディナリティ

1対1・1対多・多対多を図で完全理解。外部キーの置き場所ルールまで

カーディナリティ=「1対1・1対多・多対多」の3パターン

カーディナリティ(多重度)は、エンティティ間で「どれだけの数が対応するか」を表します。設計の根幹です。

3つのカーディナリティ

① 1対1(1:1)
社員
── ‖ ─── ‖ ──
社員証
1人の社員は1枚の社員証を持つ。用途:セキュリティ分離・機密情報の別テーブル化
② 1対多(1:N)— 最もよく使う
顧客
── ‖ ───< ──
注文
1人の顧客が複数の注文を持てる。外部キーは「多」側(注文テーブル)に置く。
③ 多対多(M:N)— 中間テーブルが必要
学生
>── ────── ──<
講座
1人の学生が複数講座受講、1つの講座に複数学生。→「受講」テーブルで解消。

多対多の解消パターン

学生
🔑 学生ID
受講(中間)
🔑🔗 学生ID
🔑🔗 講座ID
成績
講座
🔑 講座ID
中間テーブル(受講)は両方の主キーを複合主キーとして持つ。追加属性(成績など)も自然に追加できる。

外部キーの置き場所ルール

外部キーは必ず「多」の側のテーブルに置く。
1:N → N側に外部キー
M:N → 中間テーブルに両方の外部キー
1:1 → どちらか一方(任意参加の側に置くことが多い)
🧠 確認クイズ
Q1. 1対多(1:N)の外部キーはどちらのテーブルに置くか?
Q2. 多対多を解消する際に作成するのはどれか?
Q3. 学生と講座が多対多のとき、受講テーブルの主キーとして適切なのはどれか?