Certains collègues et moi nous sommes lancés dans un débat sur la meilleure façon de stocker les données historiques. Actuellement, pour certains systèmes, j'utilise une table séparée pour stocker les données historiques et je garde une table originale pour l'enregistrement actif actuel. Alors, disons que j'ai la table FOO. Sous mon système, tous les enregistrements actifs iront dans FOO, et tous les enregistrements historiques iront dans FOO_Hist. De nombreux champs différents dans FOO peuvent être mis à jour par l'utilisateur, je veux donc garder un compte précis de tout mis à jour. FOO_Hist contient exactement les mêmes champs que FOO à l'exception d'un HIST_ID auto-incrémenté. Chaque FOO temps est mis à jour, j'effectue une déclaration d'insertion dans FOO_Hist similaire à: insert into FOO_HIST select * from FOO where id = @id
.
Mon collègue dit que c'est une mauvaise conception parce que je ne devrais pas avoir une copie exacte d'une table pour des raisons historiques et que je devrais simplement insérer un autre enregistrement dans la table active avec un indicateur indiquant que c'est à des fins historiques.
Existe-t-il une norme pour gérer le stockage des données historiques? Il me semble que je ne veux pas encombrer mes enregistrements actifs avec tous mes enregistrements historiques dans le même tableau, étant donné que cela peut être bien plus d'un million d'enregistrements (je pense à long terme).
Comment vous ou votre entreprise gérez-vous cela?
J'utilise MS SQL Server 2008, mais j'aimerais garder la réponse générique et arbitraire de tout SGBD.