SQL 外来キー | ||
SQL > テーブル処理 > 外来キー
外来キーが一つ(又は複数)の他のテーブルの主キーフィールドを指し、データの参照整合性(referential integrity)を確かめるために使われます。言い換えれば、許されたデータ値だけがデータベースの中に保存されることになります。 例えば、仮に二つのテーブルがあるとします。一つは CUSTOMER テーブルで、すべての顧客データが記録されるもの。もう一つは ORDERS テーブルで、顧客からの注文がすべて記録されるもの。そこで、一つの制約があり、すべての注文データの顧客が CUSTOMER テーブルに存在すること。ここで、ORDERS テーブルに外来キーを設定し、その外来キーが CUSTOMER テーブルの主キーを指します。そうすると、 ORDERS テーブルにある顧客がすべてCUSTOMER テーブルに存在することを確実にすることができます。 言い換えれば、ORDERS テーブルは、すべて CUSTOMER テーブルに存在する顧客のデータです。 その二つのテーブルの構造は次のようになります。 CUSTOMER テーブル
ORDERS テーブル
上述の例の中に、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);
|