読み方 : がいぶキー

外部キー 【foreign key】 FK

概要

外部キーとは、リレーショナルデータベース(RDB)で、テーブルのある列に、別のテーブルの特定の列に含まれる項目しか入力できないようにする制約。また、その際に指定する列。標準のSQLではFOREIGN KEY句を用いて設定できる。
外部キーのイメージ画像

ある列に入力するデータに制約を課し、別のテーブルのある列に登録済みのデータしか入力できないようにする。参照先のデータの変更に追随して自動的に参照元も書き換えるよう指定したり、参照先の削除や変更を禁じるよう指定することもできる。

例えば、受注テーブルの顧客コードの列に、顧客テーブルの顧客コードの列を外部キーとして設定すれば、顧客テーブルに登録されていない顧客コードを受注テーブルに誤って入力してしまうことを防ぐことができる。既存顧客の一覧から一つを選択して入力するような形にすることもできるようになる。

SQLでの記述

テーブル作成時には、CONSTRAINT句を用いて「CREATE TABLE テーブル定義 CONSTRAINT 制約名 FOREIGN KEY(列名) REFERENCING 参照先テーブル名(列名) 参照操作」という形式で記述する。列名は参照元、参照先ともに複数指定することができ、その場合は各列の値の組み合わせに対して制約を課す。既存のテーブルにALTER TABLE文で外部キーを追加することもできる。

「参照操作」は参照先のデータの更新や削除をどう扱うかを指定するキーワードである。「CASCADE」なら参照先の更新や削除に参照元を自動的に追随させ、「RESTRICT」なら参照されている値の(参照先での)更新や削除を禁じる。「NO ACTION」もRISTRICT同様に参照先の変更時にエラーを発するが、そのチェックはトランザクションの最後に行われる。

「SET NULL」は参照先が削除されたときに参照元にNull値をセットし、「SET DEFAULT」は列のデフォルト値をセットする。参照操作を更新時に適用するか削除時に適用するかは「ON UPDATE CASCADE ON DELETE RESTRICT」のように「ON UPDATE」および「ON DELETE」で指示することができる。

(2023.3.14更新)

他の用語辞典による「外部キー」の解説 (外部サイト)

資格試験などの「外部キー」の出題履歴

▼ ITパスポート試験
平30秋 問73】 データベースにおける外部キーに関する記述のうち、適切なものはどれか。
平30秋 問100】 レコードの関連付けに関する説明のうち、関係データベースとして適切なものはどれか。
平29秋 問88】 関係データベースにおける外部キーに関する記述のうち、適切なものはどれか。
平25秋 問51】 関係データベースの表に設定する主キー、外部キー及びインデックスのうち、一つの表に対して複数設定できるものだけを全て挙げたものはどれか。
平25春 問55】 関係データベースを使い“社員”表と“部署”表を作成して社員情報を管理する。“社員”表と“部署”表に、必要に応じて設定する主キーと外部キーの適切な組合せはどれか。
平22秋 問87】 “部署”表、“都道府県”表及び“社員”表を結合して、A表を作成した。結合した“社員”表はどれか。ここで、下線は主キーを示し、破線は外部キーを示す。

▼ 基本情報技術者試験
令5修7 問22】 関係データベースにおいて,外部キーを定義する目的として,適切なものはどれか。
令4修12 問28】 関係データベースにおいて,外部キーを定義する目的として,適切なものはどれか。
令4修7 問29】 関係データベースの “注文” 表の “顧客番号” は,“顧客” 表の主キー “顧客番号” を参照する外部キーである。このとき,参照の整合性を損なうデータ操作はどれか。
令2修7 問29】 関係データベースの “注文” 表の “顧客番号” は,“顧客” 表の主キー “顧客番号” を参照する外部キーである。このとき,参照の整合性を損なうデータ操作はどれか。
平30修7 問30】 関係データベースにおいて,外部キーを定義する目的として,適切なものはどれか。
平30修1 問30】 関係データベースの “注文” 表の “顧客番号” は,“顧客” 表の主キー “顧客番号” を参照する外部キーである。このとき,参照の整合性を損なうデータ操作はどれか。
平28春 問29】 関係データベースにおいて,外部キーを定義する目的として,適切なものはどれか。
平26修7 問30】 関係データベースの “注文” 表の “顧客番号” は,“顧客” 表の主キー “顧客番号” を参照する外部キーである。このとき,参照の整合性を損なうデータ操作はどれか。
平25修12 問32】 関係データベースにおいて,外部キー定義を行う目的として,適切なものはどれか。
平24秋 問31】 関係データベースの “注文” 表の “顧客番号” は,“顧客” 表の主キー “顧客番号” を参照する外部キーである。このとき,参照の整合性を損なうデータ操作はどれか。
平23春 問34】 関係データベースにおいて,外部キー定義を行う目的として,適切なものはどれか。
平22秋 問33】 関係データベースの “注文” 表の “顧客番号” は,“顧客” 表の主キー “顧客番号” を参照する外部キーである。このとき,参照の整合性を損なうデータ操作はどれか。
平22修1 問31】 関係データベースにおいて,外部キー定義を行う目的として,適切なものはどれか。
平21修7 問35】 三つの表からなるデータベースのスキーマがある。次の項目中で外部キーはどれか。ここで,スキーマの中の下線は主キーを表す。学生(学生番号,学生名,住所,生年月日)成績(学生番号科目番号,点数)科目(科目番号,科目名,講師番号)。