triggers anti-patterns last-modified

triggers - Última fecha de actualización: Antipattern?



anti-patterns last-modified (6)

Sigo viendo preguntas que hacen referencia a una columna en una tabla de base de datos llamada algo como DateLastUpdated. No lo entiendo

El único campo complementario que he visto es LastUpdateUserId o similar. Nunca hay un indicador sobre por qué se realizó la actualización; o incluso lo que fue la actualización.

Además de eso, este campo a veces se escribe desde dentro de un disparador, donde aún hay menos contexto disponible.

Ciertamente, ni siquiera se acerca a ser una pista de auditoría; entonces esa no puede ser la justificación. Y si hay una pista de auditoría en alguna parte de un registro o lo que sea, este campo sería redundante.

¿Qué me estoy perdiendo? ¿Por qué este patrón es tan popular?


Depende de la circunstancia exacta, pero una marca de tiempo como esa puede ser muy útil para los datos autogenerados: puede averiguar si algo debe ser recalculado si una dependencia ha cambiado más adelante (así es como los sistemas de compilación calculan qué archivos deben recompilarse )

Además, muchos sitios web tendrán marcado de datos "Último cambio" en una página, particularmente sitios de noticias que pueden editar contenido. El motivo exacto no es necesario (y es probable que existan copias de seguridad en caso de que realmente sea necesario un seguimiento de auditoría), pero esta información debe ser visible para el usuario final.


Este tipo de cosas se usan generalmente para aplicaciones comerciales donde se requiere la acción del usuario para iniciar la actualización. Por lo general, habrá algún tipo de aplicación de negocios (por ejemplo, una aplicación de escritorio CRM) y para la mayoría de las actualizaciones tiende a haber una sola forma de hacer la actualización.

Si está buscando datos de direcciones, eso se hizo a través de la pantalla "Mantener dirección", etc.

Dicha auditoría de base de datos está allí para aumentar la auditoría de nivel de negocios, no para reemplazarla. Los centros de llamadas a veces (o siempre en el caso de proveedores de servicios financieros en Australia, por ejemplo) graban llamadas telefónicas. Eso también forma parte del proceso de auditoría, pero no suele ser parte de la solución de TI en lo que respecta a la aplicación de escritorio (y la infraestructura relacionada), aunque de ninguna manera es una regla rígida.

El personal del centro de llamadas también suele tener algún tipo de funcionalidad de "Notas" o "Registro" donde pueden escribir texto de forma libre por qué el cliente llamó y qué acción se tomó para que el siguiente operador pueda continuar donde lo dejó cuando suene el cliente. espalda.

Los disparadores a menudo se utilizarán para registrar exactamente qué se cambió (por ejemplo, escribir el registro anterior en una tabla de auditoría). El objetivo de todo esto es que con toda la información (notas, llamadas grabadas, registros de auditoría de la base de datos y registros) se pueda reconstruir el estado previo de los datos, al igual que la acción resultante. Esto puede ser para encontrar / resolver errores en el sistema o simplemente como un proceso de resolución de conflictos con el cliente.


Sin duda es popular: los rieles, por ejemplo, tienen una abreviatura, así como una marca de tiempo de creación (: marcas de tiempo).

En el nivel de la aplicación, es muy útil, ya que el mismo patrón es muy común en las vistas: consulte las preguntas aquí, por ejemplo (contestadas hace 56 segundos, etc.).

También se puede usar retrospectivamente en los informes para generar estadísticas (por ejemplo, cuál es la curva de crecimiento del número de registros en el DB).


Tal campo se puede usar para detectar si hay modificaciones conflictivas realizadas por diferentes procesos. Cuando recupera un registro de la base de datos, obtiene el campo DateLastUpdated anterior. Después de realizar cambios en otros campos, envíe el registro a la capa de la base de datos. La capa de la base de datos verifica que DateLastUpdated que envía coincide con el que aún está en la base de datos. Si coincide, se realiza la actualización (y DateLastUpdated se actualiza a la hora actual). Sin embargo, si no coincide, entonces algún otro proceso ha cambiado el registro mientras tanto y la actualización actual puede abortarse.


hay un par de escenarios

Digamos que tiene una tabla de direcciones para sus clientes que tiene su aplicación CRM, el cliente llama que su dirección ha cambiado hace un mes, con la columna LastUpdate puede ver que esta fila para este cliente no se ha tocado en 4 meses

Usualmente usas desencadenadores para completar una tabla de historial para que puedas ver el resto de la historia, si ves que la fecha de creación y la fecha actualizada son las mismas, no hay ningún punto que golpee la tabla de historial ya que no encontrarás nada

usted calcula los índices (mercado de valores), puede ver fácilmente que se volvió a calcular con solo mirar esta columna

hay 2 servidores de bases de datos, al comparar la columna de fecha puede averiguar si todos los cambios han sido replicados o no, etc. etc.


Esto también es muy útil si tiene que enviar feeds a clientes que son feeds delta, es decir, solo los registros que se han cambiado o insertado desde que se enviaron los datos del último feed.