平成22年度 秋期 午前 問32
データベース
参照制約に関する問題
次の表定義において,“在庫”表の製品番号に定義された参照制約によって拒否される可能性のある操作はどれか。ここで,実線は主キーを,破線は外部キーを表す。
〔表定義〕
在庫(在庫管理番号,製品番号,在庫量)
~~~~~~~~~~ ------
実線=主キー 破線=外部キー
製品(製品番号,製品名,型,単価)
~~~~~~
実線=主キー
⇒ “在庫”表の製品番号は、“製品”表の製品番号(主キー)を指している- ア“在庫”表の行削除
- イ“在庫”表の表削除
- ウ“在庫”表への行追加
- エ“製品”表への行追加
答えと解説を見る
✓ これが正解ウ“在庫”表への行追加
解説
指す側に無い値を入れると拒まれます。
参照制約は、指した先が本当にあるかどうかを守るための約束です。判定の軸は、その操作によって指し先を失う行が生まれるかという一点になります。ここでは在庫の表が製品の表を指しており、指される側が親、指す側が子に当たります。外部キーの値は、必ず親の側の主キーに存在していなければなりません。したがって約束の破られ方は二通りしかなく、子に親へ無い値を入れるか、子が指している行を親から消すかのどちらかです。正解は在庫の表への行追加で、製品の表に登録の無い製品番号を書いた行を入れようとすると拒まれます。設問が問うているのは在庫の側に定義された制約なので、素直に子へ入れる場面が当たります。追加と削除、親と子の四通りを表に並べると、危ないのは対角線の二つだと見えてきます。
ほかの選択肢はなぜ違うのか
- ア“在庫”表の行削除:指す側の行が減るだけの操作です。指していた行が無くなっても、指される側の表は何も困らないので、この約束が働いて操作を拒む場面にはなりません。
- イ“在庫”表の表削除:指す側の表ごと消す操作なので、残る側から見れば指し手がいなくなるだけです。反対に指される側の表を消そうとすれば拒まれ得ますが、ここで消すのは指す側です。
- エ“製品”表への行追加:指される側に行が増えるだけで、すでにある行が消えるわけではありません。親をいじるから危ないと早合点しやすいところですが、危ないのは親から消すときです。
出典:平成22年度 秋期 応用情報技術者試験 午前 問32
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)