ソフト削除にはどのようなフィールドが一般的に使用されていますか?これらのいずれか、他の何か?ソフト削除カスケードリカバリに関する共通属性
bool IsDeleted // nice because the default value is 0 (no) just in case
date DateDeleted // is this a common one?
date DateCreated // more of a temporal db aspect
date DateModified // same with respect to created
私が尋ねる理由は、ソフト削除を使用する場合、完全性を維持するためにカスケードを実装する必要があるからです。しかし、実際のトリックはカスケード削除ではなく、むしろ簡単です。
The trick is cascade restoring
。カスケード削除では、ソフト削除シナリオでは、リレーショナルグラフのすべてのレコードは、フラグが何であれ、削除された、非アクティブであるとフラグが立てられます。おそらく、日付が変更された日付をnullから値に変更することです。カスケード・リストアでは、レコード参照は、削除された理由が、リストアされたレコード、再アクティブ化されたレコード、削除されなかったレコードに関連するカスケード削除の結果であったかどうかを調べる必要があります。
カスケード復元操作は、保存されたデータに関してどのように処理されますか?あなたはそれが起こったとなぜ起こったことの結果でなく、ないだけを追跡したい場合には
主な問題は復元です。削除はかなり簡単です。しかし、カスケードの逆の方法で復元する場合、カスケードグラフが復元されている間に、復元されるグラフが非アクティブであるとフラグされている間にグラフが既に削除されている可能性があるかどうかを判断することは困難です。 –
リストアの詳細については、この質問を参照してください:http://stackoverflow.com/q/10111699/1026459 –
@TravisJ - 私は、私のお勧めのトランザクションログテーブルソリューションには「ビジネストランザクションID」が含まれていることを指摘しましたカスケードされたものを明確にするのに役立ちます。同じビジネストランザクションIDを持つすべての変更を見つけることで、削除時に完了したすべてのステップが見つかります。これらの手順を逆に実行して復元を実行します。カスケード削除されたアイテムに何らかの形で追加の依存関係があり、別のビジネストランザクションIDの下で別の時点でソフト削除されている可能性があります。これはまれであるべきです。 –