2012-04-10 12 views
1

ソフト削除にはどのようなフィールドが一般的に使用されていますか?これらのいずれか、他の何か?ソフト削除カスケードリカバリに関する共通属性

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から値に変更することです。カスケード・リストアでは、レコード参照は、削除された理由が、リストアされたレコード、再アクティブ化されたレコード、削除されなかったレコードに関連するカスケード削除の結果であったかどうかを調べる必要があります。

カスケード復元操作は、保存されたデータに関してどのように処理されますか?あなたはそれが起こったとなぜ起こったことの結果でなく、ないだけを追跡したい場合には

答えて

1

、人々はしばしばトランザクションログを使用しています。

通常、トランザクションログテーブルには、イベントの日付/時刻、イベントの性質(挿入、更新、削除など)、およびアクションを実行したユーザーおよび/またはプロセスなどの列があります。また、トランザクション・ログと基本表の影響を受けるレコードとの間にリンクがあります。これは、基本テーブルの外部キーを使用してトランザクションログテーブルに行うことができますが、トランザクションログに基本テーブルへの外部キーが含まれることが一般的です。トランザクション・ログ表がさまざまな基本表の間で共用されている場合は、基本表の標識と基本表の外部キーが必要です。

削除が主な関心事である場合、ログエントリを削除に制限し、カスケード削除と他の削除を区別できます。一度にすべてのソフト削除(プライマリとカスケード)を書き込むためにトランザクションラッパーを使用することも考えられます。ログに「ビジネストランザクションID」としてID値やGUIDなどの何らかの識別子を含めることができ、このIDを同じ操作の一部であるすべてのエントリに配置することができます。これは、何が起こったのか、起こったのか、起こったのか、それが起こったのかを明確に示します。この情報を使用して、カスケードリストアを実行するなど、特定のトランザクションを元に戻す方法を決定することができます。

+0

主な問題は復元です。削除はかなり簡単です。しかし、カスケードの逆の方法で復元する場合、カスケードグラフが復元されている間に、復元されるグラフが非アクティブであるとフラグされている間にグラフが既に削除されている可能性があるかどうかを判断することは困難です。 –

+0

リストアの詳細については、この質問を参照してください:http://stackoverflow.com/q/10111699/1026459 –

+0

@TravisJ - 私は、私のお勧めのトランザクションログテーブルソリューションには「ビジネストランザクションID」が含まれていることを指摘しましたカスケードされたものを明確にするのに役立ちます。同じビジネストランザクションIDを持つすべての変更を見つけることで、削除時に完了したすべてのステップが見つかります。これらの手順を逆に実行して復元を実行します。カスケード削除されたアイテムに何らかの形で追加の依存関係があり、別のビジネストランザクションIDの下で別の時点でソフト削除されている可能性があります。これはまれであるべきです。 –

関連する問題