Necesito almacenar los cambios introducidos por el usuario en una tabla en particular, pero no mostrar esos cambios hasta que hayan sido vistos y aprobados por un usuario administrativo. Si bien esos cambios todavía están en un estado pendiente, aún mostraría la versión anterior de los datos. ¿Cuál sería la mejor manera de almacenar estos cambios esperando su aprobación?¿Cuál es la mejor manera de almacenar los cambios en los registros de la base de datos que requieren aprobación antes de ser visibles?
He pensado de varias maneras, pero no puedo entender cuál es el mejor método. Esta es una aplicación web muy pequeña. Una forma sería tener una tabla PendingChanges que imite el esquema de la otra tabla, y luego, una vez que se apruebe el cambio, podría actualizar la tabla real con la información. Otro enfoque sería hacer algún tipo de versión de registro donde almaceno múltiples versiones de los datos en la tabla y luego siempre extraer el registro con el número de versión más alto que haya sido marcado como aprobado. Eso limitaría el número de tablas adicionales (tengo que hacer esto para múltiples tablas), pero requeriría que haga un procesamiento adicional cada vez que saque un conjunto de registros para asegurarme de obtener los correctos.
¿Alguna experiencia personal con estos métodos u otros que podrían ser buenos?
Actualización: Solo para aclarar, en esta situación particular no me interesan tanto los datos históricos. Solo necesito una forma de aprobar cualquier cambio que realice un usuario antes de que se publique en el sitio. Entonces, un usuario editará su "perfil" y luego un administrador verá esa modificación y la aprobará. Una vez aprobado, se convertirá en el valor mostrado y no es necesario conservar la versión anterior.
¿Alguien ha intentado la solución a continuación donde almacena los cambios pendientes de cualquier tabla que necesite rastrearlos como XML en una tabla especial PendingChanges? Cada registro tendría una columna que dijera para qué tabla eran los cambios, una columna que tal vez almacenara la identificación del registro que se cambiaría (nulo si es un registro nuevo), una columna de fecha y hora para almacenar cuando se realizó el cambio, y una columna para almacenar el xml del registro modificado (podría tal vez serializar mi objeto de datos). Como no necesito historial, después de aprobar un cambio, la tabla real se actualizaría y el registro de PendingChange podría eliminarse.
¿Alguna idea sobre ese método?
¿Desea almacenar las versiones (en realidad le importan los datos antiguos) o simplemente desea tener los últimos datos aprobados? –