外部キーとは
外部キー(Foreign Key, FK)は、関係
データベースにおいて、テーブル(関係変数)間の
参照整合性を維持するための制約です。具体的には、あるテーブルの列(属性)が、別のテーブルの列を参照する際に用いられます。
外部キーの役割
- - 参照整合性の確保: 外部キーは、参照する側のテーブルのデータが、参照される側のテーブルに存在するデータを指すことを保証します。これにより、データの一貫性が保たれます。
- - テーブル間の関連付け: 外部キーは、テーブル間の関係を定義し、関連するデータを結びつけます。
- - データの正規化: 外部キーは、データの冗長性を排除し、データの正規化を促進します。
外部キーの定義
外部キーは、
データベース言語である
SQLの `FOREIGN KEY` 制約として定義されます。既存のテーブルに外部キーを追加する場合、`ALTER TABLE` 文を使用します。テーブル作成時に外部キーを定義することも可能です。
sql
ALTER TABLE 参照するテーブル
ADD CONSTRAINT 制約名
FOREIGN KEY (参照する列)
REFERENCES 参照されるテーブル (参照される列);
CREATE TABLE 参照するテーブル (
...,
FOREIGN KEY (参照する列)
REFERENCES 参照されるテーブル (参照される列)
);
`REFERENCES` 句で参照される列を省略した場合、参照されるテーブルの
主キーが参照されると解釈されます。
参照操作
外部キーが設定されたテーブルでは、参照される側のテーブルのデータが変更(削除や更新)された場合、参照する側のテーブルに影響が生じる可能性があります。このため、
SQLでは参照操作を定義し、データの一貫性を保つためのメカニズムが提供されています。主な参照操作には以下の5種類があります。
1.
CASCADE: 参照される側のデータが削除または更新された場合、参照する側の対応するデータも連動して削除または更新されます。
2.
RESTRICT: 参照する側のデータが存在する場合、参照される側のデータの削除または更新は許可されません。
3.
NO ACTION:
SQL文の実行後、
参照整合性が満たされているか確認し、満たされていない場合は
SQL文を失敗させます。
4.
SET NULL: 参照される側のデータが削除または更新された場合、参照する側の外部キーの値をNULLに設定します。
5.
SET DEFAULT: 参照される側のデータが削除または更新された場合、参照する側の外部キーの値をデフォルト値に設定します。
注意点
- - CASCADE はデータの一貫性を保つために強力ですが、意図しないデータ削除を引き起こす可能性があるため、慎重に使用する必要があります。
- - RESTRICT はデータの一貫性を最も厳密に保ちますが、データ変更の柔軟性を損なう可能性があります。
- - SET NULL および SET DEFAULT は、外部キーがNULLを許容する場合にのみ使用可能です。
具体例
請求書テーブルと供給者テーブルがあるとします。
- `SupplierNumber` (
主キー)
- `Name`
- `Address`
- `Type`
- `InvoiceNumber` (
主キー)
- `SupplierNumber` (外部キー, 供給者テーブルの `SupplierNumber` を参照)
- `Text`
この例では、請求書テーブルの `SupplierNumber` 列が外部キーとして機能し、供給者テーブルの `SupplierNumber` 列を参照します。これにより、請求書は必ず存在する供給者に紐づけられます。
社員テーブルと部署テーブルがあるとします。
- `DepartmentID` (
主キー)
- `DepartmentName`
- `EmployeeID` (
主キー)
- `DepartmentID` (外部キー, 部署テーブルの `DepartmentID` を参照)
- `Name`
この例では、社員テーブルの `DepartmentID` 列が外部キーとして機能し、部署テーブルの `DepartmentID` 列を参照します。これにより、社員は必ず存在する部署に所属することになります。
外部キーに関する問題点
- - 外部キーと主キーの関係が、本来あるべきでない場合に存在していたり、その逆のパターンが存在すると、データベース設計上の問題を引き起こしやすくなります。
- - 不適切な外部キーの設計は、データの不整合、性能問題、アプリケーションの複雑化などを招く可能性があります。
まとめ
外部キーは、関係
データベースにおいて、テーブル間の
参照整合性を保つために不可欠な概念です。外部キーの適切な設計と使用は、データの正確性と整合性を保証し、
データベースシステムの信頼性を高めます。
データベース設計を行う際には、外部キーの役割と特性を十分に理解することが重要です。
関連項目