【SQL Server】外部キー制約でデータの整合性を保ちつつ、関連データの更新と削除を効率化
SQL Server で2つのデータベース間で外部キー制約を追加する方法
T-SQL を使用して外部キー制約を作成するには、以下の構文を使用します。
ALTER TABLE child_table
ADD CONSTRAINT FK_child_table_parent_table
FOREIGN KEY (child_column1, child_column2, ...)
REFERENCES parent_table (parent_column1, parent_column2, ...)
例:
-- orders テーブルに customers テーブルへの外部キー制約を追加する
ALTER TABLE orders
ADD CONSTRAINT FK_orders_customers
FOREIGN KEY (customer_id)
REFERENCES customers (customer_id);
この例では、orders
テーブルの customer_id
列が customers
テーブルの customer_id
列を参照する外部キー制約が作成されます。
SQL Server Management Studio を使用して外部キー制約を作成するには、以下の手順を行います。
- オブジェクト エクスプローラーで、外部キー制約を追加する子テーブルを右クリックします。
- [デザイン] を選択します。
- [テーブル デザイナー] メニューで [リレーションシップ] を選択します。
- [外部キーのリレーションシップ] ダイアログ ボックスで [追加] を選択します。
- リレーションシップのプロパティを設定します。
- [OK] をクリックして変更を保存します。
外部キー制約のオプション
外部キー制約を作成する際に、以下のオプションを指定できます。
- ON DELETE: 親レコードが削除されたときに子レコードをどうするかを指定します。NO ACTION、RESTRICT、CASCADE、SET NULL のいずれかを指定できます。
外部キー制約には、以下の利点があります。
- データの整合性を保つ
- 関連データの更新と削除を容易にする
外部キー制約の制限事項
- 親テーブルと子テーブルが同じデータベースにある必要がある
- 親テーブルと子テーブルの対応する列のデータ型が一致している必要がある
補足:
- 上記の例は、SQL Server で外部キー制約を作成する基本的な方法を示しています。
- より複雑な外部キー制約を作成することもできます。
- 外部キー制約を作成する前に、データベースの設計を慎重に検討することが重要です。
サンプルコード:2つのデータベース間で外部キー制約を追加する
-- orders テーブルに customers テーブルへの外部キー制約を追加する
ALTER TABLE orders
ADD CONSTRAINT FK_orders_customers
FOREIGN KEY (customer_id)
REFERENCES customers (customer_id);
このコードを実行すると、orders
テーブルの customer_id
列が customers
テーブルの customer_id
列を参照する外部キー制約が作成されます。この制約により、orders
テーブルに存在する customer_id
は、必ず customers
テーブルに存在する customer_id
であることが保証されます。
説明:
ALTER TABLE orders
: この句は、orders
テーブルを変更することを示します。ADD CONSTRAINT FK_orders_customers
: この句は、orders
テーブルに新しい制約を追加することを示します。この制約の名前はFK_orders_customers
です。FOREIGN KEY (customer_id)
: この句は、orders
テーブルのcustomer_id
列が外部キー列であることを示します。REFERENCES customers (customer_id)
: この句は、orders
テーブルのcustomer_id
列がcustomers
テーブルのcustomer_id
列を参照することを示します。
以下の制約オプションを追加して、制約をさらに強化することができます。
ON DELETE CASCADE
: 親レコードが削除された場合、それに関連する子レコードも自動的に削除されます。
-- orders テーブルに customers テーブルへの外部キー制約を追加し、
-- 親レコードが削除されると子レコードも削除するように設定する
ALTER TABLE orders
ADD CONSTRAINT FK_orders_customers
FOREIGN KEY (customer_id)
REFERENCES customers (customer_id)
ON DELETE CASCADE;
この例では、orders
テーブルの customer_id
列が customers
テーブルの customer_id
列を参照する外部キー制約が作成されます。この制約により、orders
テーブルに存在する customer_id
は、必ず customers
テーブルに存在する customer_id
であることが保証されます。さらに、ON DELETE CASCADE
オプションが指定されているため、customers
テーブルのレコードが削除されると、それに関連する orders
テーブルのレコードも自動的に削除されます。
SQL Server で2つのデータベース間で外部キー制約を追加するその他の方法
外部キー制約のプロパティを設定する:
- [名前]: 制約の名前。
- [参照するテーブル]: 親テーブル。
以下の手順で、orders
テーブルと customers
テーブル間で外部キー制約を作成します。
- [参照するテーブル] で [customers] を選択します。
- [名前] で [FK_orders_customers] を入力します。
- T-SQL を使用するよりも直感的で使いやすい
- 複雑な外部キー制約を作成しやすい
- T-SQL を使用するほど柔軟ではない
T-SQL と SQL Server Management Studio のどちらを使用するかは、個人の好みと要件によって異なります。 T-SQL は、より柔軟で強力な方法ですが、SQL Server Management Studio は、外部キー制約を作成するより直感的で簡単な方法です。
sql sql-server t-sql