データベースの基礎

顧客表(顧客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 を付けると、顧客を削除したときに、その顧客の注文も連鎖して削除されるようにできます。

  • A. 正しい。存在しない顧客IDを参照する行は、参照整合性制約によって拒否されます。
  • B. DBMSは参照先の行を自動では作りません。
  • C. 外部キーの値を勝手にNULLに置き換えることはなく、操作はエラーになります。
この分野を解く 分野ページへ

関連する計算ツール

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

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

データベースの基礎のほかの問題

  1. SQLの文は、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)に分けられる。DDLに分類されるものはどれか。
  2. 商品表に、(商品名, 価格)が(ペン, 120)、(ノート, 250)、(消しゴム, 80)、(ファイル, 300)、(定規, 150)の5行がある。SELECT 商品名 FROM 商品 WHERE 価格 >= 150 ORDER BY 価格 DESC の結果として、返される行を順に並べたものはどれか。
  3. 社員表の部署の列に、上の行から順に 営業、開発、営業、総務、開発、営業 の値が入っている(全6行)。SELECT DISTINCT 部署 FROM 社員 の結果は何行になるか。
  4. SQLで DELETE FROM 社員 を、WHERE句を付けずに実行したときの結果として正しいものはどれか。
  5. 試験表の点数の列に、80、NULL、70、90 の4つの値がある(NULLは未受験を表す)。SELECT AVG(点数) FROM 試験 の結果はどれか。