Hallo Community, ich hab da mal ein Problem.
Ich habe eine mySql Datenbank, in der es eine große Tabelle mit zahlreichen Spalten gibt (ca. 40). Die Werte in den Spalten sind über ein PHP Skript änderbar und es soll bei jeder Änderung festgehalten werden, wer wann welche Werte geändert hat und wie die Werte vorher waren, um ggf. die Datensätze wieder auf einen vorherigen Stand zu bringen.
Hab schon lange gegoogelt, aber ich bin noch zu keinem vernünftigen Ergebnis gekommen. Ein zusätzliches Problem ist, dass zu dieser Tabelle im Laufe der Zeit weitere Spalten kommen könnten... :upps
Mein erster Ansatz war, einfach eine zweite Tabelle mit den gleichen Spalten und zusätzlich je einer Spalte für eine UserID und einen Timestamp zu erststellen und dort alles zu speichern. Das Problem dabei ist, dass meist nur ein Wert geändert wird, und trotzdem ein kompletter Datensatz neu angelegt wird. Wie sieht es da beim Speicherverbrauch aus, wenn nur die Werte gesichert werden, die sich geändert haben und der Rest NULL bleibt?
Der zweite Ansatz war, eine Tabelle für die Änderungen anzulegen, die so aussieht: ID, Datensatz_ID, Spalte, zeitpunkt_der_Änderung, user_id, Wert
Also festhalten, bei welchem Datensatz welche Spalte wann von welchem User geändert wurde und welchen Wert sie hatte. Natürlich gibt es da das Problem, daß die Ursprungstabelle natürlich unterschiedliche Datentypen in den Spalten hat. Also müsste ich alle Änderungen als TEXT speichern und beim Rückgängig machen dann wieder in den jeweiligen Typ umwandeln. Ginge schon, ist aber ziemlich unschön.
Der dritte Ansatz ist, für jede Spalte eine eigene Tabelle für die Änderungen anzulegen. Bei 40 Spalten gibt das 40 Tabellen und beim Rollback habe ich richtig Spaß, alle Änderungen abzufragen...
Ich halte dennoch den Ansatz 3 für am geeignetsten für dieses Problem. Ich muss aber auch zugeben, dass ich ein ziemlicher Anfänger bin, was das Designen von Datenbanken betrifft...
Was meint ihr, welchen Ansatz sollte ich nehmen, oder gibt es noch eine andere Möglichkeit, auf die ich noch nicht gekommen bin? Alle Tipps sind herzlich willkommen.