サーチ…


外部キーを持つテーブルの作成

この例では、既存のテーブルSuperHerosます。

このテーブルには主キーIDが含まれていID

各スーパーヒーローの力を保存するために新しいテーブルを追加します:

CREATE TABLE HeroPowers
(
    ID int NOT NULL PRIMARY KEY,
    Name nvarchar(MAX) NOT NULL,
    HeroId int REFERENCES SuperHeros(ID)
)

HeroIdカラムは、テーブルSuperHeros 外部キーです。

外部キーの説明

外部キー制約は、あるテーブルの値が別のテーブルの値と一致しなければならないことを強制することによって、データの完全性を保証します。

外部キーが必要な場合の例は次のとおりです。大学では、コースは部門に属している必要があります。このシナリオのコードは次のとおりです。

CREATE TABLE Department (
    Dept_Code        CHAR (5)     PRIMARY KEY,
    Dept_Name        VARCHAR (20) UNIQUE
);

次の文を使用して値を挿入します。

INSERT INTO Department VALUES ('CS205', 'Computer Science');

次の表には、コンピュータサイエンス支部が提供する科目の情報が含まれています。

CREATE TABLE Programming_Courses (
    Dept_Code       CHAR(5),
    Prg_Code        CHAR(9) PRIMARY KEY,
    Prg_Name        VARCHAR (50) UNIQUE,
    FOREIGN KEY (Dept_Code) References Department(Dept_Code)
);

(外部キーのデータ型は、参照されるキーのデータ型と一致する必要があります)。

Dept_Code列の外部キー制約は、参照されているDepartmentにすでに存在する場合にのみ値を許可します。つまり、次の値を挿入しようとすると、

INSERT INTO Programming_Courses Values ('CS300', 'FDB-DB001', 'Database Systems');

CS300Department表に存在しないため、データベースは外部キー違反エラーを発生させます。しかし、存在するキー値を試してみると:

INSERT INTO Programming_Courses VALUES ('CS205', 'FDB-DB001', 'Database Systems');
INSERT INTO Programming_Courses VALUES ('CS205', 'DB2-DB002', 'Database Systems II');

データベースはこれらの値を許可します。

外部キーを使用するためのヒント

  • 外部キーは、親テーブルのUNIQUE(またはPRIMARY)キーを参照する必要があります。
  • 外部キー列にNULL値を入力しても、エラーは発生しません。
  • 外部キー制約は、同じデータベース内のテーブルを参照できます。
  • 外部キー制約は、同じテーブル内の別の列を参照することができます(自己参照)。


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow