最終更新日:2026年7月20日
fe fe-technology database sql
まず結論
FOREIGN KEY と REFERENCES を使って指定するのは、参照制約です。
参照制約とは、
外部キーの値が、参照先の表に実際に存在する値だけになるようにする制約
です。
試験では、次の組合せをそのまま判断できるようにします。
FOREIGN KEY + REFERENCES
→ 参照制約
直感的な説明
社員表と部署表を例にします。
部署表
├─ 10:営業部
├─ 20:総務部
└─ 30:開発部
社員表
├─ 山田:部署番号10
├─ 佐藤:部署番号20
└─ 鈴木:部署番号99 ← 部署表に存在しない
部署番号99が部署表に存在しないのに、社員表へ登録できると、どの部署にも所属しない不整合なデータが生まれます。
参照制約は、このような登録を防ぎます。
参照先に存在しない値を、外部キーへ入れさせない。
これが中心となる役割です。
定義・仕組み
参照制約では、ある表の列を、別の表の主キーや一意な列に関連付けます。
主キーと外部キー
部署表では、部署番号が各部署を一意に識別する主キーです。
社員表では、部署番号が部署表を参照する外部キーになります。
部署表.部署番号
→ 主キー
社員表.部署番号
→ 外部キー
SQLでは、次のように指定します。
CREATE TABLE 部署 (
部署番号 INTEGER PRIMARY KEY,
部署名 VARCHAR(50)
);
CREATE TABLE 社員 (
社員番号 INTEGER PRIMARY KEY,
氏名 VARCHAR(50),
部署番号 INTEGER,
FOREIGN KEY (部署番号)
REFERENCES 部署(部署番号)
);
この定義によって、社員表の部署番号には、部署表に存在する部署番号だけを登録できます。
FOREIGN KEYの役割
FOREIGN KEY は、参照する側の列を指定します。
FOREIGN KEY (部署番号)
REFERENCESの役割
REFERENCES は、参照先の表と列を指定します。
REFERENCES 部署(部署番号)
まとめると、次の関係です。
FOREIGN KEY
→ 参照する側
REFERENCES
→ 参照される側
科目Aでどう出る?
試験では、SQLのキーワードから制約名を答える問題や、制約の役割を問う問題が出ます。
判断表
| キーワード・説明 | 対応する制約・用語 |
|---|---|
PRIMARY KEY、FOREIGN KEY |
キー制約 |
CHECK |
検査制約 |
FOREIGN KEY と REFERENCES |
参照制約 |
CREATE ASSERTION |
表明 |
NOT NULL |
NULL禁止 |
UNIQUE |
一意性制約 |
今回の判断軸は、次の一文です。
FOREIGN KEYとREFERENCESが並んだら参照制約。
キー制約との違い
キー制約は、主キーや外部キーなど、キーに関する制約の総称です。
参照制約は、その中でも特に、
外部キーと参照先の値の関係を守る制約
です。
したがって、FOREIGN KEY という言葉だけを見ればキー制約とも関係しますが、REFERENCES と組み合わせて問われた場合は、参照制約がより直接的な答えになります。
検査制約との違い
検査制約は、CHECK を使って値の条件を指定します。
CHECK (年齢 >= 0)
値の範囲や条件
→ 検査制約
別表の値との整合性
→ 参照制約
表明との違い
表明は、複数の表にまたがる整合性条件などを宣言する考え方です。
標準SQLでは CREATE ASSERTION を使って指定します。
試験では、次の対応で切り分けます。
CREATE ASSERTION
→ 表明
どんな場面で使う?
参照制約は、関連する表同士のデータを正しく保つために使います。
存在しない部署番号の登録を防ぐ
社員表に、部署表に存在しない部署番号を登録できないようにします。
存在しない商品番号の登録を防ぐ
注文明細に、商品表に存在しない商品番号を登録できないようにします。
親データの削除による不整合を防ぐ
部署表の部署を削除するとき、その部署を参照している社員が残っていると不整合になります。
このときの動作は、DBMSや制約の設定によって変えられます。
| 設定例 | 動作 |
|---|---|
RESTRICT / NO ACTION |
参照中なら削除を拒否する |
CASCADE |
参照する側も連動して削除する |
SET NULL |
外部キーをNULLにする |
FE試験では、まず次を押さえれば十分です。
親に存在しない値を子へ登録させず、親子関係の整合性を守る。
よくある誤解・混同
FOREIGN KEYは主キーを作る指定
違います。
PRIMARY KEY は主キー、FOREIGN KEY は別表を参照する外部キーを指定します。
REFERENCESは検索に使うSQL
違います。
REFERENCES は、外部キーがどの表・列を参照するかを示します。
参照制約は値の範囲を確認する
値の範囲や条件を確認するのは、主に検査制約です。
年齢が0以上
→ CHECK
部署番号が部署表に存在する
→ FOREIGN KEY + REFERENCES
外部キーの値は必ず主キーと同じ列名でなければならない
列名が同じである必要はありません。
参照関係とデータ型などが適切に定義されていれば、列名が異なっていても参照できます。
外部キーにはNULLを入れられない
外部キーにNULLを許可するかどうかは、列の定義によります。
NULLを禁止したい場合は、NOT NULLも指定します。
関連用語との切り分け
| 用語 | 役割 |
|---|---|
| 主キー | 行を一意に識別する |
| 外部キー | 別表の行を参照する |
| 参照制約 | 外部キーと参照先の整合性を守る |
| 検査制約 | 値の条件や範囲を確認する |
| 一意性制約 | 値の重複を禁止する |
| NOT NULL制約 | NULLを禁止する |
データベース全体の構造を定義するスキーマとの関係は、スキーマとは?ビュー・SQL・整合性制約との違いも参考になります。
まとめ(試験直前用)
FOREIGN KEYとREFERENCESで指定するのは参照制約- 外部キーは別表の主キーなどを参照する
- 参照先に存在しない値の登録を防ぐ
- 親子関係の整合性を守る
CHECKは検査制約CREATE ASSERTIONは表明PRIMARY KEYは主キーを指定する
覚える一文はこれです。
FOREIGN KEYで参照する列を決め、REFERENCESで参照先を指定する。