Cómo administrar múltiples versiones del mismo logging

Estoy trabajando en contratos a corto ploop para una empresa que está tratando de implementar un tipo de flujo de trabajo de check-in / check-out para sus loggings de database.

Así es como debería funcionar …

  1. Un usuario crea una nueva entidad dentro de la aplicación. Hay aproximadamente 20 tablas relacionadas que se completarán además de la tabla de la entidad principal.
  2. Una vez que se crea la entidad, el usuario la marcará como el maestro.
  3. Otro usuario puede hacer cambios en el maestro solo "revisando" la entidad. Múltiples usuarios pueden pagar la entidad al mismo time.
  4. Una vez que el usuario ha realizado todos los cambios necesarios en la entidad, la coloca en estado de "aprobación de necesidades".
  5. Después de que un usuario autorizado revisa la entidad, puede promocionarla para dominar, lo que colocará el logging original en un estado desechado.

La forma en que actualmente están logrando el "check out" es mediante la duplicación de los loggings de la entidad en todas las tablas. Las keys principales incluyen EntityID + EntityDate, por lo que duplican los loggings de la entidad en todas las tablas relacionadas con el mismo EntityID y un EntityDate actualizado y le otorgan un estado de "desprotegido". Cuando el logging se coloca en el siguiente estado (necesita aprobación), la duplicación ocurre nuevamente. Eventualmente se promoverá para dominar, en cuyo momento el logging final se marcará como maestro y el maestro original se marcará como muerto.

Este layout me parece horrible, pero entiendo por qué lo han hecho. Cuando alguien busca una entidad desde dentro de la aplicación, necesita ver todas las versiones actuales de esa entidad. Esta fue una manera muy directa de hacer que eso suceda. Pero el hecho de que representen a la misma entidad varias veces dentro de la (s) misma (s) tabla (s) no me sienta bien, ni tampoco el hecho de que estén duplicando CADA parte de los datos en lugar de solo almacenar los deltas.

Me interesaría escuchar tu reacción al layout, ya sea positiva o negativa.

También estaría agradecido por los resources a los que me puede remitir que podrían ser útiles para ver cómo alguien más ha implementado dicho mecanismo.

¡Gracias!
Darvis

Trabajé en un sistema como este que soportaba los datos estáticos para operar en un banco muy grande. Los datos estáticos en este caso son cosas como los detalles de las contrapartes, las instrucciones de liquidación estándar, las divisas (no las tasas de cambio). Todas las entidades de la database tenían versiones, y cambiar una entidad implicaba crear una nueva versión, cambiar esa versión y get el versión aprobada. Sin embargo, no permitieron que varias personas crearan versiones al mismo time.

Esto llevó a una database terriblemente compleja, y cada combinación tuvo que tener en count la versión y el estado de aprobación. De hecho, el software que escribí para ellos fue el middleware que resumió estos datos complejos y versionados en algo que las aplicaciones de los usuarios finales podrían usar realmente.

Lo único que podría haber empeorado la situación era almacenar deltas en lugar de objects con versiones completas. Entonces, el objective de esta respuesta es: ¡no intente implementar deltas!

Está describiendo un Sistema de Gestión de Contenidos casero que probablemente fue pirateado a lo largo del time, es -por las razones que usted afirma- networkingundante e ineficiente, y dada la naturaleza de tales sistemas en las empresas es poco probable que sea desplazado sin un esfuerzo organizacional masivo.

Esto parece un ejemplo de un esquema de database temporal: a menudo, en casos como ese, se hace una distinción entre la key de una entidad (EntityID, en su caso) y la key primaria de la fila en la database (en su caso, {EntityID , date}, pero a menudo un integer simple). Debe aceptar que la misma entidad está representada varias veces en la database, en diferentes puntos de su historial. Cada fila de la database todavía tiene una ID única; es solo que su database está rastreando versiones, en lugar de entidades.

Puede gestionar datos de esa manera, y puede ser muy útil para rastrear los cambios en los datos y proporcionar responsabilidad, si es necesario, pero hace que todas sus consultas sean un poco más complejas.

Puede leer sobre la razón de ser y el layout de bases de datos temporales en Wikipedia

Intereting Posts