Bester Weg, um eine Datenbank und eine Tabelle zu entwerfen, um Aufzeichnungen über Änderungen zu halten?


15

Ich muss eine Verlaufsfunktion für ein Projekt einrichten, um frühere Änderungen nachzuverfolgen.

Nehmen wir an, ich habe gerade zwei Tische:

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

Beispiel: Ich habe eine Zeile in Notizen und der Benutzer möchte die Nachricht ändern. Ich möchte den Status vor und nach der Änderung verfolgen.

Was wäre der beste Ansatz, um in jeder dieser Tabellen eine Spalte einzurichten, die besagt, ob ein Element "alt" ist? 0 wenn aktiv ODER 1 wenn gelöscht / unsichtbar.

Ich möchte auch eine history ( AUDIT TRAIL) -Tabelle erstellen, die idden vorherigen Status und idden neuen Status enthält. Auf welche Tabelle beziehen sich diese IDs?


Antworten:


5

Bitte ansehen

http://www.codeproject.com/Articles/105768/Audit-Trail-Tracing-Data-Changes-in-Database

Es ist eine sehr gute Lektüre zu den Ansätzen zum Erstellen eines Audit Trails in Ihrem Datenbankdesign. Audit Trails sind für die Implementierung einer Datenbank erforderlich. Sie sollten immer die Aktionen der Datenbankbenutzer im System sehen können.

Wir können verfolgen, welche Zeilen in unserem PTA-System (Point in Time) geändert wurden, indem wir allen Tabellen von PTA-Interesse einige Standard-PTA-Spalten (Point in Time) hinzufügen.

Ich schlage folgendes vor:

DateCreated  the actual date on which the given row was inserted.
DateEffective  the date on which the given row became effective.
DateEnd  the date on which the given row ceased to be effective.
DateReplaced  the date on which the given row was replaced by another row.
OperatorCode  the unique identifier of the person (or system) that created the row.

Was ist der beste Weg, um 'Lösung Nr. 2: Dedicated Data-Tracing Table' für eine OLTP-Anwendung anzuwenden?
AA.SC,

Die Firma, für die ich arbeite, verwendet derzeit mehrere Schemata, eines speziell für den Audit-Trail. Die Audittabelle ist bei Verwendung von Lösung 2 (genau das, was wir hier bei der Arbeit verwenden) wirklich recht einfach aufgebaut. Unterteilen Sie die verschiedenen Aufgaben (Bestandsliste aktualisiert, Kundeninformationen aktualisiert oder gelöscht, Gutschriften für Kunden usw. usw.) und erstellen Sie die Überwachungstabelle auf der Grundlage der allgemeinen Aktionen, zu denen Benutzer in der Lage sind. Beantwortet dies Ihre Frage bezüglich der Anwendung von Lösung 2 auf Ihre Datenbank, wenn nicht, klären Sie dies bitte. Vielen Dank!
Hector

Eigentlich prüfen wir bereits Daten mit dem ersten Ansatz mithilfe von Prüftabellen, aber die Prüfdaten werden immer umfangreicher und jetzt möchten wir unseren Ansatz umstellen, indem wir nur Daten anhand geänderter Spalten erfassen. Meine Frage ist, wie ich diesen Ansatz erreichen kann? Wie kann man am besten verfolgen, welche Spalte der Tabelle geändert wurde? .. Wenn eine Tabelle mehr als 20 Spalten enthält, enthält eine davon DataType-Text.
AA.SC,

9

Beim Entwerfen von Versionsverwaltungsfunktionen für Ihre Daten gibt es mehrere (meiner Meinung nach) Mindestanforderungen:

  • Jede Version der Daten sollte eigenständig und unabhängig von anderen Versionen sein. Dies bedeutet, dass keine Flagge oder ein anderer Indikator anzeigt, welche die aktuelle Version ist und welche "Historie" ist. Es bedeutet auch, dass die Entität aktualisiert wird, indem nur eine neue Version eingefügt wird. Eine Aktualisierung der vorherigen Versionen ist nicht erforderlich.
  • Vermeiden Sie das, was ich als zeilenübergreifende Abhängigkeit bezeichne. Hier muss ein Feld (End_Date) einer Zeile mit einem anderen Feld (Start_Date) einer anderen Zeile synchron bleiben. Dies erschwert die Arbeit mit den Daten und ist eine ausgezeichnete Quelle für Anomalien.
  • Die aktuelle Version und alle früheren Versionen sollten sich in derselben Tabelle befinden. Auf diese Weise können Sie mit derselben Abfrage frühere Daten "ab" einem bestimmten Datum anzeigen und die aktuellen Daten anzeigen.
  • Fremdschlüssel für versionierte Daten sollten genauso funktionieren wie normale (nicht versionierte) Daten.
  • Das Design sollte so einfach oder allgemein verständlich sein, dass der Lernaufwand für neue Entwickler minimiert wird.

Hier sind die Folien einer Präsentation, die ich einige Male auf Technologiemessen gehalten habe. Es wird erläutert, wie all dies durchgeführt werden kann. Und hier ist ein Dokument, das detaillierter geht. Ich muss mich für das Dokument entschuldigen - es ist noch in Arbeit und nicht alle Abschnitte sind abgeschlossen. Aber es sollte Ihnen alle Informationen liefern, die Sie benötigen, um alles zu implementieren, von der einfachen Versionierung bis zum vollständigen bi-temporalen Zugriff.


1
Sehr schöne Punkte! Allerdings verstehe ich das nicht ganz This means no flag or other indicator showing which is the current version and which are "history.", wenn kein Flag oder Indikator, wie wir die aktuelle Version von der Verlaufsversion unterscheiden? Insbesondere basierend auf Ihrem dritten Punkt, den Sie vorschlagen, sollten sie in derselben Tabelle sein.
GMsoF

Die Präsentation zeigt ein Beispieldesign, einschließlich der Abfrage zum Lesen aktueller und / oder früherer Daten aus den Tabellen. Wenn es interessant genug ist, um tiefer zu gehen, enthält das Dokument viel mehr Details.
TommCatt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.