SQL 外来キー




SQL > テーブル処理 > 外来キー

外来キーが一つ(又は複数)の他のテーブルの主キーフィールドを指し、データの参照整合性(referential integrity)を確かめるために使われます。言い換えれば、許されたデータ値だけがデータベースの中に保存されることになります。

例えば、仮に二つのテーブルがあるとします。一つは CUSTOMER テーブルで、すべての顧客データが記録されるもの。もう一つは ORDERS テーブルで、顧客からの注文がすべて記録されるもの。そこで、一つの制約があり、すべての注文データの顧客が CUSTOMER テーブルに存在すること。ここで、ORDERS テーブルに外来キーを設定し、その外来キーが CUSTOMER テーブルの主キーを指します。そうすると、 ORDERS テーブルにある顧客がすべてCUSTOMER テーブルに存在することを確実にすることができます。 言い換えれば、ORDERS テーブルは、すべて CUSTOMER テーブルに存在する顧客のデータです。

その二つのテーブルの構造は次のようになります。

CUSTOMER テーブル
フィールド名 性質
SID 主キー
Last_Name  
First_Name  

ORDERS テーブル
フィールド名 性質
Order_ID 主キー
Order_Date  
Customer_SID 外来キー
Amount  

上述の例の中に、ORDERS テーブルにある Customer_SID フィールドは、CUSTOMER テーブルのSID フィールドを指す外来キー。

次は、ORDERS テーブルを作るときに使われる外来キーの指定方法を幾つか挙げます。

MySQL:

CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
PRIMARY KEY (Order_ID),
FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID));

Oracle:

CREATE TABLE ORDERS
(Order_ID integer PRIMARY KEY,
Order_Date date,
Customer_SID integer REFERENCES CUSTOMER (SID),
Amount double);

SQL Server:

CREATE TABLE ORDERS
(Order_ID integer PRIMARY KEY,
Order_Date datetime,
Customer_SID integer REFERENCES CUSTOMER (SID),
Amount double);

続いて、テーブル構造の変更により、外来キーを指定する例。ここで、仮に、 ORDERS テーブルが既に作られ、外来キーがまだ指定されていないことにします。

MySQL:

ALTER TABLE ORDERS
ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);

Oracle:

ALTER TABLE ORDERS
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);

SQL Server:

ALTER TABLE ORDERS
ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);

SQL DROP TABLE >>



Copyright © 2017   1keydata.com   All Rights Reserved