Einige Mitarbeiter und ich haben eine Debatte darüber geführt, wie historische Daten am besten gespeichert werden können. Derzeit verwende ich für einige Systeme eine separate Tabelle zum Speichern historischer Daten und behalte eine Originaltabelle für den aktuellen aktiven Datensatz. Nehmen wir also an, ich habe Tisch FOO. Unter meinem System werden alle aktiven Datensätze in FOO und alle historischen Datensätze in FOO_Hist gespeichert. Viele verschiedene Felder in FOO können vom Benutzer aktualisiert werden, daher möchte ich ein genaues Konto über alles auf dem neuesten Stand halten. FOO_Hist enthält genau die gleichen Felder wie FOO, mit Ausnahme einer automatisch inkrementierenden HIST_ID. Jedes Mal, wenn FOO aktualisiert wird, führe ich eine Einfügeanweisung in FOO_Hist aus, ähnlich : insert into FOO_HIST select * from FOO where id = @id
.
Mein Kollege sagt, dass dies ein schlechtes Design ist, da ich aus historischen Gründen keine exakte Kopie einer Tabelle haben sollte und einfach einen weiteren Datensatz in die aktive Tabelle einfügen sollte, wobei ein Flag angibt, dass dies für historische Zwecke ist.
Gibt es einen Standard für den Umgang mit der Speicherung historischer Daten? Es scheint mir, dass ich meine aktiven Aufzeichnungen nicht mit all meinen historischen Aufzeichnungen in derselben Tabelle überladen möchte, wenn man bedenkt, dass es weit über eine Million Aufzeichnungen sein können (ich denke langfristig).
Wie gehen Sie oder Ihr Unternehmen damit um?
Ich verwende MS SQL Server 2008, möchte aber die Antwort generisch und willkürlich für jedes DBMS halten.