MSSQL ServerのCASCADE DELETEは、1つのテーブルにのみカスケードできます。ディメンション表との外部キー関係を持つ2つの表がある場合は、それらのいずれかにカスケードすることしかできません。 (これは、複数のパスをカスケードしてコンフリクトを作成するのを防ぐためです.C++では複数の継承が可能ですが、C#では1つの継承しかできません)。コード。
私は多くの人がすべてのケースでトリガーを使用することを選択したことがわかりました。外国のテーブルが1つだけの場合でも。これにより一貫性が保証され、データベースをメンテナンスするときに何を探すべきかが分かります。
複数のテーブルに削除をカスケードすることができれば、私はそれが最も好ましいオプションだと言います。しかし、この制限は水を混乱させるものであり、私は現在、このような行動をすべて持っているトリガーにもっと賛成しています。カスケードされた削除と更新のトリガーを使用する際のオーバーヘッドは、コーディングの点ではごくわずかですが、本当に一般的な標準的な方法が可能です。
EDIT:あなたが他の誰かに「受け入れ答え」を移動する場合があります
、私は上記のABOT間違っていたうちに働いてきました。
signleディメンションテーブルに対するON DELETE CASCADEの外部キー制約を複数のファクトテーブルに持たせることができます。
できないことは、ファクトテーブルに複数のディメンションテーブルに対するON DELETE CASCADEの外部キー制約があることです。
したがって、たとえば...
- 寸法表[人](IDのINT同一性)
- 寸法表[試験](IDのINT同一性)
- フェイス表[Exam_Score(PERSON_ID INT、exam_id INT、スコアINT)
個人または試験のいずれかが削除されている場合は、関連するExam_Scoreレコードも削除する必要があります。
これは、MS SQL ServerでON DELETE CASCADEを使用することができないため、トリガーが必要です。
(私にこれを説明しようとしたが、私は完全に彼のポイントを逃したMehrdadに謝罪。)
正確な理由は、彼らがトリガーを置く理由と似ています –
+1 - 私はこの状況について考えなかった。 –