para - sql server 2017
¿Cómo manejar mejor el almacenamiento de datos históricos? (2)
Estoy tratando de determinar cómo debo almacenar datos transaccionales históricos.
¿Debo almacenarlo en una sola tabla donde el registro simplemente se reinserte con una nueva marca de tiempo cada vez?
¿Debería dividir los datos históricos en una tabla de "historial" separada y solo mantener los datos actuales en la tabla "activa"?
Si es así, ¿cómo puedo hacer eso? ¿Con un disparador que copia automáticamente los datos en la tabla de historial? O con lógica en mi aplicación?
Actualización por comentario de Welbog:
Habrá una gran cantidad de datos históricos (cientos de miles de filas, eventualmente millones)
Principalmente las búsquedas y operaciones de informes se ejecutarán en los datos históricos.
El rendimiento es una preocupación. Las búsquedas no deberían tener que ejecutarse toda la noche para producir resultados.
Esta pregunta va a lo largo de la línea de lógica de negocios. Conozca los requisitos de su negocio primero y luego comience desde allí. Un Data Warehouse es una buena solución para este tipo de situación. ETL le dará muchas opciones para lidiar con los flujos de datos. Su concepto básico de ''Historia'' frente a ''Activo'' es bastante correcto. Sus datos de historial serán más eficientes y flexibles si se guardan en un depósito de datos con todas sus tablas de dimensiones y hechos.
Si el requisito es únicamente para informar, considere construir un almacén de datos por separado. Esto le permite usar estructuras de datos como dimensiones de cambio lento que son mucho mejores para los informes históricos pero que no funcionan bien en un sistema transaccional. La combinación resultante también mueve el informe histórico de su base de datos de producción, que será una ganancia de rendimiento y mantenimiento.
Si necesita que este historial esté disponible dentro de la aplicación, debe implementar algún tipo de función de control de versiones o eliminación lógica o hacer que todo sea totalmente contra y reformular (es decir, las transacciones nunca se eliminan, solo se revierten y se actualizan). Piense con mucho cuidado si realmente lo necesita, ya que agregará mucha complejidad. Hacer una aplicación transaccional que pueda reconstruir el estado histórico correctamente es considerablemente más difícil de lo que parece. El software financiero (por ejemplo, los sistemas de suscripción de seguros) no puede hacer esto mucho más de lo que podría pensar.
Si necesita el historial únicamente para el registro de auditoría, cree tablas ocultas y desencadenadores de registro de auditoría. Esto es mucho más simple y más sólido que tratar de implementar correcta e integralmente el registro de auditoría dentro de la aplicación. Los factores desencadenantes también recogerán cambios en la base de datos de fuentes externas a la aplicación.