2012-04-04 10 views
0

エントリが削除されたとしても、レポート用のエントリを処理したいと考えています。例えば削除されたオブジェクトのSQL Serverデータベースアーキテクチャ(デザイン)+レポート

(単純なシナリオ)、私は2つのテーブルがあります。

  1. 管理者
  2. AdministratorActions

管理者が何かをする場合、それはAdministratorActionsテーブルに保存されますが。一部の管理者(エントリ)をAdministratorsテーブルから削除する必要があります。

しかし、一部の管理者を削除すると(実際の削除)、AdministratorActionsのアクションを追跡して削除した名前に戻すことはできません。

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

これを行うには他に良い解決策がありますか?

背景がある:我々はすべて完了アクションを報告しなければならないと開始剤(表Administratorsの管理者の名前に戻って行動を追跡することができるはず

私はあなたの助けのために非常に感謝してい

答えて

2

を私はそれがすべてで醜いだとは思わない。

あなたは物理的にアドミを削除する場合nistratorsが記録すると、AdministratorActionsからFOREIGN KEY制約を作成することができなくなります.MIMHOは非常に悪い状況です。

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

また、idを介してリンクするのではなく、AdministratorActionsテーブルに管理者用のデータを格納することもできます。しかし、データ複製のレベルが本当に必要かどうかを尋ねる必要があります。

+0

あなたの素早い答えをありがとう。私は、旗のシナリオを使用すると思います。しかし、マイクロソフトが、素晴らしいレポート機能を実装したForefront Identity Manager(FIM)などの本当の大きな製品にこのようなフラグを使用しているとは思えません。 – user1011394

1

あなたはそれにあなたのAdministratorActionsテーブルとAdministratorName列を非正規化することができます。

+0

これは別の解決策です。しかし、上記の2つの表は単なる例であり、実際には多くの表を持つ複雑なDB設計です。したがって、DBサイズは大きくなり、サイズは大きくなります。 – user1011394

+0

この場合、私は@ AdaTheDevの答えに同意します。あなたはステータスフラグを使用するほうが良いでしょう。 – Khan

+0

あなたの答えJeffに感謝します。 – user1011394

関連する問題