Frage

Das Thema, wie Tabellen zu prüfen hat in unseren Gesprächen vor kurzem entstanden ... so wie ich Ihre Meinung auf, was ist der beste Weg, dies zu nähern. Wir haben eine Mischung aus beiden Ansätzen in unserer Datenbank (was nicht gut ist), da jeder vorheriger DBA tat, was er / sie glaubte, der richtige Weg war. Also müssen wir sie alle ein Modell folgen ändern.

CREATE TABLE dbo.Sample(
Name VARCHAR(20),
...
...
Created_By VARCHAR(20),
Created_On DATETIME,
Modified_By VARCHAR(20),
Modified_On DATETIME
)

CREATE TABLE dbo.Audit_Sample(
Name VARCHAR(20),
...
...
Created_By VARCHAR(20),
Created_On DATETIME,
Modified_By VARCHAR(20),
Modified_On DATETIME
Audit_Type VARCHAR(1)  NOT NULL
Audited_Created_On DATETIME
Audit_Created_By VARCHAR(50)
)

Ansatz 1: Speicher, in Audit-Tabellen, nur die Datensätze, die ersetzt werden / aus der Haupttabelle gelöscht (unter Verwendung von Systemtabelle gelöscht werden). So für jede Aktualisierung und DELETE in der Haupttabelle, die Aufzeichnung, die mit ‚Audit_Type‘ Spalte als wither ‚U‘ (für UPDATE) oder ‚D‘ (für DELETE)

in die Audit-Tabelle ersetzt wird eingefügt

INSERTs sind nicht testiert. Für aktuelle Version eines Datensatzes abfragen Sie immer die Haupttabelle. Und für Geschichte abfragen Sie Audit-Tabelle.

Pros: Scheint intuitiver, die früheren Versionen von Datensätzen zu speichern Nachteile: Wenn Sie die Geschichte eines bestimmten Datensatz wissen müssen, müssen Sie Audit-Tabelle mit Haupttabelle verbinden

.

appraoch. 2: Store, in Audit-Tabelle, die in jedem Datensatz Haupttabelle geht (unter Verwendung von System-Tabelle eingefügt)

Jeder Datensatz, der Haupttabelle EINZUFüGEN / AKTUALISIERT / Gelöscht wird, wird auch in Audit-Tabelle gespeichert. Also, wenn Sie einen neuen Datensatz einfügen wird es auch in Audit-Tabelle eingefügt. Nach der Aktualisierung wird die neue Version (von INSERTED-) Tabelle in Audit-Tabelle gespeichert. Wenn gelöscht, alte Version (von DELETED) Tabelle in Audit-Tabelle gespeichert wird.

Vorteile: Wenn Sie die Geschichte eines bestimmten Datensatz wissen müssen, haben Sie alles an einem Ort

.

Obwohl ich nicht alle von ihnen hier aufzulisten hat, jeder Ansatz hat seine Vor- und Nachteile?

War es hilfreich?

Lösung

Ich würde gehen mit:

  

appraoch 2: Store, in Audit-Tabelle, jeder Datensatz, der in der Haupt Tabelle geht   (Unter Verwendung von System-Tabelle eingefügt).

ist eine weitere Zeile pro Artikel wirklich die DB gehen zu töten? Auf diese Weise können Sie die komplette Geschichte zusammen haben.

Wenn Sie Zeilen löschen aus (eine Reihe alle älter als X Tag) kann man noch sagen, ob sich etwas geändert hat oder nicht:

  • , wenn eine Prüfung Zeile vorhanden ist (nicht gelöscht) Sie, wenn die Zeile in Frage geändert sehen können.
  • , wenn keine Prüfung Zeilen existieren für das Element (alle gelöscht wurden) nichts geändert (da jede Änderung der Audit-Tabelle schreibt, einschließlich völlig neuer Artikel)

Wenn Sie mit appraoch gehen. 1: und auszuspülen einen Bereich, wird es schwer sein (müssen Säuberung Datum erinnern) neue Einsätze gegen diejenigen sagen, wo alle Zeilen gelöscht wurden

Andere Tipps

Ein dritte Ansatz, den wir viel verwenden, um nur die interessanten Spalten zu prüfen und speichern Sie beide ‚neuen‘ und ‚alten‘ Wert in jeder Zeile.

Wenn Sie also Ihre Spalte "Name" haben, würde die Audit-Tabelle haben "name_old" und "name_new".

In INSERT-Trigger „name_old“ auf leer / null je nach Vorliebe und „name_new“ aus INSERTED- gesetzt. In UPDATE-Trigger "name_old" von deletiert und "name_new" von INSERTED gesetzt In DELETE-Trigger "name_old" von DELETED und "new_name" auf leere / null gesetzt.

(oder Sie verwenden ein FULL beitreten und einen Trigger für alle Fälle)

Für VARCHAR Felder, das ist nicht wie so eine gute Idee aussehen könnte, aber für INTEGER, DATETIME-, etc. bietet es den Vorteil, dass es sehr einfach, den Unterschied des Updates zu sehen.

d. wenn Sie ein Menge-Feld in Ihrem realen Tisch haben und es 5 bis 7 aktualisieren, Sie in Audit-Tabelle haben würden:

quantity_old  quantity_new
           5             7

Leicht können Sie berechnen, dass die Menge von 2 auf der bestimmten Zeit erhöht wurde.

Wenn Sie separate Zeilen in Audit-Tabelle haben, müssen Sie eine Zeile mit dem „nächsten“ beizutreten Differenz zu berechnen - was in einigen Fällen schwierig sein kann ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top