web-dev-qa-db-ja.com

SQL Server Management Studio-紛らわしい外部キーを追加しますか?

Management Studioのプライマリテーブルに外部キーを追加するのはいつも混乱します。

私が持っているとしましょう

Table1 
{
    ID int, -- Primary Key
    Table2ID int, -- Refers to Table2's ID 
}

Table2 
{
    ID int, -- Primary Key
    SomeData nvarchar(50)
}

Right Click -> Relationships -> Table and column specificationによってTable1に外部キーを追加しています。 「プライマリ」ポップアップをTable2、IDに設定し、「外部キーテーブル」をTable1、Table2IDに設定しています。

私の質問:

  1. Table2を「外部キーテーブル」に、Table1をプライマリキーにリストしないでください。私の理解は間違っていますか?

  2. 保存すると、「次のテーブルがデータベースに保存されます」というアラートが表示されます。両方のテーブルが表示されます。私は本当にこれを取得しません。 Table1のみを変更しました。 2番目のテーブルが表示されるのはなぜですか?

42
tvr
  • テーブルの横にある展開記号をクリックします。
  • 「キー」フォルダを右クリックして、「新しい外部キー」を選択します。
  • (または、テーブルを開いているときに、ツールストリップの[関係]ボタンをクリックすることもできます)
  • [テーブルと列の仕様]行の[...]ボタンをクリックして、エディターを開きます。
  • 左側のドロップダウンは追加元のテーブルになり、静的テキストフィールドには追加先のテーブルがリストされます。
  • ドロップダウンを使用して制約を指定し、両側の列数が同じであることを確認してください。
103
Zach

同等のT-SQLステートメントを使用しないのはなぜですか?私にとってはるかに簡単で混乱が少ないようです:

ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)

これを読んだとき、どの2つのテーブルが関係していて、それらがどのように接続されているか(Table1.Table2ID-(参照)-> Table2.ID

SSMSデザイナーの世界に滞在したい場合は、関連するテーブルのデータベースダイアグラムを作成し、Table2ID列のTable1 over Table2をそこのID列にドロップします-これにより、SSMSに何をしたいのかをグラフィカルに伝えることができます。選択した内容を確認し、表示されるダイアログで[OK]をクリックするだけです。

22
marc_s

1.Table2を「外部キーテーブル」に、Table1をプライマリキーにリストしないでください。私の理解は間違っていますか?

あなたの理解は間違っていると思います。 Table2は、主キーを参照するテーブルです。したがって、主キーの下にリストされます。 Table1は、外部キー(別のテーブルのプライマリキーへの参照)を持つテーブルです。したがって、「外部キーテーブル」の下にリストされています。

外部キーが後でTable1に属するものとしてリストされている場合でも、両方のテーブルが保存される理由に関しては、外部キーが両方のテーブルを制約するためだと思います。両方とも制約について「知る」必要があるため、両方とも保存する必要があります。

9
Ann L.
ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)
1
Deepesh