2012-04-10 3 views
1

Welche Art von Feldern werden im Allgemeinen verwendet, um Soft Delete zu begleiten? Irgendwelche von diesen, andere?soft delete gemeinsame Attribute in Bezug auf Kaskadenwiederherstellung

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 

Der Grund, warum ich frage ist, dass, wenn Soft-Löschungen mit Kaskadierung muss noch um Integrität zu erhalten umgesetzt werden. Der wahre Trick ist jedoch nicht Kaskadenlöschung, was ziemlich einfach ist.

The trick is cascade restoring. Beim kaskadierten Löschen mit einem Szenario für das Löschen werden alle Datensätze im relationalen Diagramm als gelöscht markiert, inaktiv, unabhängig vom Flag. Vielleicht besteht der Unterschied darin, das gelöschte Datum in einen Wert von null zu ändern. Bei der Kaskadenwiederherstellung müssen Datensatzverweise ausgewertet werden, um festzustellen, ob der Grund für das Löschen ein Ergebnis eines kaskadierenden Löschvorgangs war, der sich auf den wiederherzustellenden, reaktivierten und wiederhergestellten Datensatz bezieht.

Wie werden Kaskadenwiederherstellungsvorgänge in Bezug auf gespeicherte Daten behandelt?

Antwort

1

In einem Fall, in dem Sie nicht nur die Ergebnisse verfolgen wollen, was passiert ist, aber auch wenn es passiert ist und warum verwenden die Menschen oft ein Transaktionsprotokoll.

Eine Transaktionsprotokolltabelle enthält normalerweise Spalten wie: Datum/Uhrzeit des Ereignisses, Art des Ereignisses (Einfügen, Aktualisieren, Löschen, ...) und den Benutzer und/oder Prozess, der die Aktion ausgeführt hat. Es gibt auch eine Verknüpfung zwischen dem Transaktionsprotokoll und dem betroffenen Datensatz in der Basistabelle. Dies kann mit einem Fremdschlüssel in der Basistabelle für die Transaktionsprotokolltabelle erfolgen, aber es ist häufiger, dass das Transaktionsprotokoll einen Fremdschlüssel für die Basistabelle enthält. Wenn die Transaktionsprotokolltabelle für verschiedene Basistabellen freigegeben ist, benötigen Sie ein Basistabellenkennzeichen und einen Fremdschlüssel für die Basistabelle.

In Ihrem Fall, wenn Löschvorgänge das Hauptproblem darstellen, können Sie Protokolleinträge auf Löschvorgänge beschränken und zwischen einem kaskadierten Löschvorgang und anderen Löschvorgängen unterscheiden. Sie könnten (sollten) auch in Betracht ziehen, Transaktions-Wrapper zu verwenden, um alle Soft-Löschungen (primary plus cascading) gleichzeitig zu schreiben. Sie können eine Art Kennung wie einen Identitätswert oder eine GUID als "Geschäftsvorgangs-ID" in Ihr Protokoll aufnehmen und diese ID in jeden Eintrag derselben Operation einfügen. Das gibt Ihnen einen klaren Hinweis darauf, was passiert ist, wann es passiert ist, warum es passiert ist und welche Aufzeichnungen es passiert ist. Sie können diese Informationen verwenden, um zu entscheiden, wie eine bestimmte Transaktion storniert wird, einschließlich einer Kaskadenwiederherstellung.

+0

Das Hauptproblem ist die Wiederherstellung. Das Löschen ist ziemlich einfach. Bei einer umgekehrten Kaskadendarstellung ist es jedoch schwer zu sagen, ob es möglich ist, dass während das Kaskadendiagramm wiederhergestellt wird, die Abhängigkeiten dieses Graphen bereits entfernt wurden, während das wiederherzustellende Diagramm als inaktiv markiert wurde. –

+0

Siehe diese Frage für eine ausführlichere Frage zur Wiederherstellung: http://StackOverflow.com/Q/10111699/1026459 –

+0

@TravisJ - Ich wies in meiner Antwort darauf hin, dass meine empfohlene Transaktionsprotokolltabelle Lösung eine "Geschäftstransaktions-ID" enthält ist entscheidend für die Klärung dessen, was kaskadiert wurde. Wenn Sie alle Änderungen mit derselben Geschäftsvorgangs-ID finden, finden Sie alle Schritte, die zum Löschzeitpunkt abgeschlossen wurden. Sie führen diese Schritte aus, um eine Wiederherstellung durchzuführen. Das einzige mögliche Problem, auf das Sie stoßen könnten, ist, wenn die kaskadierten gelöschten Elemente irgendwie auch zusätzliche Abhängigkeiten haben, die möglicherweise zu einem anderen Zeitpunkt unter einer anderen Geschäftsvorgangs-ID weich gelöscht wurden. Dies sollte selten sein. –