0

エントリが削除された場合でも、レポート用のエントリを処理したいのですが。

たとえば(単純なシナリオ)、2つのテーブルがあります。

  1. 管理者
  2. AdministratorActions

管理者が何かを行うと、それはAdministratorActionsテーブルに保存されます。Administrators一部の管理者(エントリ)をテーブルから削除できるはずです。

ただし、テーブルから一部の管理者を削除(実際の削除)するとAdministratorActions、削除された名前までのアクションを追跡できなくなります。

IsDeletedそのための最も簡単な解決策は、テーブルに列を追加するだけで、Administrators実際にはエントリを削除しないことです。しかし、それは本当に醜いDB設計だと思います。

それを良い方法で行うための他の良い解決策はありますか?

背景は次のとおりです。実行されたすべてのアクションを報告する必要があり、アクションをイニシエーター(テーブルの管理者名)まで追跡できる必要がありますAdministrators

私はあなたの助けにとても感謝しています。

4

2 に答える 2

2

全然ダサいとは思いません。

Administrators レコードを物理的に削除したい場合、AdministratorActions から FOREIGN KEY 制約を作成することはできません。これは、IMHO の方がはるかに悪い状況です。

参照整合性を維持するために、レコードに対して何らかの形式の IsDeleted/Status フラグを設定することはよくあることです。これにより、FK 制約の恩恵を受けることができます。

ID を介してリンクする代わりに、AdministratorActions テーブルに管理者のデータを保存することもできます。ただし、そのレベルのデータ複製が本当に必要かどうかを自問する必要があります。

于 2012-04-04T14:59:45.797 に答える
1

AdministratorActionsテーブルとそのAdministratorName列を非正規化できます。

于 2012-04-04T14:57:37.773 に答える