Cada vez que necesito diseñar una nueva base de datos paso bastante tiempo pensando en cómo debo configurar el esquema de la base de datos para mantener un registro de auditoría de los cambios.Diseño de base de datos para registro de auditoría
Algunas preguntas que ya se ha pedido aquí sobre esto, pero no me acuerdo en que hay un único mejor enfoque para todos los escenarios:
- Database Design For Revisions
- Best design for a changelog auditing database table
- Ideas on database design for capturing audit trails
También me he topado con este interesting article on Maintaining a Log of Database Changes que intenta enumerar los pro y los contras de eac h enfoque. Está muy bien escrito y tiene información interesante, pero ha hecho que mis decisiones sean aún más difíciles.
Mi pregunta es: ¿Existe una referencia que puedo usar, tal vez un libro o algo así como un árbol de decisión que puede referirse a decidir qué manera debo ir sobre la base de algunos variables de entrada, como:
- la madurez del esquema de base de
- ¿Cómo se pueden consultar los registros de
- la probabilidad de que se necesita para volver a crear los registros
- lo que es más importante: escribir o leer PE rformance
- Naturaleza de los valores que se está registrando (cadena, números, BLOB) espacio de almacenamiento disponible
Los enfoques que sé que son:
1. Añadir columnas para crear y fecha y de usuario modificado ejemplo
Tabla:
- Identificación
- valor_1
- valor_2
- VALUE_3
- created_date
- modifed_date
- created_by
- modified_by
Las principales desventajas: se pierde la historia de las modificaciones. No se puede deshacer después de la confirmación.
2.Inserte sólo las tablas
- Identificación
- valor_1
- valor_2
- VALUE_3
- de
- a
- borrado (booleano)
- usuario
Principales inconvenientes: ¿Cómo mantener guardadas las claves foráneas? enorme espacio necesario
3. Crear una tabla de historial independiente para cada tabla
ejemplo de tabla de la historia:
- Identificación
- valor_1
- valor_2
- VALUE_3
- VALUE_4
- usuario
- borrado (booleano)
- marca de tiempo
Las principales desventajas: tiene que duplicar todas las mesas auditadas. Si el esquema cambia, será necesario migrar todos los registros también.
4. Crear una tabla de historial consolidado para todas las tablas
ejemplo de tabla de la historia:
- nombre_tabla
- campo
- usuario
- nuevo_valor
- borrado (booleano)
- marca de tiempo
Principales inconvenientes: ¿Puedo volver a crear los registros (retroceder) si es necesario fácilmente? La columna new_value debe ser una cadena enorme para que pueda admitir todos los tipos de columna diferentes.
relacionada: http://stackoverflow.com/questions/9852703/store-all-data-changes-with-every-details-stackoverflow-like – Kaii
y lo que sobre el uso de una base de datos de la historia en lugar de tablas? – Jowen
Tal vez podría consultar el diseño de https://github.com/airblade/paper_trail – zx1986