外部キー制約(ガイブキーセイヤク)とは | 意味や読み方など丁寧でわかりやすい用語解説

外部キー制約(ガイブキーセイヤク)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

外部キー制約 (ガイブキーセイヤク)

英語表記

FOREIGN KEY CONSTRAINT (フォレジンキーコンストレント)

用語解説

外部キー制約は、リレーショナルデータベースにおいて、テーブル間の関連性を定義し、データの整合性を保証するための重要な仕組みである。データベース内に保存されるデータの矛盾を防ぎ、一貫性を保つことを目的として設定される制約の一つだ。この制約を理解することは、信頼性の高いデータベースを設計し、システムを構築する上で不可欠な知識となる。外部キー制約は、あるテーブルのレコードが、必ず別のテーブルに存在する特定のレコードを参照するように強制するルールと考えることができる。この関係性は、一般的に「親テーブル」と「子テーブル」という言葉で表現される。子テーブルが親テーブルの情報を参照する形で成り立っている。

外部キー制約の仕組みを具体的に理解するために、「部署テーブル」と「社員テーブル」という二つのテーブルを例に挙げる。部署テーブルは会社に存在する部署の情報を管理し、「部署ID」と「部署名」という列を持つとする。この「部署ID」は各部署を一位に識別するための「主キー」として設定される。一方、社員テーブルは社員の情報を管理し、「社員ID」、「社員名」、そしてその社員が所属する部署を示す「所属部署ID」という列を持つ。この場合、部署テーブルが親テーブル(参照される側)、社員テーブルが子テーブル(参照する側)となる。社員テーブルの「所属部署ID」列に、部署テーブルの主キーである「部署ID」を参照するための外部キー制約を設定する。この設定により、「所属部署ID」列は外部キーとして機能し、二つのテーブルが関連付けられる。

外部キー制約が設定されると、データベースはデータの整合性を保つためにいくつかのルールを強制する。まず、子テーブルである社員テーブルに新しい社員データを登録する際、「所属部署ID」列には、親テーブルである部署テーブルの「部署ID」列に実際に存在する値しか入力できなくなる。例えば、部署テーブルに「10:営業部」「20:開発部」というデータしか存在しない場合、社員テーブルに「所属部署ID」が「30」の社員を登録しようとすると、データベースはエラーを返し、登録を拒否する。これにより、存在しない部署に社員が所属するという矛盾したデータの発生を未然に防ぐことができる。 次に、親テーブルのデータを操作する際にも制約が働く。例えば、開発部に所属する社員が一人でも社員テーブルに存在している状態で、部署テーブルから「20:開発部」のレコードを削除しようとすると、データベースはエラーを返し、削除を許可しない。これは、もし削除を許可してしまうと、開発部に所属していた社員の所属先が不明となり、データとして不整合な状態(孤児レコード)に陥ってしまうからである。同様に、部署ID「20」を「25」に更新しようとした場合も、子テーブルから参照されているため、基本的にはエラーとなる。このように、外部キー制約は、参照する側とされる側の両方の操作を監視し、テーブル間の関係性が壊れるような操作を禁止することで、データの整合性を強力に保護する。

親テーブルのレコードが更新または削除された際に、関連する子テーブルのレコードをどのように扱うかを定義する「参照整合性アクション」を設定することも可能である。代表的なアクションにはいくつか種類がある。デフォルトの動作は「RESTRICT」または「NO ACTION」と呼ばれ、先述の通り、子テーブルから参照されている親レコードの削除や更新を一切許可しない。これは最も安全な設定である。「CASCADE」は、親レコードの操作を子レコードに連鎖させるアクションである。例えば、部署テーブルからある部署を削除すると、その部署IDを参照している社員テーブルのレコードもすべて自動的に削除される。主キーが更新された場合は、子テーブルの外部キーの値も追随して更新される。これは、関連データをまとめて削除したい場合に便利だが、意図しない大量削除を引き起こす危険性もあるため、慎重に使用する必要がある。「SET NULL」は、親レコードが削除または更新された際に、子テーブルの外部キーの値をNULL(空)に設定するアクションである。これは、社員の所属部署がなくなった場合、一時的に「所属なし」の状態にすることを許容する場合などに使用される。このアクションは、外部キー列にNULL値の格納が許可されている必要がある。「SET DEFAULT」は、親レコードが操作された際に、子テーブルの外部キーの値をあらかじめ定義されたデフォルト値に置き換えるアクションである。

外部キー制約は、リレーショナルデータベース設計の根幹をなす概念であり、アプリケーション側のロジックに頼ることなく、データベース自身がデータの整合性を維持するための重要な機能を提供する。この制約を用いることで、データモデルの構造、つまりテーブル間の関連性が明確になり、開発者はデータの矛盾を心配することなく開発に集中できる。また、複数の異なるアプリケーションが同じデータベースにアクセスするようなシステムにおいても、一貫したルールでデータが保護されるため、システムの堅牢性が向上する。システムエンジニアを目指す上で、この外部キー制約の役割と仕組みを正しく理解し、適切にデータベースを設計する能力は、高品質なシステムを構築するための基礎となるスキルである。