Pregunta

El tema de cómo auditar tablas ha surgido recientemente en nuestras discusiones ... así que me gusta su opinión sobre cuál es la mejor manera de abordar esto. Tenemos una mezcla de ambos enfoques (que no es bueno) en nuestra base de datos, ya que cada DBA anterior hizo lo que él / ella creía que era la manera correcta. Así que tenemos que cambiar a seguir ningún modelo.

CREATE TABLE dbo.Sample(
Name VARCHAR(20),
...
...
Created_By VARCHAR(20),
Created_On DATETIME,
Modified_By VARCHAR(20),
Modified_On DATETIME
)

CREATE TABLE dbo.Audit_Sample(
Name VARCHAR(20),
...
...
Created_By VARCHAR(20),
Created_On DATETIME,
Modified_By VARCHAR(20),
Modified_On DATETIME
Audit_Type VARCHAR(1)  NOT NULL
Audited_Created_On DATETIME
Audit_Created_By VARCHAR(50)
)

Enfoque 1: tienda, en tablas de auditoría, sólo aquellos registros que son reemplazados / borrados de la tabla principal (usando la tabla de sistema suprimido). Así que para cada UPDATE y DELETE en la tabla principal, el registro que está siendo sustituida se inserta en la tabla de auditoría con la columna 'Audit_Type', como se marchitan 'U' (Actualizar) o 'D' (para eliminar)

INSERT no son auditados. Para la versión actual de cualquier registro que siempre se consulta la tabla principal. Y para la historia se consulta la tabla de auditoría.

Pros: Parece intutive, para almacenar las versiones anteriores de los registros Contras: Si necesita conocer la historia de un registro en particular, tiene que unirse a la mesa de auditoría con mesa principal

.

appraoch. 2: tienda, en la tabla de auditoría, cada registro que se dedica a la tabla principal (usando la tabla de sistema insertada)

Cada registro que se inserta / modificado / eliminado a la mesa principal también se almacena en la tabla de auditoría. Así que cuando se inserta un nuevo disco que también se inserta en la tabla de auditoría. Con la actualización, la nueva versión (de insertada) tabla se almacena en la tabla de auditoría. Cuando borrado, versión antigua (de suprimido) tabla se almacena en la tabla de auditoría.

Pros: Si necesita conocer la historia de un registro en particular, lo tienes todo en un solo lugar

.

Aunque no enumerar todas aquí, cada método tiene sus ventajas y desventajas?

¿Fue útil?

Solución

Me quedo con:

  

appraoch 2: tienda, en la tabla de auditoría, cada registro que se dedica a la tabla principal   (Utilizando la Tabla sistema insertada).

es una fila más por artículo realmente va a matar a la base de datos? De esta manera tiene la historia completa juntos.

Si purgar filas (una gama todos mayores que el día X) todavía se puede decir si algo ha cambiado o no:

  • si existe una fila de auditoría (no purgado) se puede ver si la fila en cuestión cambió.
  • si no existen filas de auditoría para el elemento (todo fueron purgados) nada ha cambiado (ya que cualquier cambio se escribe en la tabla de auditoría, incluyendo totalmente nuevos artículos)

si vas con appraoch 1:. Y purgar a cabo una serie, que será difícil (hay que recordar la fecha de purga) para contar nuevas inserciones en comparación con aquellos en los que se purgan todas las filas

Otros consejos

Un tercer enfoque que usamos mucho es sólo para auditar las columnas interesantes, y ahorrar 'nuevo' y el valor 'viejo' en cada fila.

Así que si usted tiene su columna "Nombre", la tabla de auditoría tendría "name_old" y "name_new".

En desencadenador INSERT, "name_old" está ajustada en función blanco / nulo de su preferencia y "name_new" se establece a partir insertado. En desencadenador UPDATE, "name_old" se establece a partir eliminados y "name_new" de INSERTADOS En gatillo DELETE, "name_old" se establece desde borrada y "new_name" a blanco / null.

(o utiliza una unión completa y un disparador para todos los casos)

Para los campos VARCHAR, esto podría no parecer una buena idea, pero para INTEGER, DATETIME, etc que proporciona el beneficio de que es muy fácil ver la diferencia de la actualización.

es decir. si tiene un campo de cantidad en su mesa real y actualizarlo del 5 al 7, tendría en la tabla de auditoría:

quantity_old  quantity_new
           5             7

Fácilmente se puede calcular que la cantidad se incrementó en un 2 en el tiempo determinado.

Si tiene filas separadas en tabla de auditoría, que tendrá que unirse a una fila con "el próximo" para calcular la diferencia - que puede ser difícil en algunos casos ...

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