Historische Werte speichern

magda89

Neuer Benutzer
Beiträge
4
Hallo,

ich habe eine Datenbank in der in einer großen Produkttabelle (ca. 700k Zeilen und 35 Spalten) alle zwei Wochen ein Update kommt. Bei einem Update kann jede Zeile theoretisch gelöscht werden oder anhand eines PK geupdated werden. Es können auch neue Zeilen hinzukommen. Ich möchte diese Tabelle auf jedem Datenstand (also z.B. 01. April, 15. April, 01. Mai,...) verfügbar machen, sodass Nutzer auch auf historische Datenstände zugreifen können. Habt ihr eine Idee, wie ich die Daten speichern kann, ohne für jeden Datenstand die komplette Tabelle in meiner DB zu halten?

Vielen Dank für eueren Input!
 
Werbung:
700k Zeilen ist eher klein. Zumindest bei richtigen Datenbanken, MySQL ist ja was anderes...
Wenn Du bei Updates den alten Datensatz noch aufheben willst, dann solltest Du z.B. via TRIGGER das erledigen. Dazu gehört auch, daß der PK um z.B. das Datum ergänzt wird. Denkbar wäre auch ein Gültigkeitsbereich z.B. via DATERANGE abzubilden, je nachdem wie oft die Updates erfolgen und wie oft sich Datensätze in der Historie sich ändern.
 
Werbung:
So ähnlich würde ich es auch machen: Löschen darf natürlich nicht mehr sein, so dass die Daten später noch vorhanden sind. Statt Löschen ein "Deleted-Timestamp" hinzufügen, als "nullable Field". Ist das Feld NULL, ist der Satz gültig, ist ein Datum gesetzt, zählt die Zeile als gelöscht. Und beim Hinzufügen von Datensätzen kommt ein "Added-Timestamp" dazu, damit man später filtern kann, ab wann der Datensatz überhaupt da war. Ein "Update" würde ich durchs kopieren eines Datensatzes erreichen - mit den entsprechenden Zeitstempeln beim alten Datensatz (jetzt ungültig = Deleted-Timestamp) und beim neuen (ab jetzt gültig = Added-Timestamp). Dann ist ganz einfach herauszufiltern, wann welcher Datensatz gültig war.

(und wie von @akretschmer geschrieben: Das Added_Timestamp-Feld in den PK mit aufnehmen)

(700k ist wirklich nicht viel - ich habe eine Tabelle die Produktionswerte aufzeichnet: Alle 10 Minuten einen Datensatz. Die Tabelle hat jetzt schon knapp 26-Mio Datensätze mit 34 Spalten... Mit Index aktuell 8,8GB groß. Funktioniert auch bei MariaDB (64bit-System, InnoDB) einwandfrei. Und schnell: wichtig sind die Indizes bei Spalten, die auch zu Abfragen genutzt werden, dann läuft das auch...)

Gruß,
Andi
 
Zurück
Oben