Al utilizar una base de datos normalizada según los principios de 6NF, ¿cómo se almacenan los datos de atributos históricos?6NF e historial de datos de atributos
Digamos, por ejemplo, tomamos this example de @PerformanceDBA pero con el siguiente requisito adicional:
Necesitamos almacenar datos históricos para todos nuestros productos, debemos ser capaces de , introduce una fecha y obtener una instantánea de los atributos del producto en ese momento en particular.
Un ejemplo más práctico:
Supongamos que los discos y la CPU del del ejemplo anterior son virtuales y un usuario puede cambiar la capacidad del disco a voluntad. ¿Cómo podemos modificar la base de datos para que podamos recuperar los atributos de un disco dado en el pasado (por supuesto, después de la fecha de creación) mientras mantenemos la vista de 5NF lo suficientemente rápido?
cosas que estoy considerando
- Añadir una columna de marca de tiempo 'changedate' a cada tabla de atributos (esto daría lugar a una consulta bastante compleja con una subconsulta y unirse para cada tabla de atributos)
- Crear una tabla de historial * separada para cada tabla de atributos (podría dar como resultado una gran cantidad de tablas, ya que tenemos alrededor de 70 atributos distribuidos en 20 tipos de productos)
- Además: añadir un ' actual' columna indexada a cada tabla de atributos para acelerar la vista 5NF
Cualquier ayuda se agradece!
Editar: sé que el concepto de base de datos temporal, sin embargo, el problema es que para el motor de base de datos con los que trabajo (PostgreSQL) la extensión temporal no se aplique plenamente todavía. ¿Algún consejo sobre cómo lograr esto sin bases de datos temporales?
Solo para avisarle, me fui por el camino de NO tener tablas de historial, y usar una fecha "de" y "hasta" en cada fila de mis "entidades". Fue el mayor error que cometí y convirtió el proyecto en una pesadilla. Tomó la guía de la persona que menciona, PerformanceDBA, para hacerme entender realmente qué es una base de datos (es decir, no solo un cubo para objetos). Desde entonces reescribí el proyecto utilizando un enfoque más tradicional (tablas de historial/vistas), y es mejor en todos los sentidos. De acuerdo, no hay mucho argumento, pero entrar en detalles requeriría una gran cantidad de documentación. – Mark
Esta es la publicación que me ayudó a cambiar la forma en que veo las bases de datos en general (desde el punto de vista de los ingenieros de software, hasta el punto de vista del DBA): - http://stackoverflow.com/questions/4491173/historical- auditable-database - No estoy diciendo que esté mal hacer lo que se ha sugerido (usar "de" y "a" y sin tablas de historial), pero para mí creó un gran lío, y nunca voy a pasar por eso camino de nuevo. – Mark