2009-06-05 19 views
1

あなたに行われたすべてのサービスコールを記録するServiceCallデータベーステーブルがあるとします。このレコードには、顧客レコードとの関係が多岐にわたり、どの顧客がサービスコールを行ったかが記録されます。エンティティ削除戦略

お客様が取引を停止し、データベースにお客様の記録が必要ないとします。新しいServiceCallレコードを作成するときに、顧客名がドロップダウンリストに表示される必要はなくなりました。

あなたは何をしていますか? ユーザーがデータベースから顧客のレコードを削除できるようにしますか?

顧客のレコードに対して特別な列IsDeletedをtrueに設定して、すべてのドロップダウンリストがIsDeletedがtrueに設定されているすべてのレコードをロードしないことを確認しますか?これにより、古いレコードが内部結合で破られることはなくなりますが、古い顧客と同じ名前の新しいレコードを追加することもできなくなります。

削除を一切許可しませんか?それを '無効にする'ことを許可しますか?

他の戦略はありますか?私は誰もが自分の道を持っていると推測しています、私はあなたの意見を見る必要があります。

もちろん、上記は非常に単純化されています。通常、ServiceCallレコードは他の多くのエンティティテーブルにリンクします。それらのすべてが削除される必要があるときに同じ問題に直面します。

答えて

2

IsDeletedフラグを設定することをお勧めします。これは、履歴情報(すべてのデータはまだそこにあります)でレポートできます。

同じ名前の別の顧客を挿入できないという問題は、一般に自動入力されるID列(CustomerIdなど)を使用すると問題ありません。

+0

こんにちは、Tetraneutron、 あなたの答えをありがとう。 私はあなたのために、しかし、ハハを持っています。 しかし、システムのユーザーが(意図的にまたは偶然に)同じ名前の新規顧客を追加した場合。システムは現在、同じ名前の2人の顧客を持ち、お互いにリンクされていません(履歴レコード)。はい、内部のCustomerIDはデータベース内ではユニークにしますが、Userの観点からは...、うん。 – Lasker

+0

「名前」と同じ値を持つ2つのレコードがありますが、関連はありません。あなたが指摘しているように、意図的なこの状況に入るには2つの方法があります。その場合、ユーザーは他のデータ(国など)に基づいて2つを区別できる必要があります。そうでなければ事故でした。それは "削除された"とそれはもはやシステムに表示されないので、ユーザーはそれらを見ることはできません - 私は歴史的なレポートでは、おそらく間違ったエントリをピックアップしません(したがって、削除された) – Tetraneutron

0

@ Tetraneutronのanswerに同意します。

さらに、アクティブな顧客のみを一覧表示するVIEWを作成すると、ドロップダウンリストなどをより簡単に入力できるようになります。