基本情報技術者 2011年 春期 午前(科目A) 問34
問題文
関係データベースにおいて、外部キー定義を行う目的として、適切なものはどれか。
選択肢
ア:関係する相互のテーブルにおいて、レコード間の参照一貫性が維持される制約をもたせる。(正解)
イ:関係する相互のテーブルの格納場所を近くに配置することによって、検索、更新を高速に行う。
ウ:障害によって破壊されたレコードを、テーブル間の相互の関係から可能な限り復旧させる。
エ:レコードの削除、追加の繰返しによる、レコード格納エリアの虫食い状態を防止する。
🔒 解説は解答すると表示されます
外部キー制約【午前解説】
正解の理由
選択肢の中で正しい目的は ア「関係する相互のテーブルにおいて、レコード間の参照一貫性が維持される制約をもたせる。」です。
外部キー(foreign key)は、子テーブルの列が参照する親テーブルの主キー(または候補キー)に存在する値だけを許可することで、参照整合性を確保します。これにより、参照先が存在しない「孤立した(オーファン)レコード」の挿入を防ぎ、参照関係を壊す削除や更新を制約(または制御)できます。SQL の標準機能として定義され、ON DELETE / ON UPDATE のオプションで挙動を指定可能です。
外部キー(foreign key)は、子テーブルの列が参照する親テーブルの主キー(または候補キー)に存在する値だけを許可することで、参照整合性を確保します。これにより、参照先が存在しない「孤立した(オーファン)レコード」の挿入を防ぎ、参照関係を壊す削除や更新を制約(または制御)できます。SQL の標準機能として定義され、ON DELETE / ON UPDATE のオプションで挙動を指定可能です。
解法ステップ
- 問題文のキーワード「外部キー定義」「目的」「参照一貫性」を素早く確認する。
- 各選択肢の意味を「論理(整合性)」「物理(配置/性能)」「可用性・復旧」「断片化」などの観点で分類する。
- 外部キーの本質は「参照整合性の制約」であるため、それに一致する選択肢を選ぶ。該当するのは ア のみ。
- 他の選択肢(イ・ウ・エ)は物理配置や障害復旧、断片化対策であり外部キーの定義目的に該当しないと判断して除外する。
選択肢別の誤答解説
- ア: 正解です。外部キーは親子テーブル間の参照整合性を保持するための制約で、オーファンの防止や不正な参照の防止を目的とします。
- イ: 誤りです。テーブルの格納場所を近くに配置して性能向上を図るのはストレージ配置やパーティショニング、データベース管理の範囲であり、外部キー定義の目的ではありません。
- ウ: 誤りです。障害で破壊されたレコードを自動的に復旧する機能は外部キーにありません。復旧はバックアップ、レプリケーション、障害対策機構に依存します。
- エ: 誤りです。レコードの削除と追加による断片化(虫食い)を防ぐのはストレージ管理(ガベージコレクション、VACUUM、最適化)であり、外部キーは論理整合性の制約に特化します。
よくある誤解
- 外部キーで物理的なデータ配置(テーブルの近接配置)や検索速度の最適化が自動的に行われると考える誤解。外部キーは論理制約であり、物理配置は DBMS の設計・管理やインデックス、パーティショニングで対処します。
- 外部キーが障害時のデータ復旧(破損したレコードの自動復旧)やバックアップ機能を提供すると考える誤解。復旧はバックアップ/レプリケーション等の仕組みで行います。
- 外部キーがディスクの「虫食い」や断片化を防ぐと考える誤解。断片化対策は VACUUM/OPTIMIZE やストレージ管理で対応します。
補足コラム
外部キーの運用で知っておくと役に立つ点を簡潔にまとめます。
- ON DELETE / ON UPDATE のオプション:CASCADE(連動削除/更新)、SET NULL、RESTRICT/NO ACTION(拒否)などを使い、参照先変更時の挙動を制御できます。
- パフォーマンス:外部キー自体は整合性チェックを行うため、INSERT/UPDATE/DELETE のコストが増える場合があります。運用上は参照対象列にインデックスを張ると検査が速くなります(DBMS による)。
- 複合外部キーや NULL:複数列を組み合わせた外部キー(複合キー)や、参照列が NULL を許す仕様は標準 SQL でサポートされています。
- 制約の遅延(deferred constraint):一部の DBMS ではトランザクション終了時まで外部キー制約の検査を遅延させる設定が可能で、複雑な一括更新時に便利です。
SQL の定義例(参考)
CREATE TABLE parent (
id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE child (
id INT PRIMARY KEY,
parent_id INT,
name VARCHAR(100),
CONSTRAINT fk_child_parent FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE RESTRICT
ON UPDATE CASCADE
);
FAQ
Q1: 外部キーは自動的にインデックスを作成しますか?
A1: DBMS によります。多くは参照性能向上のために親側のキーはインデックス済みですが、子側の外部キー列には自動でインデックスを作らない DBMS もあるため確認が必要です。
A1: DBMS によります。多くは参照性能向上のために親側のキーはインデックス済みですが、子側の外部キー列には自動でインデックスを作らない DBMS もあるため確認が必要です。
Q2: 外部キーはパフォーマンスを悪化させますか?
A2: 整合性チェックのため更新時にコストがかかる可能性はありますが、正しい設計(適切なインデックス等)で運用すれば許容範囲です。整合性維持は重要なトレードオフです。
A2: 整合性チェックのため更新時にコストがかかる可能性はありますが、正しい設計(適切なインデックス等)で運用すれば許容範囲です。整合性維持は重要なトレードオフです。
Q3: 外部キーは NULL を許容できますか?
A3: はい。外部キー列が NULL を許容する場合、通常は NULL 値は参照制約の対象外となり、NULL の挿入は許されます(ただし DBMS の挙動に依存する部分あり)。
A3: はい。外部キー列が NULL を許容する場合、通常は NULL 値は参照制約の対象外となり、NULL の挿入は許されます(ただし DBMS の挙動に依存する部分あり)。
Q4: 親テーブルのレコードを削除したら子テーブルのレコードはどうなる?
A4: ON DELETE の設定次第です。CASCADE なら子も削除、SET NULL なら子の外部キーが NULL、RESTRICT/NO ACTION なら削除が拒否されます。
A4: ON DELETE の設定次第です。CASCADE なら子も削除、SET NULL なら子の外部キーが NULL、RESTRICT/NO ACTION なら削除が拒否されます。
関連キーワード: 外部キー、参照整合性、外部キー制約、ON DELETE CASCADE、親子テーブル、参照一貫性

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

