2009-07-16 36 views
15

私は、外部キー制約を定義するとき、SQL Server 2008 Management Studioの更新ルールと削除ルールを混乱させます。関連するヘルプ文書(F1ヘルプなど)も見つかりませんでした。SSMS 2008におけるリレーションシップの更新と削除ルールの理解

ここに画面のスナップショットがあります。誰が何を意味するのかを説明し、関連するいくつかの文書を読んでお勧めすることができればと感謝します。 :-)

enter image description here

答えて

22

外部キーは、2つのテーブル間の親子関係を定義します。親表の主キーは、最大でn個の子表の行にある外部キーです。

親テーブルのプライマリキーがUPDATEを取得すると、UPDATE RULEが起動します。すべての子ローも更新され、NULLなどに設定されます。しかし、ベストプラクティスでは、決して変更されない主キー(固定IDなど)を持つことが重要であるため、あまり重要ではありません。

さらに重要なのはDELETEルールです。親の行が削除された場合(たとえば、Orderが削除された場合)はどうなりますか?また、CASCADE DELETEを使用してすべての子行(すべてのOrder行項目)を削除することも、外部キーをNULLに設定することもできます(親はもうありません)。これはあなたの具体的なシナリオに完全に従います。

オーダー/オーダーラインのシナリオでは、オーダー全体が削除されたときにオーダーラインを削除すると効果的かもしれませんが、商品を削除することは望ましくありません。削除 - あなたのシナリオとあなたのアプリに依存している正しい答えは一つもありません。

マルク・

+1

ありがとうMarc、私はこのMSDNのページから学んでいます。http://msdn.microsoft.com/en-us/library/ms186973%28SQL.90%29.aspxある混乱は、 "カスケード参照アクションも私の混乱は4つのアクション(NO ACTION | CASCADE | SET NULL | SET DEFAULT)を超えているように見えますが、他のアクションも定義できますか? – George2

+1

いいえ、UPDATEシナリオとDELETEシナリオの4つのアクションのいずれかを定義できます。記事で説明しているのは、TableBがTableAを参照し、 "ON DELETE CASCADE"というシナリオであるため、TableAの行が削除されると、TableB内のすべての子も削除されます。この場合、ON DELETE CASCADEアクションを持つTableBを参照するTableCが存在する場合、TableAのこの削除はTableBに、次にTableCに移動します。 –

+0

ありがとうMarc、私はあなたの答えが好きです! – George2

1

外部キーフィールドは、ヌルまたは主キーフィールドによって定義された値を格納することができます。

外部キーの値を主キーで定義されていない値に変更しようとすると、エラーが発生します。あなたは

例として...あなたがエラーを取得する外部キーの依存関係を持つ主キーを変更する
Models table 
modelID (primary key) model 
1      Jeep 
2      Ford 

Customer table 
id customer modelID (foreign key of Models.modelID) 
1  1234  1 
2  2345  2 

を試す場合は、モデルからジープレコードを削除しようとすると同様に、あなたは、顧客1234ため、エラーを取得しますmodelIDが1に設定されています。これは外部キーの場合です。私は3のmodelIDを持っている顧客1234を更新しようと同様にあれば3

Check this out

+0

Chrisにお礼を言いますが、あなたが推奨するリンクには、SMSSのルールの更新と削除という意味はありませんか?それは一般的なforrignの鍵理論について語っている。 – George2

+1

これらのルールに関するGoogleブックのリファレンスhttp://books.google.com/books?id=OgkmmR7-XxUC&pg=PP320&lpg=PP320&dq=sql+update+rule+and+delete+rule&source=bl&ots=OUmtEg2kNH&sig=6NxvAbBkCA9dpFnmrheIcEKVGOM&hl=en&ei = DyRfSpjIIcqwtgfvo5XgAw&sa = X& book_result&result =&resnum = 4 –

+0

Googleブックコンテンツを印刷できますか?私は頑張ったが、印刷することはできない。 :-) – George2

1

MSDN pageは良いスタートのように見えるの値を持つモデルのテーブルには主キーが存在しないため、エラーがスローされます。

+0

AakashMありがとうございました。このページは非常に参考になりました。混乱しています。「カスケード参照アクションもターゲットテーブルで定義されていれば...」、私の混乱は4つのアクション(NO ACTION | CASCADE | SET NULL | SET DEFAULT)を超えていると思われますが、他のアクションも定義できますか? – George2

+2

私はそう信じません。それ以上の複雑な動作、私たちが実際にやりたかったものになるでしょう。 – AakashM

3

ドキュメントはForeign Key Relationships Dialog Boxであるように見えます。

BTW、F1ヘルプはSSMS 2008でうまくいきました。私は上記のページ(私はもちろん半時間オンラインで検索した後)に私を連れて行きました。

+0

ありがとうジョン、残念ながらF1ヘルプは私のために助けになりません。 :-( – George2

+0

私はテーブルを右クリックして "Design"を選んだ後、デザイナーを右クリックして "Relations"を選びましたF1を押して助けを得ました。 –

関連する問題