1

メインテーブルへの外部キーを参照するテーブルがあります。しかし、別のテーブルへの別の参照を追加したいと思います。

たとえば、次の 3 つのテーブルがあるとします。Child, Parent, Transaction

親テーブル:

  • 親ID

子テーブル:

  • 子ID
  • 親ID

取引表:

  • 取引ID
  • ParentID (参照テParentID on Parent​​ーブル、nullable )
  • ChildID (参照テChildID on Child​​ーブル、nullable )

テーブルへのcascade on update参照を追加したい。ParentID on Childそのため、親子関係が変化すると、テーブルParentID上のmyTransactionが自動的に更新されます。

4

1 に答える 1

3

明らかに、テーブルParentIDの主キーではありません。Child

この列はテーブル全体で一意ですか?

  • ParentIDはいの場合: テーブルに一意のインデックスを定義し、Childその一意のインデックスに FK 参照を追加できます。

  • NOの場合: ParentIDonChildが一意でない場合、それへの FK 参照を作成できません。FK 参照の「ターゲット」は、そのテーブルの主キーであるか、少なくともそのテーブルの一意の列である必要があります。ParentID = 42それ以外の場合、値が一意でない場合、正確にどの行を参照していますか?!?!?

簡単に言えば、Transaction テーブルの ParentID&ChildID 列に、Child テーブルの ParentID&ChildID 列と同じ値のペアが必要です。

その場合、両方の列に FK リレーションが必要です。次のように作成します。

CREATE UNIQUE INDEX UX_ParentChild
ON dbo.Child(ParentID, ChildID)

ALTER TABLE dbo.Transaction
ADD CONSTRAINT FK_Transaction_Child
FOREIGN KEY(ParentID, ChildID) REFERENCES dbo.Child(ParentID, ChildID)
ON UPDATE CASCADE
于 2012-10-15T12:48:47.193 に答える