Ideas sobre diseño de bases de datos para capturar pistas de auditoría

¿Cómo puedo mantener un registro de los datos en mi base de datos?

Tengo que mantener un registro de cada cambio realizado en cada fila. Eso significa que no puedo permitir que se realice DELETE y UPDATE .

¿Cómo puedo mantener ese registro?

Use “Insertar solo bases de datos”

La idea básica es que nunca actualice o elimine datos.

Cada tabla tiene 2 columnas de fecha y hora desde y hacia .

Comienzan con el valor nulo en cada uno (principio de tiempo hasta el final del tiempo)

Cuando necesite “cambiar” la fila, agregue una nueva fila, al mismo tiempo que actualiza la a en la fila anterior a Ahora y la de en la fila que está agregando a Ahora.

Lees datos de la tabla a través de una vista que tiene un where = = null en ella.

Este método también le brinda una idea del estado de su base de datos en cualquier momento.

EDITAR

Solo para aclarar en respuesta al comentario: La secuencia estaría dada por la clave principal de la tabla, que sería un número de autoincrement.

[Publicación tardía pero agrega dos técnicas no mencionadas aquí]

Lectura de registro de transacciones : si su base de datos está en modo de recuperación completa, el registro de transacciones almacena mucha información útil que se puede usar para ver el historial de cada fila. Lo malo es que esto no es compatible por defecto. Puede intentar usar funciones no documentadas DBCC LOG o fn_dblog o herramienta de terceros como ApexSQL Log

Uso de la captura de datos modificados: la captura de datos modificados básicamente hace lo mismo que se muestra arriba, pero es más sencillo y más fácil de usar. Lamentablemente, esto solo está disponible en la edición empresarial.

Ambos pueden resolver el problema de permitir la actualización y eliminación porque realmente no se puede cambiar lo que está escrito en el registro de transacciones.

Use una base de datos de “solo insertar”, como lo describe Shiraz Bhaji, pero puede usar una técnica más simple. Para cada tabla para la que necesita mantener los datos de auditoría, solo tiene una columna adicional para la Hora de actualización, por defecto ahora. Cuando realiza un cambio en un registro, en lugar de actualizar, simplemente haga una inserción con todos sus datos; la columna UpdatedTime obtendrá la hora actual.

Tenga en cuenta que este método significa que tiene que romper o reconsiderar sus limitaciones ÚNICAS; puede conservar una clave principal, pero la exclusividad se convierte en una combinación de su clave principal y su tiempo actualizado.

Esta técnica tiene la ventaja de proporcionarle un rango conocido de datos históricos para cada registro en la tabla (cada registro es válido por un tiempo dado si es el TOP 1 de registros WHERE TimeOfInterest> UpdatedTime ORDER BY UpdatedTime DESC) con una baja sobrecarga (solo una sola columna sobre la mesa). También es bastante susceptible a la conversión de tablas que no utilizan este método, con un simple ALTER TABLE para agregar una sola columna (que puede nombrar de forma consistente). Entonces solo necesita modificar sus restricciones ÚNICAS para usar un compuesto de sus restricciones actuales y la columna UpdatedTime, y algunas consultas deberán ser alteradas.

Tenga en cuenta también que puede evitar la conversión de todas sus consultas si crea una vista de la tabla que simplemente devuelve la entrada más reciente para cada uno de los registros; usted termina con una tabla que mantiene los datos históricos de forma transparente, y una vista que se parece a una tabla común sin el registro de cambios.

Un enfoque totalmente diferente es solo tener un registro de auditoría. A continuación, utilícelo para crear la versión más actual de sus datos. Crea “puntos de control” periódicamente o utiliza el almacenamiento en caché para acelerar esto.

Hay una presentación sobre alguien que usa esta técnica: http://www.infoq.com/presentations/greg-young-unshackle-qcon08 . La gran ventaja aquí es que, dado que solo tiene el registro de auditoría, estará bastante seguro de que su pista de auditoría es correcta.

Nunca lo he intentado y parece bastante complicado … pero algo en lo que pensar.

Vea si mi respuesta a otra pregunta de registro de base de datos contiene la información que necesita. Encuéntralo aquí …

Tablas de historial, pros, contras y errores: usar desencadenantes, sproc o a nivel de aplicación

    Intereting Posts