マナビング基本情報技術者

外部キーと参照先の指定で分かる制約とは

基本情報技術者試験 平成29年度秋期 午前 問27 / データベース › データベース設計

過去問にチャレンジ

平成29年度秋期 午前 問27

SQL文においてFOREIGN KEYとREFERENCESを用いて指定する制約はどれか。

  1. ア

    キー制約

  2. イ

    検査制約

  3. ウ

    参照制約

  4. エ

    表明

会話形式の解説

講師講師
この問題は、二つの句が何を指定するかを順に確かめると判断できます。まず、FOREIGN KEYは何を指定しますか。
受験者受験者
自分の表で外部キーになる列です。ただ、キーという語があるので、キー制約を選びたくなります。
講師講師
では、REFERENCESは何を指定しますか。自分の表の中だけで指定が完結するでしょうか。
受験者受験者
参照する相手の表と列を指定します。別の表とのつながりを定めています。
講師講師
そのとおりです。この組合せで定義するのは参照制約です。参照先の表にない値を外部キー列に登録できないようにし、参照整合性を保ちます。
受験者受験者
キー制約とは、何を守るかが違うのですか。
講師講師
はい。キー制約はPRIMARY KEY句などで指定し、主キーの値が重複しないことなど、表の中での一意性を守ります。
受験者受験者
検査制約も値を確かめるので、参照先に同じ値があるかを調べるものだと思いました。
講師講師
検査制約はCHECK句で指定し、値が「0以上」などの条件を満たすかを確かめます。ほかの表に同じ値があるかを確かめる制約ではありません。
受験者受験者
残る表明は、表どうしのつながりを指定する方法ですか。
講師講師
表明はCREATE ASSERTION文で、データベース全体が満たすべき条件を宣言します。表定義の中で外部キーを指定する方法ではありません。
受験者受験者
FOREIGN KEYが自分の表の列、REFERENCESが参照先を示すので、答えは参照制約ですね。
講師講師
はい。参照制約は外部キー制約とも呼ばれます。参照されている行を削除・更新するときの動作は、ON DELETEやON UPDATEで指定できることも押さえておきましょう。

まとめ

FOREIGN KEYは自分の表の外部キー列を、REFERENCESは参照先の表と列を指定します。この組合せで定義するのは参照制約で、正解はウです。キー制約はPRIMARY KEY句など、検査制約はCHECK句、表明はCREATE ASSERTION文に対応します。

解答・解説

正解はウです

この問題のテーマ

SQLのCREATE TABLEで、FOREIGN KEYとREFERENCESを組み合わせて指定する整合性制約の名前を問う問題です。

解き方の考え方

まず、2つの句がそれぞれ何を指定するかを確認します。FOREIGN KEYは自分の表で外部キーになる列を指定し、REFERENCESはその列が参照する相手の表と列を指定します。つまり、この組み合わせは「他の表とのつながり」を定めるものです。他の表を参照する制約の名前を選べば答えになります。

選択肢ごとの解説

  1. ×ア  キー制約
    アのキー制約は、PRIMARY KEY句などで指定します。主キーの値が重複しないことなど、1つの表の中での一意性を守るための制約です。他の表の列を参照する指定ではないので、FOREIGN KEYとREFERENCESの組には当たりません。
  2. ×イ  検査制約
    イの検査制約はCHECK句で指定します。列の値が「0以上」などの条件を満たすかを確かめる制約で、他の表に同じ値があるかどうかは確かめません。そのため、本問の2つの句とは対応しません。
  3. ○ウ  参照制約
    ウの参照制約は、FOREIGN KEYで外部キー列を、REFERENCESで参照先の表と列を指定して定義します。この制約があると、参照先の表にない値は外部キー列に登録できません。これで表どうしの参照整合性が保たれるので、本問の指定に当てはまります。
  4. ×エ  表明
    エの表明も整合性制約の一種ですが、CREATE ASSERTION文で、データベース全体が満たすべき条件として宣言します。表定義の中で外部キーを指定する方法ではないため、本問の答えにはなりません。

補足

参照制約を付けると、参照されている行を参照先の表から削除・更新するときにも制限がかかります。その際の動作は、ON DELETEやON UPDATEにCASCADEやSET NULLなどを書いて指定できます。

POINT

  • FOREIGN KEYは外部キーにする列を指定し、REFERENCESは参照先の表と列を指定します。
  • FOREIGN KEYとREFERENCESで定義する制約は参照制約で、外部キー制約とも呼ばれます。
  • 参照制約は、参照先の表にない値が外部キー列に入るのを防ぎ、参照整合性を保ちます。
  • 制約と句は、キー制約がPRIMARY KEYなど、検査制約がCHECK、表明がCREATE ASSERTIONという組み合わせで覚えます。

※出典:平成29年度秋期 基本情報技術者試験 午前 問27