Frage

Für meine Anwendung gibt es mehrere Entitätsklassen, Benutzer, Kunden, Post, usw.

Ich bin über die Datenbank zu entwerfen, und ich möchte das Datum speichern, wenn die Entitäten geschaffen wurden und aktualisiert. Dies ist, wo es schwierig wird. Sicher ist eine Option created_timestamp und update_timestamp Spalten für jede der Entität Tabellen hinzufügen, aber das ist nicht, dass redudant?

Eine andere Möglichkeit könnte sein, eine Log-Tabelle zu erstellen, die diese Informationen speichert, und es könnte gemacht werden, enthalten den Überblick über Updates für jeder Einheit.

Alle Gedanken? Ich lehnte die letztere an der Umsetzung.

War es hilfreich?

Lösung

Die Single-log-table-for-all-tables Ansatz hat zwei Hauptprobleme, die ich mir vorstellen kann:

  1. Das Design der Log-Tabelle wird (wahrscheinlich) das Design aller anderen Tabellen beschränken. Höchstwahrscheinlich wird der Log-Tabelle würde eine Spalte mit dem Namen Tablename und dann eine weitere Spalte namens PKValue (die den Primärschlüsselwert für den Datensatz speichern, würden Sie Anmeldung). Wenn einige Ihrer Tabellen Verbindung Primärschlüssel haben (das heißt mehr als eine Spalte), dann das Design Ihrer Log-Tabelle würde dies zu berücksichtigen hat (wahrscheinlich durch Spalten wie PKValue1, PKValue2 etc.) Erhalten.
  2. Ist dies eine Web-Anwendung von einer Art, dann ist die Benutzeridentität, die von einem Trigger wäre die Anwendung des Konto anstelle der ID der Web-App Benutzer zur Verfügung stehen würde (was sehr wahrscheinlich ist, was Sie wirklich speichern möchten in Ihrem CreatedBy Feld). Dies würde Sie nur Datensätze unterscheiden zwischen von Ihrem Web-App-Code und Aufzeichnungen sonst erstellt erstellt helfen.

CreatedDate und ModifiedDate Spalten sind nur nicht überflüssig, weil sie in jeder Tabelle definiert sind. Ich würde mit diesem Ansatz stecken und setzen ein und Update löst auf jedem Tisch die Spalten zu füllen. Wenn ich auch den Endbenutzer benötigt aufzuzeichnen, die die Änderung vorgenommen hat, würde ich die Trigger überspringen und die Zeitstempel und Benutzerfelder aus meinem Anwendungscode füllen.

Andere Tipps

Ich mache das letztere mit einer „log“ oder „Ereignisse“ Tabelle. Meiner Erfahrung nach wird die „aktualisiert“ Zeitstempel frustrierend ziemlich schnell, weil ein großer Teil der Zeit, die Sie sich in einem Fix finden, wo Sie die neueste Update-Zeit nicht nur wollen.

Wie oft werden Sie brauchen, um die erstellt / aktualisiert Zeitstempel in der Präsentationsschicht enthalten? Wenn die Antwort etwas mehr als „einmal in einem großen großen, während“ ist, ich glaube, Sie wäre besser, indem man die Spalten in jeder Tabelle serviert werden.

Bei einem Projekt ich vor ein paar Jahren gearbeitet, wir Trigger implementiert, die aktualisiert, was wir eine Audit-Tabelle genannt (es grundlegende Informationen über die Änderungen gespeichert gemacht werden, pro Tisch eine Audit-Tabelle). Dazu gehörten Änderungsdatum (und zuletzt geändert wurde).

Sie wurden nur zu Schlüsseltabellen angewendet (nicht beitritt oder Referenzdatentabellen).

Dies entfernt einen großen Teil der normalen Frustration für LastCreated & LastModified Felder zu berücksichtigen hat, aber eingeführt, um den Ärger der Auslöser auf dem neuesten Stand zu halten.

Am Ende der Trigger / Audit-Tabelle Design hat gut funktioniert und alles, was wir hatten, war daran zu erinnern, die Auslöser vor ETL zu entfernen und erneut anwenden (!).

Es ist für eine Web-basierte CMS ich arbeite. Die Erstellung und letzte aktualisierte Daten werden auf den meisten Seiten angezeigt und es werden Listen für die zuletzt erstellte (und aktualisiert) Seiten sein. Das Admin-Interface wird diese Information auch nutzen.

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