外部キーとは

がいぶきー

ほかの表の主キー(または一意な列)を参照する列。参照先に存在する値かNULLしか入れられないという参照整合性制約により、存在しない行を指すデータが入るのを防ぐ。参照先の行を削除・更新したときの動作(拒否、連鎖して削除など)も指定できる。

「外部キー」は、1分野の5問の練習問題に出てきます(データベースの基礎など)。

この用語の分野: データベースの基礎

外部キーの練習問題に挑戦

顧客表(顧客ID, 氏名)の主キーは顧客IDで、注文表(注文ID, 顧客ID)の顧客IDは、顧客表の顧客IDを参照する外部キーとして定義されている。顧客表には顧客IDが'C1'と'C2'の行だけがある。この状態で INSERT INTO 注文 VALUES ('O9', 'C5') を実行したときの結果として正しいものはどれか。

  1. A参照整合性制約に違反するので、行は追加されずエラーになる
  2. B行が追加され、顧客表にも顧客IDが'C5'の行が自動で追加される
  3. C行は追加されるが、顧客IDの値はNULLに置き換えられる
答えと解説を見る

正解:A. 参照整合性制約に違反するので、行は追加されずエラーになる

外部キーは、ほかの表(ここでは顧客表)の主キーなどを参照する列で、参照先に存在する値かNULLしか入れられないという参照整合性制約を守らせます。顧客表に'C5'という顧客はいないので、存在しない顧客の注文を追加しようとする操作はDBMSに拒否され、エラーになります。これにより、どの顧客のものかわからない注文が残ることを防げます。逆に、注文が残っている顧客の行を顧客表から削除しようとした場合も、既定の動作(NO ACTION)では拒否されます。外部キーの定義に ON DELETE CASCADE を付けると、顧客を削除したときに、その顧客の注文も連鎖して削除されるようにできます。

解説の中の「外部キー」

「外部キー」が出てくる問題(5問)

  1. 顧客表(顧客ID, 氏名)の主キーは顧客IDで、注文表(注文ID, 顧客ID)の顧客IDは、顧客表の顧客IDを参照する外部キーとして定義されている。顧客表には顧客IDが'C1'と'C2'の行だけがある。この状態で INSERT INTO 注文 VALUES ('O9', 'C5') を実行したときの結果として正しいものはどれか。
  2. 履修表(学生番号, 科目番号, 成績)は、どの学生がどの科目を履修し、どんな成績だったかを記録する。1人の学生は複数の科目を履修し、1つの科目は複数の学生が履修する。同じ学生が同じ科目を2回登録することはないとき、この表の主キーとして適切なものはどれか。
  3. 社員表(社員番号, 氏名, 部署コード, 部署名)の主キーは社員番号で、どの列も1つの値だけを持つ。関数従属は 社員番号 → 氏名、社員番号 → 部署コード、部署コード → 部署名 である。この表の正規形として正しいものはどれか。
  4. E-R図で、学生と科目の間に「1人の学生は複数の科目を履修し、1つの科目は複数の学生が履修する」という多対多の関係がある。この関係を関係データベースの表で実現する方法として、適切なものはどれか。
  5. トランザクションが持つべきACID特性のうち、「口座Aから引き落として口座Bに入金する振替の処理が、途中で障害が起きても、両方とも行われるか、まったく行われないかのどちらかになる」という性質はどれか。

データベースの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

半導体・電子回路・情報の計算ツール

関連する用語

主キー SQL 第3正規形 E-R図 関係データベース トランザクション ACID特性 インデックス 正規化 2相ロック

用語集の一覧へ