2009-06-05 5 views
1

Angenommen, Sie haben eine ServiceCall-Datenbanktabelle, in der alle an Sie gerichteten Serviceanrufe aufgezeichnet werden. Jeder dieser Datensätze enthält eine Viele-zu-Eins-Beziehung zum Kundendatensatz, in der gespeichert wird, welcher Kunde den Serviceanruf getätigt hat.Entitätslöschungsstrategie

Ok, nehmen wir an, der Kunde hat keine Geschäfte mehr mit Ihnen und Sie brauchen den Datensatz des Kunden nicht in Ihrer Datenbank. Der Name des Kunden muss nicht mehr in der Dropdown-Liste angezeigt werden, wenn Sie einen neuen ServiceCall-Datensatz erstellen.

Was machen Sie? Ermöglichen Sie dem Benutzer, den Datensatz des Kunden aus der Datenbank zu löschen?

Setzen Sie eine spezielle Spalte IsDeleted auf True für den Datensatz des Kunden, dann stellen Sie sicher, dass alle Dropdown-Liste nicht alle Datensätze lädt, die IsDeleted auf true festgelegt hat? Obwohl dies verhindert, dass die alten Datensätze bei internen Verknüpfungen zerbrechen, verhindert es auch, dass Benutzer einen neuen Datensatz mit demselben Namen wie der alte Kunde hinzufügen, oder?

Verbieten Sie das Löschen überhaupt? Nur zulassen, um es zu deaktivieren?

Alle anderen Strategien, die Sie verwendet haben? Ich schätze, dass jeder seinen Weg hat, ich muss nur deine Meinung sehen.

Natürlich ist das Obige ziemlich vereinfacht, normalerweise wird ein ServiceCall-Datensatz mit vielen anderen Entitätstabellen verknüpft. Bei allen wird das gleiche Problem auftreten, wenn sie gelöscht werden müssen.

Antwort

2

Ich bevorzuge es, ein IsDeleted-Flag zu setzen, einer der Vorteile ist, dass Sie immer noch über historische Informationen berichten können (alle Daten sind noch da).

Da es nicht möglich ist, einen anderen Kunden mit demselben Namen einzufügen, ist dies kein Problem, wenn Sie eine ID-Spalte (z. B. CustomerId) verwenden, die in der Regel automatisch ausgefüllt wird.

+0

Hallo Tetraneutron, Danke für Ihre Antwort. Ich habe ein "aber" für dich, haha. Aber, wenn der Benutzer des Systems (absichtlich oder versehentlich) einen neuen Kunden mit dem gleichen Namen hinzugefügt. Wird das System jetzt nicht 2 Kunden gleichen Namens haben und nicht miteinander verknüpft (historische Datensätze)? Ja, die interne CustomerID macht es einzigartig in der Datenbank, aber aus der Sicht des Benutzers ... hmmm. – Lasker

+0

Sie haben recht, es wird zwei Datensätze mit dem gleichen Wert für "Name" geben und sie werden nicht verwandt sein. Wie Sie bemerken, gibt es zwei Möglichkeiten, um in diese Situation vorsätzlich zu kommen - in diesem Fall sollte der Benutzer in der Lage sein, basierend auf anderen Daten (zB Land) zwischen den beiden zu unterscheiden - Sonst war es ein Unfall - in diesem Fall markieren Sie es als "gelöscht" und es wird nicht mehr im System angezeigt, so dass der Benutzer sie nicht sehen wird - Außer wie ich in historischen Berichten sage, die wahrscheinlich nicht den falschen Eintrag abholen (und somit nicht über und markiert als gelöscht) – Tetraneutron

0

Ich stimme zu @ Tetraneutron answer.

Zusätzlich können Sie eine Ansicht erstellen, die nur die aktiven Kunden auflistet, um das Auffüllen von Dropdown-Listen und dergleichen zu erleichtern.