SQLにおいて,A表の主キーがB表の外部キーによって参照されている場合,各表の行を追加・削除する操作の参照制約に関する制限について,正しく整理した図はどれか。
ここで,△印は操作が拒否される場合があることを表し,○印は制限なしに操作ができることを表す。
正答1
解説
正解は1です。
A表の主キーをB表の外部キーが参照している場合、B表の外部キーの値はA表に存在しなければなりません。
これを参照制約(参照整合性制約)といい、この制約を破る操作は拒否されます。
各表への行の追加と削除について、制約に違反する可能性があるかを考えます。
【選択肢別解説】
1:○ A表への追加は参照される値が増えるだけなので、制約違反になりません。
A表の削除は、B表から参照されている行を消すと違反になるので拒否される場合があります。
B表の追加は参照先がA表にないと拒否され、B表の削除は制限なく行えます。
2:× B表の追加を○としている点が誤りです。
A表に存在しない値を外部キーにもつ行は追加できないので、△が正しいです。
B表の削除は○が正しいです。
3:× A表の追加を△としている点が誤りです。
参照される側に行を増やしても制約違反は起きないので、○が正しいです。
A表の削除は△が正しいです。
4:× A表の追加を△、A表の削除を○としている点が誤りです。
参照される側の削除こそ、参照している行が残っていると拒否されます。
【ポイント】
「参照される側(親)は削除が危ない、参照する側(子)は追加が危ない」と覚えましょう。
親の削除時に子も消すCASCADEなどの指定で動作を変えることもできます。