SQL の基本 | DDL: データ定義言語 | Foreign Key: 外部キー

外部キー (Foreign Key) は、1 つまたは複数の別テーブルの主キーフィールドを参照し、参照整合性 (referential integrity) を確認するために使用される。つまり、許可されたデータ値だけがデータベースに保存されるようにする。

外部キーの例

たとえば、2 つのテーブルがあるとする。1 つはすべての顧客データを記録する customer テーブルで、もう 1 つは顧客の注文をすべて記録する orders テーブルである。そして、すべての注文データの顧客が customer テーブルに存在するという制約がある。ここで orders テーブルに外部キーを設定し、その外部キーが customer テーブルの主キーを参照するようにする。すると、orders テーブル内の顧客がすべて customer テーブルに存在することを保証できる。つまり、orders テーブルは customer テーブルに存在する顧客のデータを持つ。

2 つのテーブルの構造は次のとおりである。

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);