2011-05-24 18 views
5

Actualmente estoy trabajando en un proyecto en el que necesitamos mantener múltiples versiones de una entidad determinada en la base de datos.Diseño de base de datos de entidades de múltiples versiones

Por ejemplo, supongamos que tenemos una entidad llamada House que tiene salas. Ahora, cada vez que se agrega una habitación, se actualiza o se elimina de la casa, o se cambia una propiedad de la casa o cualquiera de las habitaciones, debemos conservar tanto la información anterior como la nueva. Preferiblemente, nos gustaría agrupar los cambios en un "conjunto de cambios" (realmente el problema es como el control de fuente).

Ahora el modelo real es bastante más complicado que esto, pero creo que este ejemplo ilustra el problema.

Me gustaría mucho escuchar algunas posibles soluciones a este problema.

Estamos ejecutando Microsoft SQL Server 2008 R2.

Respuesta

9

En los almacenes de datos, esto generalmente se resuelve con un Slowly Changing Dimension (SCD).

Como breve resumen, se puede:

  • Hacer una clave sustituta (un ID de instancia) y el uso de la clave natural y un número de versión (o la fecha efectiva/intervalo de tiempo) para realizar un seguimiento de los cambios (tipo 2 SCD)
  • Tienes N columnas en su mesa de la sala para las versiones N (tipo 3 SCD)
  • tiene una tabla "rooms_history" separado y sólo mantener la instancia actual en la tabla habitaciones (tipo 4)

Mi te am ha usado tradicionalmente una combinación de Tipo 2 (para datos más "recientes") y Tipo 4 (para datos "anteriores" en un archivo). Agrupamos los cambios usando un change_id en los objetos que se cambian que es una referencia a un objeto change que incluye la fecha del cambio, así como otros metadatos (usuario, comentarios, etc.)

Cuestiones relacionadas