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。カスケード削除では、ソフト削除シナリオでは、フラグが何であれ、リレーショナルグラフのすべてのレコードに削除済み、非アクティブのフラグが付けられます。おそらく違いは、datedeletedをnullからの値に変更することです。カスケード復元では、レコード参照を評価して、それらが削除された理由が、復元、再アクティブ化、削除解除されたレコードに関連するカスケード削除の結果であるかどうかを確認する必要があります。

保存されたデータに関して、カスケード復元操作はどのように処理されますか?

4

1 に答える 1

1

何が起こったかの結果だけでなく、いつ起こったか、そしてその理由も追跡したい場合、人々はしばしばトランザクションログを使用します。

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

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

于 2012-04-11T11:36:39.407 に答える