平成21年度 春期 午前 問34
データベース
参照制約に関する問題
関係データベースの “注文” 表又は “商品” 表の行を削除する場合,“注文明細” 表に対する操作として,適切な組合せはどれか。ここで,表定義中の実線の下線は主キーを,破線の下線は外部キーを表す。
注文(注文番号,受注年月日)
商品(商品番号,商品名称,商品単価)
注文明細(*注文番号*,*商品番号*,注文数量,注文金額)
- `下線` … 主キー(原典では実線の下線)
- `*斜体*` … 外部キー(原典では破線の下線)
〔削除時の操作〕
- A: 主キー側の行を削除する際,それを参照している外部キー側の行を同時に削除する。
- B: 主キー側の行を削除する際,それを参照している外部キー側の行があれば,主キー側の行の削除を許さない。
| “注文” 表の行を削除する場合 | “商品” 表の行を削除する場合 | |
|---|---|---|
| ア | A | A |
| イ | A | B |
| ウ | B | A |
| エ | B | B |
- アA A
- イA B
- ウB A
- エB B
答えと解説を見る
✓ これが正解イA B
解説
注文はカスケード、商品は参照があれば拒否です。
この設問は、注文明細から注文と商品の両方の主キーを参照している場面で、上位側の行を削除する操作をどう扱うのが自然かを問うています。ですから、上位の実体が消えたときに、下位の実体を一緒に消してよいか、それとも消さずに削除自体を止めるべきか、という一点で見分けます。注文明細は、あくまで注文の内訳としての意味を持つ行で、注文そのものが消えれば内訳としての意味も消え、単独では残す価値がありません。ですから、注文側の行を消すときは、それを参照している明細も一緒に消してしまうやり方が自然に働きます。一方、商品は明細と独立して存在する実体で、明細から現に参照されているうちは、商品の情報が消えると明細の情報が意味を失います。ですから、参照している明細が残っているときは、商品側の削除そのものを止めるやり方が自然に働きます。よって、注文側は一緒に消す扱い、商品側は削除を止める扱いの組合せが答えになります。
ほかの選択肢はなぜ違うのか
- アA A:注文側と商品側のどちらも、参照している明細を一緒に消してしまう扱いで揃える、と述べています。商品側もまとめて消すと、その商品を含む過去の注文明細まで一緒に消えてしまい、独立した実体としての扱いと合いません。
- ウB A:注文側は削除を止め、商品側は一緒に消してしまう扱い、と述べています。上位が消えれば意味を失う明細を残す一方で、独立に扱いたい商品を一緒に消してしまう形になっており、それぞれの意味の付き方と逆向きです。
- エB B:注文側と商品側のどちらも、参照している明細があるうちは削除を止める扱いで揃える、と述べています。注文自体が消えた後にも意味のない明細が残ってしまい、注文明細を注文の内訳として扱う考え方と合いません。
この問題の用語
- 関係データベースデータを表の形で持ち、表どうしを結びつけて扱う、最も広く使われているデータベース。データの定義や操作にはSQLを使います。
出典:平成21年度 春期 応用情報技術者試験 午前 問34(改変:原典の図表をテキストに書き起こした)
同じ用語が出る問題
- 令和7年度 秋期 午前 問28:ビューに関する記述(関係データベース)
- 令和7年度 春期 午前 問25:多重度に関する問題(関係データベース)
- 令和5年度 春期 午前 問30:参照制約に関する問題(関係データベース)
- 令和5年度 春期 午前 問26(関係データベース)
- 令和3年度 春期 午前 問28:NoSQLに関する問題(関係データベース)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)