令和7年度 春期 午前 問27
データベース
参照制約に関する問題
SQL 文に示す参照制約が存在する“商品”表と“受注”表とがある。“商品”表の行を削除したとき,削除した行の商品コードと同じ値の商品コードをもつ“受注”表の行を自動的に削除する SQL 文として,a に入れる字句はどれか。
〔SQL 文〕
CREATE TABLE 商品 (
商品コード CHAR(4) PRIMARY KEY ,
商品名 VARCHAR(64)
)
CREATE TABLE 受注 (
受注番号 INTEGER PRIMARY KEY ,
商品コード CHAR(4) ,
受注個数 INTEGER ,
納品日 CHAR(8) ,
FOREIGN KEY (商品コード) REFERENCES 商品(商品コード)
ON DELETE 〔 a 〕
)- アCASCADE
- イRESTRICT
- ウSET DEFAULT
- エSET NULL
答えと解説を見る
✓ これが正解アCASCADE
解説
親の行を消したら子の行も一緒に消す指定を入れます。
外部キーに添える削除時の動作の指定は、参照される側の表の行が消えたときに、その行を指していた側の行をどう扱うかを決めるものです。扱い方はおおまかに三つに分かれます。指していた行ごと連鎖して消してしまうか、指している行が残っているあいだは親の削除そのものを認めないか、あるいは行は残したまま参照していた列の値だけを別の値に置き換えるかです。設問が求めているのは、商品の表の行を削除したときに、同じ商品コードをもつ受注の表の行も自動的に消えるという振る舞いでした。これは一番目の扱いにあたるので、連鎖して削除することを表す字句を入れることになります。残りの三つの字句は、いずれも受注の表の行そのものは残す側か、削除を止める側にあたります。
ほかの選択肢はなぜ違うのか
- イRESTRICT:参照している行が残っているあいだは、参照される側の行の削除そのものを認めない指定です。受注の行があれば商品の行を消せなくなるので、消したうえで受注の行も消したいという設問の要求とは逆の働きになります。
- ウSET DEFAULT:受注の表の行は残したまま、商品コードの列をあらかじめ決めた既定の値に置き換える指定です。行そのものは表に残り続けるので、自動的に削除するという要求を満たしません。
- エSET NULL:受注の表の行を残したまま、商品コードの列を空値にする指定です。こちらも行は消えずに残るため、設問が求めている自動削除にはならず、値だけが失われた行が積み上がります。
出典:令和7年度 春期 応用情報技術者試験 午前 問27
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)