外来キーが一つ(又は複数)の他のテーブルの主キーフィールドを指し、データの参照整合性(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 フィールドは、CUSTOMERS テーブルの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);