Daten ändern die Geschichte mit audit-Tabellen: Gruppierungen verpasst
Können sagen, ich möchte zum speichern von Benutzern und Gruppen in einer MySQL-Datenbank. Sie haben eine Beziehung n:m. Um den überblick über alle änderungen hat jede Tabelle eine audit-Tabelle user_journal, group_journal und user_group_journal. MySQL-Trigger, Kopie des aktuellen Datensatzes an die journal-Tabelle auf jeden INSERT-oder UPDATE - (LÖSCHT werden nicht unterstützt, da bräuchte ich die information, welche Anwendung der Benutzer gelöscht hat, den Datensatz--und so gibt es eine Flagge active
dass auf 0
statt einer Löschung).
Meine Frage/problem ist: Vorausgesetzt, ich bin Zugabe von 10 Benutzer in einer Gruppe auf einmal. Wenn ich später dann durch die Geschichte der Gruppe in der Benutzeroberfläche der Anwendung möchte ich sehen, der das hinzufügen von 10 Benutzern als einen Schritt und nicht als 10 voneinander unabhängigen Schritten. Ist es eine gute Lösung, um die Gruppe solche Veränderungen zusammen? Vielleicht ist es möglich, einen Zähler, der jedes mal erhöht wird, wird der trigger ausgelöst...? Ich war noch nie mit Triggern.
Die beste Lösung wäre, um gemeinsam alle änderungen innerhalb einer Transaktion. So, wenn der Benutzer von updates den Namen der Gruppe ein und fügt 10 Benutzer in einem Schritt (one form-controller-Aufruf) dies wäre ein Schritt in der Geschichte. Vielleicht ist es möglich, zu definieren, eine zufällige hash-oder Inkrementieren eines globalen Zähler jedes mal, wenn eine Transaktion gestartet wird und Zugriff auf diesen Wert im trigger?
Ich will nicht, um die Tabelle design komplexer als die eines journal-Tabelle für jede "echte" Tabelle. Ich will nicht zum hinzufügen einer Transaktions-hash in jede Datenbank-Tabelle (also die "echten" Tabellen, nicht die audit-Tabellen--dort, es wäre in Ordnung natürlich). Ich würde auch gerne eine Lösung haben, die in der Datenbank-nicht in der Anwendung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Spielte ich ein wenig herum und jetzt habe ich eine sehr gute Lösung gefunden:
Das Datenbank-setup -
Die Anwendung von code (PHP)
Und ... das Ergebnis
Bitte lassen Sie mich wissen, wenn es einen Punkt gibt, habe ich verpasst. Werde ich haben, um eine
action
Spalte, um die audit-Tabellen aufnehmen können Löschungen.Davon ausgegangen, dass Sie rate der Zugabe einer charge von Benutzern zu einer Gruppe ist weniger als einmal in der Sekunde....
Ich würde vorschlagen, einfach das hinzufügen einer Spalte vom Typ timestamp mit dem Namen etwas wie
added_timestamp
zu denuser_group
unduser_group_journal
. MACHEN Sie NICHT DIESE EINE AUTO-UPDATE-TIMESTAMP-ODER STANDARD-ES CURRENT_TIMESTAMP, anstatt in Ihrem code, wenn Sie einfügen, indem Sie einen Stapel in der user_group, berechnet das aktuelle Datum und die Zeit dann manuell einstellen, dies wird für alle die neue user_group aufnehmen.Müssen Sie möglicherweise zu zwicken Ihr setup, um das Feld hinzufügen kopiert werden, der rest der neuen
user_group
Datensatz in deruser_group_journal
Tabelle.Dann, wenn Sie eine Abfrage/Sicht, die Gruppen auf eine
group_id
und die neueadded_timestamp
Spalte.Wenn mehr treue nötig ist, dann 1 Sekunde könnten Sie eine string-Spalte und füllen Sie es mit einem string-Darstellung eines granularen Zeit (die Sie brauchen, um zu generieren, jedoch die Bibliotheken Ihre Sprache verwenden können).