サーチ…
外部キーを持つテーブルの作成
この例では、既存のテーブル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');
CS300
がDepartment
表に存在しないため、データベースは外部キー違反エラーを発生させます。しかし、存在するキー値を試してみると:
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