0

カスケード削除を使用して参照がなくなったときに、一部のデータが自動削除されるようにしようとしています。スタック オーバーフローに基づく偽のデータベースで説明します。

私はPostテーブルを持っています。各投稿には、ゼロから多数のタグがあります。

したがって、次のようになります。

投稿 <-> PostTags <-> タグ

例えば。

投稿 1 にはタグ「A」、「B」、「C」があり、投稿 2 にはタグ「C」、「D」があります。

今、私がやっていることは、投稿 2 のすべてのタグを削除するとき (例: DELETE FROM PostTags WHERE PostId = 2)、タグ 'D' も削除したいということです。Tag->PostTagsカスケード削除でこれを処理できると思いましたが、もちろん、またはからカスケードダウンした場合のみですPost->PostTags

これを処理する方法がわかりません。

人々がトリガーの使用を提案するのではないかと心配しています:((システムがさらに複雑になります)。

考え?

注: DB は MS Sql2008 です。

4

2 に答える 2

2

残念ながら、ここではカスケードを使用できません。子を参照する単一の親がないため、多対多の関係がある場合、カスケードは機能しません (この場合、Tags テーブルを参照できる複数の PostTags エントリがあります)。

トリガーはこれを行う方法ですが、お勧めしません。むしろ、データ層で、PostTags テーブルのエントリを削除した後、参照されなくなったタグを削除することをお勧めします。エントリの削除を行うストアド プロシージャがある場合は、そこでこれを行うことを検討することをお勧めします (同様に行うのも比較的簡単です)。

于 2009-01-11T02:19:38.837 に答える