Alcuni colleghi e io siamo entrati in un dibattito sul modo migliore per archiviare dati storici. Attualmente, per alcuni sistemi, utilizzo una tabella separata per memorizzare i dati storici e conservo una tabella originale per il record corrente e attivo. Quindi, diciamo che ho un tavolo FOO. Sotto il mio sistema, tutti i record attivi andranno in FOO e tutti i record storici andranno in FOO_Hist. Molti campi diversi in FOO possono essere aggiornati dall'utente, quindi voglio tenere un resoconto accurato di tutto aggiornato. FOO_Hist contiene esattamente gli stessi campi di FOO, ad eccezione di un HIST_ID a incremento automatico. Ogni volta che viene aggiornato FOO, effettuo una dichiarazione INSERT INTO FOO_Hist simile a: insert into FOO_HIST select * from FOO where id = @id
.
Il mio collega dice che questo è un cattivo design perché non dovrei avere una copia esatta di una tabella per motivi storici e dovrei semplicemente inserire un altro record nella tabella attiva con una bandiera che indica che è per scopi storici.
Esiste uno standard per gestire l'archiviazione dei dati storici? Mi sembra che non voglio ingombrare i miei record attivi con tutti i miei record storici nella stessa tabella considerando che potrebbe essere ben oltre un milione di dischi (sto pensando a lungo termine).
Come gestite voi o la vostra azienda?
Sto usando MS SQL Server 2008, ma vorrei mantenere la risposta generica e arbitraria di qualsiasi DBMS.