関係スキーマ・制約とは(全体像)
関係スキーマは、表をどう作るかを決めた設計図。「会員表には、会員番号・名前・年齢という列がある」といった、表の形を表すものだよー。
そして、その表に変なデータが入らないようにするルールが制約。たとえば「年齢に文字を入れさせない」「会員番号を空欄にさせない」などだよー。
身近にたとえると、申込フォームの入力ルール。「必須項目は空欄ダメ」「同じIDは1人だけ」「年齢は0以上」——こうしたルールでおかしな申込を防ぐのと同じなのー。
押さえるのは、制約にはいくつか種類があって、それぞれ役割が違うこと。とくにUNIQUEと主キーの違いが問われるよー。
詳しく:制約の種類とUNIQUE・主キーの違いだけ覚えれば戦える
ここが記事の心臓部。まず主な制約を見ていこーね。
主な制約
| 制約 | はたらき |
|---|---|
| 主キー(PK) | 行を1つに見分ける(空欄ダメ・重複ダメ) |
| 外部キー(FK) | 別の表とのつながりを保つ |
| NOT NULL | 空欄(NULL)を禁止する |
| UNIQUE | 重複を禁止する(空欄はOK) |
| CHECK | 「年齢は0以上」などの条件を守らせる |
ここで一番のひっかけが「UNIQUEと主キーは同じ」という誤解。UNIQUEは「重複ダメ」だけど空欄(NULL)はOK。一方、主キーは「重複ダメ」かつ「空欄もダメ」。空欄を許すかどうかが違いだよー。
もう1つの要点が、これらの制約をどこで決めるか。表を作るときの命令(CREATE TABLE)の中で指定するよー。
制約はどこで決める?
| 項目 | 内容 |
|---|---|
| 定義する場所 | 表を作る命令(CREATE TABLE)の中 |
| CHECK制約 | 「年齢は0以上」などのルールを実装でき、軽視できない |
ここで2つめのひっかけが「CHECK制約はなくてよい」という思い込み。CHECKは「年齢は0以上」のような決まり(ビジネスルール)を守らせるのに役立つので、軽く見ないのが大事だよー。
わかりやすく言い換えると
要するに、申込フォームの入力ルールでイメージするとラクだよー。
①関係スキーマ … フォームにどんな入力欄があるか(表の設計図)
②NOT NULL/UNIQUE/主キー … 「空欄ダメ」「重複ダメ」「空欄も重複もダメ=主キー」
③CHECK … 「年齢は0以上」のような中身の条件チェック
つまり、「制約は変なデータを防ぐルール」「UNIQUEは空欄OK・主キーは空欄ダメ」、この2点が試験の急所なのー。
試験のツボ
🔴 一番出る:制約の種類と役割
①制約は変なデータを入れさせないルール(主キー・外部キー・NOT NULL・UNIQUE・CHECKなど)
②表を作る命令(CREATE TABLE)の中で定義する
🔴 次に出る:UNIQUEと主キーの違い
①UNIQUEは重複ダメだが空欄(NULL)はOK
②主キーは重複ダメかつ空欄もダメ
🟡 押さえると安定:関係スキーマとCHECK制約
①関係スキーマは表の設計図(表の名前と列のあつまり)
②CHECKは「年齢は0以上」などの条件を守らせるのに役立つ
よくある間違い
①「UNIQUE制約と主キーはまったく同じである」→ ✗ UNIQUEは空欄(NULL)OK、主キーは空欄ダメ。空欄を許すかが違う。
②「CHECK制約は不要で、使うことはない」→ ✗ 「年齢は0以上」などの決まりを守らせるのに役立つ。軽視しない。
③「制約はデータの見た目を飾るためのものである」→ ✗ 制約は変なデータを入れさせないルール。見た目の飾りではない。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(制約の役割)
データベースの制約に関する次の記述のうち、正しいものはどれか。
- 制約はデータの見た目をとても派手に飾るためだけに使われるものだとされているものである
- 制約は変なデータを入れさせないためのルールで、主キーやNOT NULLなどがある
- 制約はデータを必ず3つに分割するためだけの決まりのことだとされているものである
- 制約は画面の明るさを自動で調整するための設定のことだとされているものである
解答は 2 だよー。
制約は、変なデータを入れさせないためのルールで、主キー・外部キー・NOT NULL・UNIQUE・CHECKなどがあるのー。申込フォームの入力ルールと同じイメージだよー。
選択肢1の「見た目を飾る」、選択肢3の「3つに分割」、選択肢4の「明るさ調整」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 見た目の飾りではない |
| 2 | ✓ | 変なデータを防ぐルール |
| 3 | ✗ | 3分割の決まりではない |
| 4 | ✗ | 明るさ調整ではない |
オリジナル問題2(UNIQUEと主キーの違い)
UNIQUE制約と主キーに関する次の記述のうち、正しいものはどれか。
- UNIQUEと主キーはまったく同じで、空欄の扱いにも違いはないものだとされているものである
- UNIQUEは空欄も重複も禁止し、主キーは空欄も重複も許すものだとされているものである
- UNIQUEは重複を禁止するが空欄(NULL)はOK、主キーは空欄も重複もどちらも禁止する
- UNIQUEも主キーも画面の表示色を決めるための設定のことだとされているものである
解答は 3 だよー。
UNIQUEは重複を禁止するけれど空欄(NULL)はOK、主キーは空欄も重複もどちらも禁止なのー。どちらも重複はダメだけど、空欄を許すかが違うよー。
選択肢1の「まったく同じ」、選択肢2の「UNIQUEと主キーが逆」、選択肢4の「表示色の設定」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 空欄の扱いが違う |
| 2 | ✗ | UNIQUEと主キーが逆 |
| 3 | ✓ | UNIQUEは空欄OK・主キーは空欄ダメ |
| 4 | ✗ | 表示色の設定ではない |
オリジナル問題3(関係スキーマとCHECK)
関係スキーマとCHECK制約に関する次の記述のうち、正しいものはどれか。
- 関係スキーマは表の設計図で、CHECK制約は「年齢は0以上」などの条件を守らせるのに役立つ
- 関係スキーマは音を鳴らすための機能で、CHECK制約は不要なものだとされているものである
- 関係スキーマは画面の色のことで、CHECK制約は使うことはないものだとされているものである
- 関係スキーマはデータを削除する命令で、CHECK制約は飾りだとされているものである
解答は 1 だよー。
関係スキーマは表の設計図(表の名前と列のあつまり)で、CHECK制約は「年齢は0以上」などの条件を守らせるのに役立つのー。CHECKは軽く見ないでねー。
選択肢2の「音を鳴らす・CHECK不要」、選択肢3の「画面の色」、選択肢4の「削除する命令」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 設計図・CHECKは条件を守らせる |
| 2 | ✗ | 音を鳴らす機能ではない |
| 3 | ✗ | 画面の色ではない |
| 4 | ✗ | 削除する命令ではない |
まとめ
押さえどころ
- 🔴 制約の種類と役割 = 変なデータを入れさせないルール(主キー・外部キー・NOT NULL・UNIQUE・CHECKなど)。CREATE TABLEで定義。
- 🔴 UNIQUEと主キーの違い = UNIQUEは重複ダメだが空欄OK。主キーは重複も空欄もダメ。
- 🟡 関係スキーマとCHECK制約 = 関係スキーマは表の設計図。CHECKは「年齢は0以上」などの条件に役立つ。
次に学ぶ
執筆: SikakuQuest編集部