Zunächst ein Hinweis, ich dachte, dass diese Frage vielleicht zum Datenbankaustausch gehört, aber ich denke, dass sie eher mit einer Programmierlösung als mit Datenbanken insgesamt zu tun hat. Wechselt zum Datenbankaustausch, wenn die Leute denken, dass dies der beste ist.
Ich habe mich gefragt, wann eine Datenbanktabelle mit einem erstellten und aktualisierten Zeitstempel versehen werden soll.
Die erste offensichtliche Antwort ist, dass, wenn eine Geschäftslogik wissen muss, wann etwas aktualisiert wurde (wie ein Transaktionsabschlussdatum usw.), sie eingehen muss.
Aber was ist mit Fällen, die keine Geschäftslogik sind? Ich kann mir zum Beispiel Szenarien vorstellen, in denen es wirklich nützlich wäre, das Datum und die Uhrzeit der Zeilenänderung zu kennen, um die Fehlersuche zu erleichtern. Beispielsweise schlägt eine Geschäftslogik fehl, und wenn Sie sich die zugehörigen Datenbankzeilen ansehen, können Sie feststellen, dass eine Zeile zuvor aktualisiert wird eine andere Zeile, die den Fehler verursacht.
In diesem Anwendungsfall ist es sinnvoll, jeder Tabelle ein Update zu geben und einen Zeitstempel zu erstellen (mit Ausnahme der vielleicht trivialsten Aufzählungstabellen, die von keinem Teil der Anwendung aktualisiert würden).
Jedem Tisch einen Zeitstempel zu geben, ist sicherlich eine großartige Möglichkeit, schnell eine Datenbank abzuspeichern (auch wenn dies falsch sein könnte).
Wann sollte eine Datenbanktabelle Zeitstempel zum Erstellen und Aktualisieren verwenden?
Antworten:
Für ein besseres und umfassenderes Datenbankmanagement und die sinnvollste Vorgehensweise ist dies.
Erstens ist es wahrscheinlicher, dass Sie als Entwickler die Datenbanktransaktionen und / oder -aktivitäten für die Entwicklung verfolgen und Fehler und Fehler in Ihrem Code leichter nachverfolgen möchten, wann immer sie Ihre Datenbank betreffen.
Außerdem, wann immer Sie die in Ihrer Datenbank ausgeführten Aktivitäten zu statistischen Zwecken verfolgen müssen .
Zum anderen kommt es häufig vor, dass Sie Ihre Datenbankaktivitäten möglicherweise vorerst nicht nachverfolgen müssen, dies aber wahrscheinlich in Zukunft tun werden. Es wird Ihre Zeit heute brauchen, aber kauft Sie in Zukunft mehr .
quelle
Als jemand, der sowohl Wilderer (Entwickler) als auch Wildhüter (DBA) war, wundere ich mich, dass viele den Wert darin immer noch nicht sehen und es für aufblasen halten.
Einfach gesagt:
Ich habe an vielen Stellen gearbeitet, an denen DATE_CREATED und DATE_UPDATED standardmäßig als Teil des Designs in jeder Tabelle enthalten sind.
Für größere Datenbanken mit Millionen / Milliarden von Zeilen, in denen die Datenbankaktualisierung über einige Tage ausgeführt wurde, wurde für einige Tabellen eine SOURCE-Spalte hinzugefügt, in der nachverfolgt wurde, welcher Datentopf die Aktualisierung verursacht hat, z. B. Feed von Drittanbietern, Benutzeraktualisierung, DBA-Änderung Datenbereinigung usw.
quelle
Wie die Frage formuliert ist, fragen Sie nach einer Liste von Dingen. Ich werde riskieren, Ihre Frage nicht direkt zu beantworten, sondern zu beantworten, wann Sie eine alternative Lösung verwenden sollten.
Wäre es sinnvoller, ein Protokoll aller Aktualisierungen für einen bestimmten Datensatz zu haben? Es reicht möglicherweise nicht aus, nur das letzte Update zu kennen. Dieses Protokoll kann in einer separaten Tabelle abgelegt werden. Es wäre praktischer, Änderungen von mehreren Tabellen in derselben Protokolldatei (en) zu verfolgen (es muss keine Tabelle sein). Dies verhindert, dass eine massive Union-Abfrage aller Tabellen change_dates zum Abrufen von Aggregaten ausgeführt wird. Dies würde auch zur Fehlerbehebung beitragen, da Sie eine Aufzeichnung von mehr Ereignissen in Ihrem System anzeigen können.
Zusätzlich: Sie müssen auch die Benutzer berücksichtigen. Sie machen es vielleicht nicht zu einem Geschäftsfall, aber wenn Sie unerfahrene Benutzer oder solche in einer Unternehmenskultur haben, bei denen sie niemals einen Benutzerfehler machen und dies immer dem Computer zuschreiben möchten, hilft jede Art der Protokollierung, einschließlich Aktualisierungsdaten für Tabellen. In diesem Fall möchten Sie möglicherweise auch ein Update_UserID-Feld haben.
quelle
Eine Datenbanktabelle sollte Erstellungs- und Änderungsvorlagen enthalten, wenn eine der folgenden Bedingungen erfüllt ist:
Table_X
als auch a haben, vonTable_Y
denen eins zu viele Kinder sindTable_X
,Table_Y
ist dies kein primärer Datensatz und benötigt daher keine zusätzlichen Felder.Table_Y
nur aktualisiert wird, wennTable_X
erfolgt, können die zusätzlichen Verfolgungsfelder hilfreich sein.Beachten Sie, dass keines dieser Elemente exklusiv ist. Sie können sie standardmäßig überall hinzufügen und nur dann weglassen, wenn dies für die Leistungsoptimierung erforderlich ist.
quelle
Persönliche Meinung:
Ich sehe den Wert in einer
modified
Spalte nicht.created
Sollte unbedingt zu jeder Datenbanktabelle hinzugefügt werden, es sei denn, es liegt eine Ausnahme vor gerechtfertigt. Es ist so wertvoll, es dort zu haben.Scheint
updated
jedoch eine Verschwendung. Warum nicht einfach das ganze Schwein machen und zwei Datenbanktabellen erstellen, eine, die eine Dokument-ID angibt, und eine andere, die die Dokumentversion angibt. In einem sehr simplen FallWählen Sie dann die neueste
version
von derdocument
Sie wollen. Auf diese Weise speichern Sie nicht nur jedes Änderungsdatum - nicht nur das letzte -, sondern Sie behalten auch jede Version dieses Dokuments. Das einzige Argument, das dagegen spricht, ist der Festplattenspeicher, aber wenn Sie den Punkt erreichen, an dem Sie sich Gedanken darüber machen, welchen Festplattenspeicher er belegt, werden Sie sich in den meisten Fällen noch mehr Gedanken über die Versionierung der Daten machenquelle