システム監査技術者 2019年 午前2 問17
問題文
次の表において、“在庫”表の製品番号に参照制約が定義されているとき、その参照制約によって拒否される可能性がある操作はどれか。ここで、実線の下線は主キーを、破線の下線は外部キーを表す。
在庫(在庫管理番号、製品番号、在庫量)
製品(製品番号、製品名、型、単価)
選択肢
ア:“在庫”表の行削除
イ:“在庫”表の表削除
ウ:“在庫”表への行追加(正解)
エ:“製品”表への行追加
🔒 解説は解答すると表示されます
外部キーの参照制約【午前2解説】
正解の理由
“在庫”表の「製品番号」は外部キーであり、“製品”表の主キー「製品番号」を参照しています。したがって、“在庫”表に行を追加するときは、その行の「製品番号」が“製品”表に存在していなければなりません。
参照先の製品が存在しない行を追加しようとすると、参照整合性を保てないため操作が拒否されます。この可能性があるのは、ウの「“在庫”表への行追加」です。
解法ステップ
- 破線の下線が付いた“在庫”表の「製品番号」を外部キーと確認します。
- 外部キーが参照する先は、実線の下線が付いた“製品”表の「製品番号」です。
- 外部キーを持つ表に行を追加するとき、参照先に存在しない値を指定すると参照制約に違反します。
- よって、拒否される可能性がある操作はウです。
選択肢別の誤答解説
-
ア:「“在庫”表の行削除」
在庫の行を削除しても、その行が参照していた製品の行は残ります。外部キーの参照先がなくなるわけではないため、この参照制約には違反しません。 -
イ:「“在庫”表の表削除」
外部キーを持つ側の表を削除する操作であり、製品表の行を参照する在庫データが残る状況にはなりません。参照制約によって拒否される操作ではありません。なお、実際のDBMSでは別の依存関係などによって削除できない場合があります。 -
ウ:「“在庫”表への行追加」
追加する行の「製品番号」が“製品”表に存在しなければ、参照制約に違反するため拒否される可能性があります。 -
エ:「“製品”表への行追加」
参照先である製品表に行を追加する操作です。既存の在庫行が参照している製品を削除するわけではないため、この参照制約には違反しません。
よくある誤解
- 外部キーの値は、参照先に「必ず存在しなければならない」のであり、外部キー側の表に新しい行を追加する際に注意が必要です。
- 参照されている側の行を追加することと、参照されている側の行を削除することは別です。通常、参照制約が問題になるのは、参照先の行を削除・変更するときです。
- 外部キーがあるからといって、参照元の行を削除できなくなるわけではありません。参照元の行を削除しても、参照先の行には影響しません。
補足コラム
参照制約は、外部キーの値が参照先の主キーまたは一意キーに存在することを保証する仕組みです。この問題では、在庫表が「参照元」、製品表が「参照先」です。
なお、外部キー列にNULLを許す定義の場合、NULLを指定した行は参照先の製品行を参照しないものとして扱われることがあります。実際にNULLを許すかどうかは、列の定義によります。
FAQ
Q. “在庫”表に製品番号「P001」の行を追加するとき、何を確認すればよいですか?
A. “製品”表に「P001」の製品行が存在するかを確認します。存在しなければ、参照制約によって追加が拒否されます。
A. “製品”表に「P001」の製品行が存在するかを確認します。存在しなければ、参照制約によって追加が拒否されます。
Q. “製品”表の行を削除するときも、参照制約が関係しますか?
A. はい。その製品を参照する在庫行が残っている場合、削除が拒否されることがあります。削除を許可するか、関連する在庫行も削除するかなどは、制約の設定によります。
A. はい。その製品を参照する在庫行が残っている場合、削除が拒否されることがあります。削除を許可するか、関連する在庫行も削除するかなどは、制約の設定によります。
関連キーワード: 外部キー、参照制約、参照整合性、主キー、参照元、参照先

\ せっかくなら /
システム監査技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

