ある保険会社が、契約者の基本情報(契約者ID、名前、生年月日、住所)を管理するリレーショナルデータベースを運用している。このデータベースに「同じ契約者IDのレコードが複数登録されないこと」「生年月日には必ず値が入力されること」を保証するためのデータ整合性制約として最も適切なものはどれか。
- A. 契約者IDにCHECK制約、生年月日に外部キー制約を設定する
- B. 契約者IDを外部キーとして別テーブルを参照させ、生年月日にUNIQUE制約を設定する
- C. 契約者IDにインデックスを追加し、生年月日にデフォルト値0を設定する
- D. 契約者IDに主キー制約、生年月日にNOT NULL制約を設定する
解答と解説を見る
正解: D
「同じ契約者IDが複数登録されないこと」を保証するには主キー制約(PRIMARY KEY)が最適である。主キー制約は自動的にUNIQUE(一意性)とNOT NULL(必須入力)の両方を保証するため、重複した契約者IDの登録を防ぐ。「生年月日に必ず値が入ること」を保証するにはNOT NULL制約が適切で、NULLの挿入を禁止できる。選択肢Cのインデックスはクエリのパフォーマンス改善が目的であり、重複防止の整合性制約ではない。デフォルト値0も整合性制約(値の必須化)とは異なり、0という誤った値で埋まるリスクがある。選択肢Bの外部キーは別テーブルへの参照整合性を保証するものであり、自テーブルでの主キーの一意性保証には使わない。生年月日へのUNIQUE制約は全契約者が異なる生年月日を持つという誤った制約になる。選択肢AのCHECK制約は値の範囲・書式を検証するものであり、主キーの一意性保証には主キー制約が正しい。生年月日への外部キー制約は別テーブルへの参照を強制するものであり、必須入力の保証にはNOT NULLを使う。