応用情報技術者試験 令和7年春 午前問27 解説付き過去問
問題
SQL文に示す参照制約が存在する"商品"表と"受注"表とがある。
"商品"表の行を削除したとき、削除した行の商品コードと同じ値の商品コードをもつ"受注"表の行を自動的に削除するSQL文として、aに入れる字句はどれか。
〔SQL文〕
〔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
)
商品コード CHAR(4) PRIMARY KEY,
商品名 VARCHAR(64)
)
CREATE TABLE 受注 (
受注番号 INTEGER PRIMARY KEY,
商品コード CHAR(4),
受注個数 INTEGER,
納品日 CHAR(8),
FOREIGN KEY (商品コード) REFERENCES 商品(商品コード)
ON DELETE a
)
正解
解説
この問題は、データベースの参照制約を使って、関連表間でデータ整合性を保つ方法について問うものです。具体的には、親表(この場合は"商品"表)のレコードが削除された際に、子表("受注"表)にどのような操作が自動的に行われるべきかを設定するSQL文の適切な字句を選ぶ問題です。
- 参照制約とは
参照制約は、データベース内の異なる表間でデータの整合性を保つために使用されます。特定の表(親表)のキーを、別の表(子表)が参照することを許可し、親表におけるデータの更新や削除が子表にどのように影響するかを制御します。
- ON DELETE クローズのオプション
ON DELETE クローズは、親表のレコードが削除されたときの子表の対応を定義します。「CASCADE」は親表のレコード削除時に対応する子表のレコードも削除します。「RESTRICT」は親表のレコードが子表で参照されている場合、その親レコードの削除を制限します。「SET NULL」は親レコードの削除時に子表の対応するカラムをNULLに設定。「SET DEFAULT」はデフォルト値に設定します。
- 正解「CASCADE」の意味とその効果
「CASCADE」オプションを選択すると、"商品"表のある商品コードに対応する行が削除された場合、"受注"表でその商品コードを参照しているすべての行も自動的に削除されます。これにより、データ整合性が保たれ、孤立した参照データが残ることがなくなります。
したがって、「CASCADE」が正解です。これは、"商品"表の特定の商品が削除された場合に、それに依存する"受注"表のデータも同時に削除され、データの整合性を保つための最適な選択です。