FOREIGN KEY
備考
テーブル定義に外部キーを追加するには、ADD 句で FOREIGN KEY キーワードを使用します。
メモ: 外部キーを追加したり、その他の参照整合性(RI)操作を行ったりするには、その前にデータベース名を使用してデータベースにログインする必要があります。また、セキュリティが有効になっている場合は、外部キーの参照先テーブルの参照権がなければ、キーを追加できません。
従属テーブルに外部キーを定義するには、FOREIGN KEY 句を CREATE TABLE ステートメントで使用します。キーに列のリストを指定するだけでなく、キーの名前を定義できます。
外部キー列の列は、ヌル値を許可できます。ただし、インデックスに擬似ヌルの列が含まれていないことを確認してください。擬似ヌルの値はインデックスが作成されません。
外部キー名は、辞書内で固有の名前である必要があります。外部キー名を省略すると、PSQL はキーの最初の列の名前を外部キー名として使用します。その名前の外部キーが辞書に既に含まれる場合は、外部キー名の重複エラーが発生します。
外部キーを指定すると、PSQL によって、キーを構成する列のインデックスが作成されます。このインデックスは、対応する主キーのインデックスと同じ属性を持ちますが、値の重複が可能です。インデックスにほかの属性を割り当てるには、CREATE INDEX ステートメントを使用して明示的にインデックスを作成します。その後、ALTER TABLE ステートメントを使用して外部キーを定義します。インデックスを作成するときは、ヌル値が許可されず、大文字小文字の区別と照合順序の属性が、対応する主キー列のインデックスの属性と一致しているようにします。
外部キーの列は、主キーの参照先の列と、データ型、長さ、順序が同じである必要があります。唯一の例外は、外部キーでは整数列を使用して、主キーの IDENTITY 列または SMALLIDENTITY 列を参照できることです。この場合、2 つの列は長さが同じである必要があります。
PSQL は、テーブルを作成する前に、外部キーに例外がないかどうかを調べます。以前に定義された参照整合性(RI)制約に違反する状態が見つかった場合は、ステータス コードを生成し、テーブルを作成しません。
メモ: 既にデータを含むテーブルに外部キーを作成する際には、PSQL は外部キー列および主キー列に既にあるデータ値を検証しません。 この制限は、外部キーが作成された後の INSERT、UPDATE、DELETE 操作に適用されます。
外部キーを定義するときに、対応する主キーが含まれるテーブルの名前を指定する REFERENCES 句を含める必要があります。親テーブルの主キーは事前に定義されている必要があります。また、データベースのセキュリティが有効になっている場合は、主キーが含まれるテーブルの参照権が必要です。
CREATE TABLE ステートメントを使用して、自己参照を行う外部キーを作成することはできません。同じテーブルの主キーを参照する外部キーを作成するには、ALTER TABLE ステートメントを使用します。
また、1 つのステートメントで、同じ列セットに対する主キーと外部キーは作成できません。そのため、作成しているテーブルの主キーが別のテーブルの外部キーでもある場合は、ALTER TABLE ステートメントを使用して外部キーを作成する必要があります。
例
次のステートメントは、Class テーブルに新規の外部キーを追加します。(Faculty の ID 列はインデックスとして定義されており、ヌル値は含まれません。)
ALTER TABLE Class ADD Constraint Teacher FOREIGN KEY (Faculty_ID) REFERENCES Faculty ON DELETE RESTRICT
この例では、削除制限規則によって、ある教職員を削除しようとするとき、最初にその教職員の全講座を変更または削除しないとその教職員をデータベースから削除できないようになっています。
関連項目