2

主キーまたは外部キーとして他の多くのテーブルによって参照されている行を削除するにはどうすればよいですか?

各参照を適切な順序で削除する必要がありますか、または linq to sql などでこれを実行する「自動」の方法はありますか?

4

3 に答える 3

5

ストアド プロシージャを介してすべてのデータ アクセスを実行している場合は、マスターの削除ストアド プロシージャでこれを処理する必要があります。新しい関連テーブルを追加するときにそれを維持する必要がありますが、IMO では自分が何をしているのかを考える必要があります。これは良いことです。

個人的には、カスケード削除には近づきません。代わりに、既存の子についてユーザーに警告する必要がある場合に、多数のレコードを誤って削除するのは簡単すぎます。

于 2009-12-03T19:49:46.950 に答える
3

多くの場合、データベース内の何かを削除する最善の方法は、IsDeleted 列を設定し、他のすべてのクエリでその行を無視することによって、単純に「仮想的に」削除することです。

頻繁にリンクされたテーブルの場合、削除は非常にコストがかかる可能性があり、削除の実行中にロックが原因で他のクエリが失敗する可能性があります。

システムに「IsDeleted」行を永久に残すか (監査に役立つ場合があります)、システムがアイドル状態のときに戻って実際に削除することができます。

于 2009-12-04T00:05:33.003 に答える
1

ON DELETE CASCADEで外部キーを設定している場合は、DELETE master WHERE id =:xだけでデータベースのプルーニングを処理します。

于 2009-12-03T18:51:43.617 に答える