Algunos compañeros de trabajo y yo entramos en un debate sobre la mejor manera de almacenar datos históricos. Actualmente, para algunos sistemas, uso una tabla separada para almacenar datos históricos y mantengo una tabla original para el registro activo actual. Entonces, digamos que tengo mesa FOO. Bajo mi sistema, todos los registros activos irán en FOO, y todos los registros históricos irán en FOO_Hist. El usuario puede actualizar muchos campos diferentes en FOO, por lo que quiero mantener una cuenta precisa de todo lo actualizado. FOO_Hist contiene exactamente los mismos campos que FOO con la excepción de un HIST_ID de incremento automático. Cada vez que se actualiza FOO, realizo una instrucción de inserción en FOO_Hist similar a: insert into FOO_HIST select * from FOO where id = @id
.
Mi compañero de trabajo dice que este es un mal diseño porque no debería tener una copia exacta de una tabla por razones históricas y simplemente debería insertar otro registro en la tabla activa con un indicador que indique que es para fines históricos.
¿Existe un estándar para tratar con el almacenamiento de datos históricos? Me parece que no quiero saturar mis registros activos con todos mis registros históricos en la misma tabla, considerando que puede haber más de un millón de registros (estoy pensando a largo plazo).
¿Cómo usted o su empresa manejan esto?
Estoy usando MS SQL Server 2008, pero me gustaría mantener la respuesta genérica y arbitraria de cualquier DBMS.