Como en muchas bases de datos, estoy diseñando una base de datos que debe mantener el registro de las versiones anteriores de las filas modificadas en cada tabla.historial de administración de filas en la base de datos
La solución estándar a este problema es mantener una tabla de historial para cada tabla de datos, y cada vez que se necesita actualizar una fila en la tabla de datos, una copia de la fila actual se inserta en la tabla de historial y luego fila en la tabla de datos se actualiza.
las desventajas de esta solución para mí:
- mantenimiento de 2 mesas en lugar de 1, (en caso de que la estructura de las necesidades de la tabla modificar)
- la aplicación necesita saber tanto de las mesas en vez uno de
- nombres de las tablas que tenga que ser cortas para evitar una convención del nombre de la tabla y el nombre de tabla de historial (some_table, SOME_TABLE_HIST por ejemplo)
que una Estoy considerando una solución diferente y me gustaría saber si está bien. para cada tabla, se añade la columna IS_LAST
- cuando una fila se inserta a la mesa, que conseguirá insertada con IS_LAST = 1.
- cuando se actualiza una fila, una copia de la fila original se duplicará en la misma tabla con el cambio de IS_LAST = 0, y la fila original se actualizará según sea necesario (manteniendo IS_LAST = 1).
supongo que en mi caso, las filas se actualizan a un promedio de 10 veces. también asumen que al menos el 90% de las acciones realizadas por la aplicación solo ocurre en la versión reciente de las filas.
mi base de datos es un Oracle 10g por lo que para mantener la tabla "activa" delgada, podemos dividir la tabla en 2 particiones: la partición IS_LAST = 1 y la partición IS_LAST = 0.
¿Las particiones son una buena forma de resolver el problema del mantenimiento de datos históricos?
¿Esta solución limita otro potencial de partición a estas tablas?
gracias!
Es Oracle, ¿para qué molestarse? Solo particione en esa columna y active Migración de fila. Está integrado, por qué reescribir y mantener dos tablas. –