Jedes Mal, wenn ich eine neue Datenbank entwerfen muss, denke ich lange darüber nach, wie ich das Datenbankschema einrichten soll, um ein Überwachungsprotokoll der Änderungen zu führen.
Hier wurden bereits einige Fragen dazu gestellt, aber ich stimme nicht zu, dass es für alle Szenarien einen einzigen besten Ansatz gibt:
- Datenbankdesign für Revisionen
- Bestes Design für eine Änderungsprotokoll-Überwachungsdatenbanktabelle
- Ideen zum Datenbankdesign zur Erfassung von Audit-Trails
Ich bin auch auf diesen interessanten Artikel über das Verwalten eines Protokolls von Datenbankänderungen gestoßen , in dem versucht wird, die Vor- und Nachteile jedes Ansatzes aufzulisten. Es ist sehr gut geschrieben und enthält interessante Informationen, aber es hat meine Entscheidungen noch schwieriger gemacht.
Meine Frage ist: Gibt es eine Referenz, die ich verwenden kann, vielleicht ein Buch oder so etwas wie einen Entscheidungsbaum, auf den ich mich beziehen kann, um anhand einiger Eingabevariablen zu entscheiden, welchen Weg ich gehen soll, wie:
- Die Reife des Datenbankschemas
- Wie die Protokolle abgefragt werden
- Die Wahrscheinlichkeit, dass Datensätze neu erstellt werden müssen
- Was wichtiger ist: Schreib- oder Leseleistung
- Art der zu protokollierenden Werte (Zeichenfolge, Zahlen, Blobs)
- Speicherplatz verfügbar
Die Ansätze, die ich kenne, sind:
1. Fügen Sie Spalten für das erstellte und geänderte Datum und den Benutzer hinzu
Tabellenbeispiel:
- Ich würde
- value_1
- value_2
- value_3
- Erstellungsdatum
- modifiziertes_Datum
- erstellt von
- geändert durch
Hauptnachteile: Wir verlieren die Geschichte der Änderungen. Rollback nach Commit nicht möglich.
2. Fügen Sie nur Tabellen ein
- Ich würde
- value_1
- value_2
- value_3
- von
- zu
- gelöscht (Boolean)
- Benutzer
Hauptnachteile: Wie halte ich Fremdschlüssel auf dem neuesten Stand? Riesiger Platzbedarf
3. Erstellen Sie für jede Tabelle eine separate Verlaufstabelle
Beispiel für eine Verlaufstabelle:
- Ich würde
- value_1
- value_2
- value_3
- value_4
- Benutzer
- gelöscht (Boolean)
- Zeitstempel
Hauptnachteile: Muss alle geprüften Tabellen duplizieren. Wenn sich das Schema ändert, müssen auch alle Protokolle migriert werden.
4. Erstellen Sie eine konsolidierte Verlaufstabelle für alle Tabellen
Beispiel für eine Verlaufstabelle:
- Tabellenname
- Feld
- Benutzer
- neuer Wert
- gelöscht (Boolean)
- Zeitstempel
Hauptnachteile: Kann ich die Datensätze bei Bedarf problemlos neu erstellen (Rollback)? Die Spalte new_value muss eine große Zeichenfolge sein, damit alle verschiedenen Spaltentypen unterstützt werden können.