主キー・外部キーとは(全体像)
データベースの表では、どの行がどれなのかを見分ける鍵が必要になる。それが主キー。そして、別の表とデータをつなぐ鍵が外部キーだよー。
身近にたとえると、学校の出席番号。出席番号は、クラスの中で一人ひとりを見分ける番号(主キー)。そして「係名簿」が出席番号で生徒を指していれば、それが外部キー(別の名簿から本人を参照する鍵)なのー。
押さえるのは、主キーは空っぽ(NULL)にできず、1つの表に1つだけということ。出席番号が無い人がいたら見分けられないよね、というイメージだよー。
詳しく:主キーの決まりと外部キーの削除動作だけ覚えれば戦える
ここが記事の心臓部。まず主キーと外部キーの違いを見ていこーね。
主キーと外部キー
| 種類 | 役割 | 大事な決まり |
|---|---|---|
| 主キー(PK) | 表の中で1行を見分ける | NULL不可・1表に1つ |
| 外部キー(FK) | 別の表の主キーを参照する | データのつながりを保つ |
ここで一番のひっかけが「主キーは1つの表にいくつも作れる」という誤解。主キーは1つの表に1つだけ。ただし、複数の列をまとめて1つの主キーにすること(複合キー)はできるよー(あくまで全体で1つ、ということ)。
次に、外部キーの削除・更新のときの動作。参照先(親)が消えたとき、参照している側(子)をどうするかを決めておく。
外部キーの主な動作
| 動作 | 親が消えたとき子はどうなる |
|---|---|
| CASCADE | いっしょに削除される(連鎖) |
| RESTRICT/NO ACTION | 子がいると親を削除させない |
| SET NULL | 子の参照を空っぽ(NULL)にする |
ここで2つめのひっかけが「CASCADEは安全」という思い込み。CASCADEは便利だけど、親を消すと子も次々に消える(連鎖削除)ので、思わぬデータまで消えることがある。便利さと危なさはセットだよー。
わかりやすく言い換えると
要するに、出席番号と名簿でイメージするとラクだよー。
①主キー … 出席番号(一人ひとりを見分ける・空欄はダメ・1つだけ)
②外部キー … 別の名簿が出席番号で本人を指す(つながりを保つ)
③CASCADE … 本人を名簿から消すと、その人の係の記録も連鎖で全部消える
つまり、「主キーはNULL不可・1表に1つ」「CASCADEは連鎖削除で要注意」、この2点が試験の急所なのー。
試験のツボ
🔴 一番出る:主キーの決まり
①表の中で1行を見分ける鍵で、NULL(空っぽ)にできない
②1つの表に1つだけ(複数の列をまとめた複合キーも、全体で1つ)
🔴 次に出る:外部キーと参照整合性
①外部キーは別の表の主キーを参照して、データのつながりを保つ
②削除・更新時の動作にCASCADE/RESTRICT/SET NULLなどがある
🟡 押さえると安定:CASCADEの注意点
①CASCADEは親を消すと子も連鎖で削除される
②便利だが、思わぬデータまで消えることがあるので注意
よくある間違い
①「主キーは1つの表にいくつも作れる」→ ✗ 主キーは1表に1つだけ。複数の列をまとめても、全体で1つの主キー(複合キー)。
②「主キーは空っぽ(NULL)でもよい」→ ✗ 主キーはNULL不可。空だと行を見分けられない。
③「CASCADEは連鎖削除が起きないので安全である」→ ✗ CASCADEは親を消すと子も連鎖で削除される。思わぬ削除に注意。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(主キーの決まり)
主キーに関する次の記述のうち、正しいものはどれか。
- 主キーは1つの表にいくつでも作ることができ、空っぽにしてもよいものだとされているものだ
- 主キーは表の中で1行を見分ける鍵で、NULLは不可、1つの表に1つだけ置くものである
- 主キーは画面に表示する見出しの飾りのことで、行の区別とは無関係なものだとされている
- 主キーは必ず音声で読み上げる必要があるデータのことだとされているものである
解答は 2 だよー。
主キーは、表の中で1行を見分ける鍵で、NULL(空っぽ)は不可、1つの表に1つだけ置くのー。複数の列をまとめた複合キーも、全体で1つの主キーだよー。
選択肢1の「いくつでも・空でもよい」、選択肢3の「見出しの飾り」、選択肢4の「音声で読み上げ」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 1表に1つ・NULL不可 |
| 2 | ✓ | 1行を見分ける・NULL不可・1つ |
| 3 | ✗ | 見出しの飾りではない |
| 4 | ✗ | 音声読み上げとは無関係 |
オリジナル問題2(外部キー)
外部キーに関する次の記述のうち、正しいものはどれか。
- 外部キーは別の表の主キーを参照して、表どうしのデータのつながりを保つための鍵である
- 外部キーは画面の外側に表示する枠のことで、データの参照とは無関係だとされているものだ
- 外部キーはどの表とも一切つながらない、孤立したデータのことだとされているものである
- 外部キーはデータを暗号化するための専用の鍵のことだとされているものである
解答は 1 だよー。
外部キーは、別の表の主キーを参照して、表どうしのデータのつながり(整合性)を保つ鍵なのー。別の名簿が出席番号で本人を指している感じだよー。
選択肢2の「外側の枠」、選択肢3の「孤立したデータ」、選択肢4の「暗号化の鍵」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 別表の主キーを参照しつながりを保つ |
| 2 | ✗ | 画面の枠ではない |
| 3 | ✗ | つながりを保つためのもの |
| 4 | ✗ | 暗号化の鍵ではない |
オリジナル問題3(CASCADEの注意点)
外部キーのCASCADEに関する次の記述のうち、正しいものはどれか。
- CASCADEは親を消しても子はまったく影響を受けない設定だとされているものである
- CASCADEは画面を明るくする機能のことで、データの削除とは無関係だとされているものだ
- CASCADEは親が消えると子の参照だけを必ず空っぽにする設定だとされているものである
- CASCADEは親を消すと子も連鎖で削除されるため、思わぬデータまで消えることがあるのだ
解答は 4 だよー。
CASCADEは、親を消すと子も連鎖でいっしょに削除される設定なのー。便利だけど、思わぬデータまで消えることがあるから油断は禁物だよー。
選択肢1の「影響を受けない」、選択肢2の「画面を明るくする」、選択肢3の「子を空っぽにする(それはSET NULL)」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 子も連鎖で削除される |
| 2 | ✗ | 画面を明るくする機能ではない |
| 3 | ✗ | 空っぽにするのはSET NULL |
| 4 | ✓ | 連鎖削除で思わぬ削除に注意 |
まとめ
押さえどころ
- 🔴 主キー(PK) = 表の中で1行を見分ける鍵。NULL不可・1表に1つ(複合キーも全体で1つ)。
- 🔴 外部キー(FK) = 別の表の主キーを参照して、データのつながり(整合性)を保つ。
- 🟡 CASCADEの注意点 = 親を消すと子も連鎖で削除される。便利だが思わぬ削除に注意。
次に学ぶ
執筆: SikakuQuest編集部