このトピックでは、SQL Server Management Studio または Transact-SQL を使用して SQL Server 2014 で外部キーリレーションシップを作成する方法について説明します。 あるテーブルの行と他のテーブルの行を関連付ける場合は、2 つのテーブル間にリレーションシップを作成します。
このトピックについて
作業を開始する準備:
次を使用して外部キー リレーションシップを作成するには:
開始する前に
制限事項と制約条件
外部キー制約は、別のテーブルの主キー制約にのみリンクする必要はありません。また、別のテーブルの UNIQUE 制約の列を参照するように定義することもできます。
FOREIGN KEY 制約の列に NULL 以外の値を入力するときは、その値が参照される列に存在している必要があります。存在していないと外部キー違反のエラー メッセージが返されます。 複合外部キー制約のすべての値が検証されていることを確認するには、参加しているすべての列に NOT NULL を指定します。
FOREIGN KEY 制約は、同じサーバー上の同じデータベース内のテーブルのみを参照できます。 複数のデータベースにまたがる参照整合性は、トリガーを使って実装する必要があります。 詳細については、「 CREATE TRIGGER (Transact-SQL)」をご覧ください。
FOREIGN KEY 制約は、同じテーブル内の他の列を参照できます。 これは、自己参照と呼ばれます。
列レベルで指定された FOREIGN KEY 制約は、参照列を 1 つだけリストできます。 この参照列は、制約が定義されている列と同じデータ型である必要があります。
テーブル レベルで指定する FOREIGN KEY 制約は、制約列リストの列数と同じ数の参照列を持つ必要があります。 また、各参照列のデータ型は、列リスト内の、参照列に対応する列と同じでなければなりません。
データベース エンジンには、他のテーブルを参照するテーブルに含めることができる FOREIGN KEY 制約の数、または特定のテーブルを参照する他のテーブルが所有する FOREIGN KEY 制約の数に関する定義済みの制限はありません。 ただし、使用できる FOREIGN KEY 制約の実際の数は、ハードウェア構成やデータベースおよびアプリケーションのデザインにより制限されます。 1 つのテーブルに含める FOREIGN KEY 制約は 253 個までとし、253 個以内の FOREIGN KEY 制約から参照することをお勧めします。
FOREIGN KEY 制約は、一時テーブルには適用されません。
CLR ユーザー定義型の列に対して外部キーを定義する場合は、型の実装でバイナリ順がサポートされている必要があります。 詳細については、「 CLR ユーザー定義型」を参照してください。
varchar(max)型の列は、参照する主キーも型varchar(max)として定義されている場合にのみ、FOREIGN KEY 制約に参加できます。
安全
権限
外部キーを使用して新しいテーブルを作成するには、データベースの CREATE TABLE 権限と、テーブルが作成されているスキーマに対する ALTER 権限が必要です。
既存のテーブルに外部キーを作成するには、テーブルに対する ALTER 権限が必要です。
SQL Server Management Studio の使用
テーブル デザイナーで外部キー リレーションシップを作成するには
オブジェクト エクスプローラーで、リレーションシップの外部キー側にあるテーブルを右クリックし、[ デザイン] をクリックします。
テーブル デザイナーでテーブルが開きます。
[テーブル デザイナー] メニューの [リレーションシップ] をクリックします。
[ 外部キーのリレーションシップ ] ダイアログ ボックスで、[ 追加] をクリックします。
リレーションシップは、[ 選択されたリレーションシップ ] リストに表示され、システム指定の名前が FK_<tablename>_<tablename> 形式で表示されます。 tablename は外部キー テーブルの名前です。
[選択したリレーションシップ] の一覧でリレーションシップをクリックします。
右側のグリッドで [テーブルと列の指定 ] をクリックし、プロパティの右側にある省略記号 (...) をクリックします。
[ テーブルと列 ] ダイアログ ボックスの [主キー ] ドロップダウン リストで、リレーションシップの主キー側にあるテーブルを選択します。
下のグリッドで、テーブルの主キーに関連する列を選択します。 各列の左側にある隣接するグリッド セルで、外部キー テーブルの対応する外部キー列を選択します。
リレーションシップの名前は、テーブル デザイナー によって割り当てられます。 この名前を変更するには、 [リレーションシップ名] ボックスの内容を編集します。
[OK] を選択してリレーションシップを作成します。
Transact-SQL の使用
新しいテーブルに外部キーを作成するには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。 この例では、テーブルを作成し、
Sales.SalesReasonテーブル内の列SalesReasonIDを参照する列TempIDに外部キー制約を定義します。 ON DELETE CASCADE 句と ON UPDATE CASCADE 句は、Sales.SalesReasonテーブルに加えられた変更がSales.TempSalesReasonテーブルに自動的に反映されるようにするために使用されます。USE AdventureWorks2012; GO CREATE TABLE Sales.TempSalesReason (TempID int NOT NULL, Name nvarchar(50), CONSTRAINT PK_TempSales PRIMARY KEY NONCLUSTERED (TempID), CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) REFERENCES Sales.SalesReason (SalesReasonID) ON DELETE CASCADE ON UPDATE CASCADE );GO
既存のテーブルに外部キーを作成するには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。 この例では、列
TempIDに外部キーを作成し、Sales.SalesReasonテーブル内の列SalesReasonIDを参照します。USE AdventureWorks2012; GO ALTER TABLE Sales.TempSalesReason ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) REFERENCES Sales.SalesReason (SalesReasonID) ON DELETE CASCADE ON UPDATE CASCADE ; GO詳細については、 ALTER TABLE (Transact-SQL)、 CREATE TABLE (Transact-SQL)、 および table_constraint (Transact-SQL) を参照してください。