Administro un catálogo en línea. Actualmente el personal interno lo actualiza manualmente y sus cambios son visibles inmediatamente. Ahora queremos agregar un paso de verificación: Tom hace un cambio, Jerry lo aprueba.¿La mejor manera de administrar el flujo de trabajo update-review-publish?
Veo dos caminos, pero ninguno parece elegante.
- Guarde una segunda 'copia de trabajo' de toda la base de datos.
- Mantenga un segundo conjunto de tablas "sucias" dentro de la misma base de datos.
Ambos parecen requerir una gran cantidad de código solo para tareas domésticas, así como el doble del trabajo cada vez que cambia la estructura de una mesa.
¿Hay una manera mejor? En caso de que importe, el DBMS es SQL Server, la aplicación web es asp.net.
Editado para añadir:
Los dos cambios que he descrito son compatibles hacia atrás tanto con el código existente. Sé que voy a tener que hacer algunos cambios, pero no puedo alterar cada consulta.
Creo que mis restricciones clave prohíben simplemente clonar filas y marcarlas como 'pendientes'.
Digamos que Proveedor con el ID del proveedor 99 tiene dos productos. (Los productos pueden pertenecer a un solo SupplierID). El número de teléfono del proveedor ha cambiado, por lo que clono el registro del proveedor, cambio el número de teléfono y lo marcó como 'pendiente'. Pero el nuevo registro no puede tener una ID de 99, por lo que ya no hay forma de conectarlo a sus productos o incluso al registro que pretende reemplazar.
Supongo que podría agregar un identificador no restringido, SupplierPseudoID, pero esto parece tan complicado y propenso a errores como las ideas anteriores.
Y cuando se habla de diseño de bases de datos siempre recuerde: * Normalizar hasta que duela, desnormalizar hasta que funcione *. – voyager
Ver mi edición, arriba. Por lo que vale, la base de datos está completamente normalizada y no veo cómo la desnormalización me ayudará; pero estoy dispuesto a aprender – egrunin
@egrunin: es solo un viejo dicho. Al copiar tablas/bases de datos, se está desnormalizando como el infierno, lo que generalmente no es una buena idea. La desnormalización se hace generalmente para mejorar el rendimiento, pero debe hacerse con moderación. – voyager