Pregunta

Tengo el desafío de diseñar una nueva base de datos usando un RDBMS, Oracle para ser precisos.En esta base de datos habrá un registro/documento específico que puede abarcar varias tablas.

Con la menor duplicación posible, quiero realizar un seguimiento de los cambios realizados en este registro y ofrecer una forma sencilla de crear copias modificadas de ese registro.

no quiero un historia tabla que resumirá los cambios en el texto, porque quiero poder recuperar document x exactamente como se veía time t.Pero tampoco quiero tener una copia completa de cada entrada del historial.

Hay mejores prácticas o patrones ¿Cómo lograr esto?

Quizás tenga una idea de cómo resolver esto usando una estrategia que imite git, pero primero quería algunas opiniones antes de seguir ese camino.

¿Fue útil?

Solución

En Oracle 12c específicamente hay una nueva característica llamada "consultas de flashback temporales" que sirve exactamente para este propósito.(Características similares están disponibles en otras bases de datos:DB2, SQL Server, Vertica, por nombrar algunos).

Para habilitar consultas temporales usted:

  1. Asegúrese de que cada una de las tablas que representan su documento tenga un par de fechas que indiquen la fecha (hora) de inicio y finalización cuando un registro en particular era válido (activo), y
  2. Mantenga registros históricos no actualizándolos en su lugar, sino insertando nuevas versiones de los registros, actualizando solo las fechas de finalización de los registros históricos.

Luego podrá realizar consultas en sus tablas que se parecen mucho a SELECT whatever FROM mytable AS OF some_date, que devolvería los registros que estaban activos en la fecha especificada.

Puedes leer el descripción detallada aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top