5つの子の外部キー関係を持つテーブルのWebアプリケーションで、「削除」機能の動作を変更する必要があります。かなり大規模なWebアプリケーションであるため、Webアプリケーションの変更を最小限に抑えるために、リスクが最も低く影響度が最も低いものを探しています。外部キーの関係を持つデータに対してSQLでソフト削除を実装する方法は?
私は2つのオプションを考えることができます:
はデフォルト
0
とテーブルdeleted
に列を追加し、1
は、レコードが削除されていることを示します。これには、テーブル上のすべての選択項目を更新する必要があります(また、孤立しているので、その子テーブルには、where deleted = 0
を含める必要があります)。ウェブアプリは古くてよく書かれていないので(繰り返しコード)、この変更が必要な場所がたくさんあるので、1つ以上の場所が見逃される危険性があります。レコードをテーブルの別のコピー、特に削除されたレコードに移動します。私は、すべての子テーブルも同様にミラーリングする必要があります。
オプション1は、アップフロント多くの努力のようですが、将来的にはより保守、オプション2は、アップフロント多くの仕事ではない、Webアプリケーションへの最小限の変更が、非常に厄介。他のオプションはありますか?
は、SQL Server 2016上にある場合は、多分、オプション1に働くだろうレベルのセキュリティを行https://msdn.microsoft.com/en-us/us-en/library/dn765131(= 0削除フィルタリング) .aspx – vercelli
動作を変更する理由は何ですか?これらのソフト削除されたレコードを使用する場合は、たとえば。オプション1よりも履歴データを表示するためには、基本的に唯一の選択肢です。アーキテクチャの観点からは、オプション2を使用して2つのデータベースミラーを同期させることもできます。特に、誰かがソースの構造変更を行う場合は問題があります。その点から、2つのデータベースの変更を追跡する必要があります。お勧めします。 – StormoPL