UserとPostの間に 1..* 関係があります。(1 人のユーザーが複数の投稿を持っている)
Postには「UserId」と呼ばれる FK があり、これはUserテーブルの「UserId」フィールドにマップされます。
この FK を Cascade UPDATE/DELETE として設定しようとしましたが、次のエラーが発生します。
「ユーザー」テーブルは正常に保存されました 「投稿」テーブル - リレーションシップ「FK_Posts_Users」を作成できません。
テーブル 'Posts' に FOREIGN KEY 制約 'FK_Posts_Users' を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更します。制約を作成できませんでした。以前のエラーを参照してください。
PostHelpfulというテーブルがあります。1 つの投稿には多くの役立つ投稿があります。
Helpful には User へのカスケード FK があります (そのため、User が削除されると、その Helpful も削除されます)。
しかし、これが「複数のカスケードパス」に対する不満の原因だと思います。
ユーザーを削除すると(現在)、そのユーザーの役立つ情報が削除されるためです。しかし、ポストにもカスケードを追加しようとしていますが、ポストを削除してから、そのポストのヘルプフルを削除しようとします(ヘルプフルにはポストへのカスケード FK もあるため)。そのシナリオでは、SQL はどのカスケード FK を選択しますか?
問題の 3 つのテーブルのデータベース ダイアグラムを次に示します。
ご覧のとおり、「PostHelpful」は「Post」と「User」の両方の子です (両方に FK があります)。
では、両方のキーをカスケードすることはできませんか? 役立つもの(およびユーザーを参照する他のテーブル)を手動で削除するには、「ユーザー」(削除後)にトリガーが必要ですか。