Pregunta

Tengo un DB que almacena diferentes tipos de tareas y más elementos en diferentes tablas. En muchas de estas tablas (que su estructura es diferente) necesito una forma de hacerlo que el elemento debe verificarse dos veces, lo que significa que el elemento no se puede 'guardar' (quiero decir, por supuesto, se guardará) Antes de que alguien más vaya al programa y lo confirme.

¿Cuál debería ser la forma correcta de decir qué artículo está confirmado?

  1. Cada una de estas tablas debe tener una columna "ESCONFirmada", luego, cuando ese tipo quiere confirmar todas las cosas, el programa camina a través de todas las tablas y crea una lista de los elementos que no están marcados.
  2. Debe haber una tercera tabla que contenga el nombre de la tabla y la identificación de esa fila que debe confirmarse.
  3. Espero que tengas una mejor idea que los dos uglies anteriores.
¿Fue útil?

Solución

¿Es el estado de doble confirmación algo que sucede exactamente una vez para una entidad? ¿O puede ser rechazado y necesita pasar por confirmación nuevamente? En el último caso, ¿necesita mantener todo este historial? ¿Necesita realizar un seguimiento de quién confirmó cada vez (por ejemplo, para que no tenga a la misma persona que realiza ambas confirmaciones)?

El caso simple:

ALTER TABLE dbo.Table ADD ConfirmCount TINYINT NOT NULL DEFAULT 0;
ALTER TABLE dbo.Table ADD Processed BIT NOT NULL DEFAULT 0;

Cuando la primera confirmación:

UPDATE dbo.Table SET ConfirmCount = 1 WHERE PK = <PK> AND ConfirmCount = 0;

En la segunda confirmación:

UPDATE dbo.Table SET ConfirmCount = 2 WHERE PK = <PK> AND ConfirmCount = 1;

Cuando se rechazó:

UPDATE dbo.Table SET ConfirmCount = 0 WHERE PK = <PK>;

Ahora, obviamente, su trabajo de fondo solo puede tratar las filas donde se procesan = 0 y ConfirmarCount = 2. Luego, cuando ha procesado esa fila:

UPDATE dbo.Table SET Processed = 1 WHERE PK = <PK>;

Si tiene un escenario más complejo que este, proporcione más detalles, incluidos los objetivos del proceso de doble confirmación.

Otros consejos

Considere agregar una nueva tabla para mantener los registros a confirmarse (por ejemplo, TaskStObEconfirmado). Una vez que se confirman los registros, mueva esos registros a la tabla permanente (tareas).

La desventaja de agregar una columna "ISconfirmada" es que prácticamente todas las instrucciones SQL que usan la tabla deberán filtrar en "ISconfirmed" para evitar obtener registros no confirmados. Cada vez que se pierde esto, se introduce un defecto.

En los casos en que necesite registros confirmados y no confirmados, use unión.

Este patrón es un poco más de trabajo para codificar e implementar, pero en mi experiencia, mejora significativamente el rendimiento y reduce los defectos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top