2011-03-07 10 views
5

Tengo un requisito de que en un sitio web respaldado por SQL Server que es esencialmente una aplicación CRUD grande, el usuario debe poder 'retroceder en el tiempo' y poder exportar los datos tal como estaban en un punto determinado en el tiempo.Datos de versionado en SQL Server para que el usuario pueda tomar un cierto corte de los datos

Mi pregunta es ¿cuál es la mejor estrategia para este problema? ¿Existe un enfoque sistemático que pueda tomar y aplicarlo en todas las tablas?

+2

Esto podría ser útil: http://blog.schauderhaft.de/2009/11/29/versioned-data/ –

+1

Preguntas relacionadas sobre ** bases de datos temporales ** (ese es el nombre de lo que intenta lograr): http://stackoverflow.com/q/3875078/95 y http://stackoverflow.com/q/800331/95 –

+0

@Jens - Buen resumen. Gracias por el enlace. –

Respuesta

5

Dependiendo de lo que necesite exactamente, esto puede ser relativamente fácil o infierno.

Fácil: Cree una tabla de historial para cada tabla, copie los datos allí antes de la actualización o inserte/actualice la publicación (es decir, las novedades también están allí). Nunca eliminar de la tabla original, hacer eliminaciones lógicas.

Hard: Hay una versión fdb que cuenta cada cambio, cada elemento de datos está correlacionado con el inicio y el final. Esto requiere una manipulación de clave primaria muy elegante.

+0

Gracias TomTom - ¡Me gusta el sonido del enfoque 'fácil'! –

0

La solución más simple es guardar una copia de cada fila cada vez que cambie. Esto se puede hacer más fácilmente con un disparador. Entonces su UI debe proporcionar capacidades de búsqueda para regresar y encontrar los datos.

Esto produce una explosión de datos, que empeora cuando las tablas se actualizan con frecuencia, por lo que el siguiente paso suele ser algún tipo de depuración basada en datos de datos anteriores.

+1

Esto explica cómo almacenar los datos, pero ¿cómo lo consulta? – RQDQ

+0

De la misma manera que consulta cualquier otra cosa, suponiendo que la UI tenga consulta por formulario u otra tecnología relacionada (OP dijo que esto era CRUD), se pueden poner dos cuadros de fecha adicionales para especificar el intervalo de fechas. –

0

Una implementación que puede consultar es Team Foundation Server. Tiene la capacidad de realizar consultas históricas (utilizando la palabra clave WIQL ASOF). El back-end es SQL Server, por lo que podría haber algunas pistas allí.

1

Apenas agregue un pequeño comentario a las respuestas anteriores. Si necesita volver para todos los usuarios, puede usar snapshots.

+0

Enlace de interés. Gracias. Como el sistema no tiene una gran cantidad de usuarios, esto podría funcionar. Preocupado por la viabilidad a largo plazo sin embargo. –

Cuestiones relacionadas