2010-05-01 13 views
6

Estoy tratando de usar una base de datos simple de MySQL, pero la modifico para que cada campo tenga una copia de seguridad hasta en un número indefinido de versiones. La mejor forma en que puedo ilustrar esto es reemplazando cada campo de cada tabla con una pila de todos los valores que este campo alguna vez haya tenido (cada uno de estos valores debe tener una marca de tiempo). Supongo que es como tener un control de versión personalizado para todos mis datos ...Cómo versionar los datos de control almacenados en mysql

¿Alguna idea sobre cómo hacer esto?

+0

posible duplicado de http://stackoverflow.com/questions/2724187/where-are-all-the-native-revised-databases –

Respuesta

7

El método habitual para "realizar el seguimiento de cualquier cambio" en una tabla es agregar procedimientos de inserción/actualización/eliminación de desencadenantes en la tabla y guardar esos registros en una tabla de historial.

Por ejemplo, si su tabla de datos principal es "ItemInfo", también tendrá una tabla ItemInfo_History que obtuvo una copia del nuevo registro cada vez que algo cambió (a través de los desencadenadores).

Esto mantiene constante el rendimiento de su tabla primaria, pero le da acceso al historial de cualquier cambio si lo necesita.

Éstos son algunos ejemplos, son para SQL Server, pero que demuestran la lógica:

Mi Repository table Mi Repository History table Mi Repository Insert trigger procedure Mi Repository Update trigger procedure

+0

Aún no te sigo exactamente, pero me presentaste los factores desencadenantes y probablemente sean los que voy a usar. Gracias – Shawn

+0

Se agregaron enlaces a algunos ejemplos que podrían (con suerte) aclarar el proceso. :-) –

1

Una solución simple sería agregar un campo de versión/revisión a las tablas, y siempre que se actualice un registro, en lugar de actualizarlo, inserte una copia con los cambios aplicados y el número de versión incrementado. Luego, al seleccionar, siempre elija el registro con la última versión. Es más o menos cómo se implementan la mayoría de estos esquemas (por ejemplo, Wikimedia lo hace de esta manera).

+0

Pensé en esto, pero luego tengo que copiar cada campo en esa fila en lugar de solo el campo que realmente ha cambiado los valores .. Parece un poco derrochador, sabio en memoria. – Shawn

3

Hmm, lo que estás hablando de sonidos similares a Slowly Changing Dimension.

Tenga en cuenta que el control de versiones en estructuras de bases de datos arbitrarias es oficialmente un problema bastante difícil. :-)

+0

Parece que cambiar de dimensión lentamente requiere que copie todos los campos en una fila, incluso si solo uno de los campos se alteró ... Parece un poco derrochador, sabio en memoria – Shawn

+0

Bueno, es por eso que lo usas para * cambiar * lentamente dimensiones. – Ken

0

Tal vez una herramienta puede ayudarte a hacer eso por ti. Echar un vistazo a diseñador Nextep:

http://www.nextep-softwares.com

Con este IDE usted será capaz de tomar instantáneas de la estructura de base de datos y los datos y ponerlo bajo control de versiones. Después de esto, puede calcular las diferencias entre cualquiera de las 2 versiones y generar el SQL apropiado que pueda insertar/actualizar/eliminar sus datos.

Quizás esta es una forma alternativa de lograr lo que quería.

Cuestiones relacionadas