ある企業が受注データベースを設計している。受注テーブルの「顧客 ID」カラムは顧客テーブルの主キーを参照する外部キーとして設定されている。顧客テーブルから特定の顧客レコードを削除しようとしたとき、その顧客に紐づく受注レコードが存在する場合、既定の動作はどれか。
- A. 顧客レコードは削除されるが、受注テーブルの外部キーカラムは NULL に更新される
- B. 受注レコードは残ったまま、顧客 ID が無効な値に更新されて顧客レコードが削除される
- C. 参照整合性制約違反エラーが発生し、顧客レコードの削除が拒否される
- D. 顧客レコードと紐づく全受注レコードが自動的にカスケード削除される
解答と解説を見る
正解: C
外部キー制約が設定されている場合、参照先(顧客テーブル)のレコードを削除しようとすると、参照元(受注テーブル)に関連レコードが存在する限り、参照整合性制約違反エラーが発生してデータベースエンジンが削除を拒否するのがデフォルト動作である。これにより孤立した参照(orphan records)の発生を防ぐ。カスケード削除(ON DELETE CASCADE)は明示的に設定した場合にのみ有効であり、デフォルトではない。NULL への更新(ON DELETE SET NULL)も明示的設定が必要。無効な値への更新は参照整合性に反するためデータベースが許可しない。