Estoy trabajando en un proyecto en el que necesitamos que los datos ingresados o actualizados por algunos usuarios pasen por un estado pendiente antes de ser agregados a 'datos en vivo'.Diseño de Db para aprobación de actualización de datos
Mientras prepara los datos, el usuario puede guardar registros incompletos. Aunque los datos están en estado pendiente, no queremos que los datos afecten a las reglas impuestas a los usuarios que editan los datos en vivo, p. un usuario que trabaja en los datos en tiempo real no debe ejecutar un contraint único al ingresar los mismos datos que ya están en estado pendiente.
Imagino que los conjuntos de actualizaciones de datos se agruparán en una "presentación de datos" y los datos se revalidarán y corregirán/rechazarán/aprobarán cuando alguien controle la calidad del envío.
He pensado en dos escenarios en lo que respecta al almacenamiento de los datos:
1) Mantener los datos de estado pendientes en la misma mesa que los datos en tiempo real, pero la adición de una bandera para indicar su estado. Pude ver problemas aquí al tener que eliminar restricciones o hacer que los campos obligatorios se puedan anular para admitir los datos de estado 'incompletos'. Luego está el problema con cómo manejar la actualización de datos existentes, tendría que agregar una nueva fila para una actualización y vincularla a la fila 'en vivo' existente. Esto me parece un poco desordenado.
2) Agregue nuevas tablas que reflejen las tablas en vivo y almacene los datos hasta que se aprueben. Esto me permitiría mantener el control total sobre las mesas en vivo existentes, mientras que las tablas 'pendientes' pueden ser abusadas con lo que el usuario sienta que quiere poner ahí. La desventaja de esto es que terminaré con muchas tablas adicionales/SP en el db. Otro tema en el que estaba pensando era cómo podría un usuario vincular dos registros, por lo que el registro vinculado podría ser un registro en la tabla activa o uno en la tabla pendiente, pero supongo que en esta situación siempre podría tomar una copia del registro vinculado y tratarlo como una actualización?
Ninguna de las dos soluciones parece perfecta, pero la segunda me parece la mejor opción: ¿existe una tercera solución?