応用情報技術者 2009年 春期 午前2 問34
問題文
関係データベースの“注文”表又は“商品”表の行を削除する場合、“注文明細”表に対する操作として、適切な組合せはどれか。ここで、表定義中の実線の下線は主キーを、破線の下線は外部キーを表す。


選択肢
ア:
イ:(正解)
ウ:
エ:
関係データベースの“注文”表又は“商品”表の行を削除する場合の“注文明細”表に対する操作【午前2 解説】
要点まとめ
- 結論:注文表の行削除時は注文明細も連動削除(A)、商品表の行削除時は注文明細の存在で削除禁止(B)が適切です。
- 根拠:注文は注文明細の親であり、注文削除時に明細も不要になるため連動削除が合理的です。商品は注文明細で使われていても削除禁止にし、整合性を保ちます。
- 差がつくポイント:外部キー制約の「ON DELETE CASCADE」と「ON DELETE RESTRICT」の違いを理解し、どの親テーブルの削除にどの制約を適用すべきか判断できるかが重要です。
正解の理由
イが正解です。注文表の行を削除する際は、注文に紐づく注文明細も同時に削除する「A(連動削除)」が適切です。注文がなくなれば、その注文に関する明細も意味をなさないためです。一方、商品表の行を削除する場合は、注文明細にその商品が存在している限り削除を禁止する「B(削除禁止)」が適切です。商品が明細に存在するのに削除してしまうと、データの整合性が崩れます。
よくある誤解
注文表と商品表の削除時に同じ外部キー制約を適用すればよいと考えがちですが、親子関係の意味合いが異なるため、削除時の動作も異なります。
解法ステップ
- 注文明細表の外部キーを確認し、注文番号と商品番号がそれぞれ注文表と商品表を参照していることを理解する。
- 注文表の削除時、注文明細の注文番号が参照しているため、明細も削除しないと整合性が取れないことを考える。
- 商品表の削除時、注文明細に商品番号が存在する場合は削除禁止にし、整合性を保つ必要があることを理解する。
- 選択肢のA(連動削除)とB(削除禁止)をそれぞれのケースに当てはめて判断する。
- 注文表はA、商品表はBの組み合わせが正しいと結論付ける。
選択肢別の誤答解説
- ア:注文表も商品表も連動削除(A)では、商品削除時に注文明細も削除され、商品が明細に存在しても削除できてしまい整合性が崩れる。
- イ:正解。注文表は連動削除、商品表は削除禁止で整合性を保つ。
- ウ:注文表が削除禁止(B)では、注文削除時に注文明細が存在すると削除できず運用上問題。商品表が連動削除(A)も誤り。
- エ:両方削除禁止(B)では、注文削除時に注文明細があれば削除できず、注文の削除が困難になる。
補足コラム
外部キー制約の「ON DELETE CASCADE」は親テーブルの行削除時に子テーブルの関連行も自動削除します。一方、「ON DELETE RESTRICT」や「ON DELETE NO ACTION」は子テーブルに関連行が存在する場合、親テーブルの行削除を禁止します。これらの設定はデータの整合性を保つために重要で、用途に応じて使い分けます。
FAQ
Q: 注文明細に商品が存在している場合、商品を削除できないのはなぜですか?
A: 商品が注文明細で使われていると、削除すると明細の参照先がなくなりデータの整合性が崩れるためです。
A: 商品が注文明細で使われていると、削除すると明細の参照先がなくなりデータの整合性が崩れるためです。
Q: 注文削除時に注文明細も削除するのはなぜですか?
A: 注文がなくなれば、その注文に関する明細は意味をなさないため、関連明細も同時に削除して整合性を保ちます。
A: 注文がなくなれば、その注文に関する明細は意味をなさないため、関連明細も同時に削除して整合性を保ちます。
関連キーワード: 外部キー制約、ON DELETE CASCADE, ON DELETE RESTRICT, データ整合性、関係データベース、主キー、外部キー、注文明細

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

