平成28年度 春期 午前 問29
データベース
参照制約に関する問題
次の表において,“在庫”表の製品番号に定義された参照制約によって拒否される可能性がある操作はどれか。ここで,実線の下線は主キーを,破線の下線は外部キーを表す。
〔表〕(原典は下線付きの関係スキーマ。ここでは主キーに *,外部キーに + を付けて写した) 在庫(在庫管理番号*,製品番号+,在庫量) 製品(製品番号*,製品名,型,単価) ※“在庫”表 … 在庫管理番号 は実線の下線(主キー)/ 製品番号 は破線の下線(外部キー) ※“製品”表 … 製品番号 は実線の下線(主キー)
- ア“在庫”表の行削除
- イ“在庫”表の表削除
- ウ“在庫”表への行追加
- エ“製品”表への行追加
答えと解説を見る
✓ これが正解ウ“在庫”表への行追加
解説
親側に無い製品番号を子側に足そうとすると拒まれます。
まず矢印を一本描きます。在庫表の製品番号は破線の下線、つまり外部キーなので、そこから製品表の製品番号へ向かう矢印が引けます。参照制約が守っているのは、この矢印の先が必ず存在するという約束です。言い換えると、外部キーをもつ在庫表の側に入る製品番号は、主キーとして持っている製品表の側に必ず存在しなければなりません。ここから、拒否されうる操作は二通りに絞られます。矢印の元を増やすか書き換えて、行き先の無い値を作ってしまう場合と、矢印の先を減らすか書き換えて、すでに指されている行を消してしまう場合です。設問の四つのうちこれに当たるのは、在庫表への行追加です。追加する行の製品番号が製品表に無ければ、その追加は拒まれます。迷ったら、外部キーをもつ方がどちらかを先に決めてから、増やす操作か減らす操作かを見ます。
ほかの選択肢はなぜ違うのか
- ア“在庫”表の行削除:在庫表の行削除は、指している側が一件減るだけの動きです。指される側の行はそのまま残るので、行き先を失う値は生まれません。
- イ“在庫”表の表削除:在庫表そのものを消す操作です。指している側が丸ごとなくなるだけなので、この制約が守ろうとしている約束は壊れません。逆に製品表を消すなら話は変わります。
- エ“製品”表への行追加:製品表への行追加は、指される先が一つ増えるだけです。選べる行き先が広がる方向の変化なので、この制約に引っ掛かる余地がありません。
出典:平成28年度 春期 応用情報技術者試験 午前 問29
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)