El tiempo y su representacion

Desde hace un tiempo me tiene preocupado un problema de como representar intervalos de tiempos (sobre todo vigencias) en base de datos relacionales, sobre todo las hechas con GeneXus.

Los principales problemas que tenemos son:

Auditoria
Mantener una copia de las modificaciones que los datos tienen a traves del tiempo

Borrado de datos historicos.
Para evitar el crecimiento excesivo de las base de datos es necesario tener programas que hagan la limpieza de los datos historicos. Generalmente no son triviales para dejar la base de datos relacional coherente.

Intervalos/Vigencias
Es comun tener tablas en las cuales una clave tiene diferentes atributos secundarios a traves del tiempo y hay que guardarlos todos.
Por ejemplo:

Productos
*PrdId
*FechaInicial
FechaFinal
PrdNombre

Movimientos
*MovId
MovFch
PrdId
Cantidad

El problema basico, consiste en recuperar el PrdNombre, correspondiente a la fecha del movimiento de MovFch, con FechaInicial <= MovFch <= FechaFinal.

Esto trae varios problemas:
La integridad referencial no sirve
Se complica la programacion
Es dificil validar los intervalos en la transaccion de Productos.

Parece un buen patron para automatizar o para agregar como funcionalidad de GeneXus.



Comentarios

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.