Estoy construyendo tablas de auditoría para mi base de datos y necesito elegir qué estilo implementar. Actualmente estoy considerando tres opciones, todas las cuales se completarán con los activadores:estructura de tabla de auditoría
- Una sola tabla con los campos id | mesa | columna | fila | old_value | new_value | marca de tiempo | identidad de usuario. Esto haría un seguimiento de todos los cambios en todas las tablas en un solo lugar y tiene el beneficio de minimizar el número de tablas. Hace las consultas un poco difíciles, pero no imposibles.
- Múltiples tablas como # 1, excepto sin la columna de la tabla. Esto separaría los cambios de cada tabla en su propia tabla de historial.
- Múltiples tablas que reflejan el esquema de las tablas originales para rastrear. Esto facilitaría la escritura de los factores desencadenantes, facilitaría la restauración de los datos si alguien quisiera volver a un registro específico, pero vendría a expensas del almacenamiento, ya que cada campo, incluso si no hubiera cambiado, lo haría ser duplicado, posiblemente varias veces. Además, sería difícil saber específicamente qué campos cambiaron de una versión a la siguiente.
Cada una de estas tres opciones es factible, y por lo que yo sé, no hay una funcionalidad que se ofrece que es imposible en otra. Entonces debe haber algo que no estoy considerando o algún patrón que sea más estándar. Si hace alguna diferencia, esta solución debe funcionar para ambos servidores, mysql y sql (aunque puedo resolver los detalles del código más adelante).
Implemento una versión del número 3. En SQL Server, el activador puede identificar cada columna que se ha modificado. Guardo eso junto con toda la fila que se modifica + algunas columnas específicas de auditoría (auditdatetime, userinfo, etc.). Guardo el hash, pero creo una vista que decodifica el hash y enumera las columnas afectadas. – datagod