Ideas de diseño de base de datos para la captura de las 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 a cada fila. Eso significa que no me puedo permitir DELETE y UPDATE a realizar.

¿Cómo puedo mantener un registro?

InformationsquelleAutor Greens | 2009-06-26

5 Kommentare

  1. 24

    Uso «Insertar Sólo Las Bases De Datos»

    La idea básica es que usted nunca actualizar o eliminar los datos.

    Cada tabla tiene 2 columnas datetime de y a.

    Comienzan con el valor null en cada uno (principio de los tiempos hasta el final de tiempo)

    Cuando usted necesidad de «cambiar» la fila se agrega una nueva fila, al mismo tiempo que la actualización de la a en la fila anterior a la de Ahora y la de en la fila que se va a agregar Ahora.

    De leer los datos de la tabla a través de un punto de vista que tiene una donde a = null en ella.

    Este método también te da una visión del estado de la base de datos en cualquier punto en el tiempo.

    EDITAR

    Solo para aclarar, en respuesta a la observación: La secuencia sería dado por la clave principal de la tabla, lo cual sería un autoincrement número.

    • no se trata simplemente de una enorme desperdicio de espacio?
    • Si usted necesita de datos, que hacer si necesita una pista de auditoría, no se desperdicia.
    • Yo no iría con fecha columnas de hora para cualquier ID/Búsqueda de datos o cualquier secuencia de datos. Los sistemas fecha podría cambiar por cualquier motivo o varias de las operaciones que suceden en el mismo tiempo de resolución de un único valor de fecha/hora, son posibles. Si usted necesita para capturar la secuencia en el tiempo de uso de la marca de tiempo (único garantizado) o el uso de enteros largos o utilizar los guid desde el de la también construye una cadena (pero se pierde el tiempo como un elemento de información – leer también la respuesta de abajo…)
    • Kolten, si usted trabajó en una industria donde todo tenía que ser rastreados debido al cumplimiento de la normativa se darán cuenta de que este es un mal necesario. También, el póster puede auditoría sólo el subconjunto de tablas que la mayoría de los intereses de él/ella, por lo que el espacio desperdicio es en relación con el nivel de registro que él/ella quiere…
    • He utilizado este patrón antes de particular tablas. Yo recomendaría tener un único índice compuesto de la foreign key(s) y la ‘a’ el valor. Esto significa que usted no puede insertar otra fila antes de actualizar el campo de la anterior registro actual.
    • INSERTAR sólo de la base de datos… cuando usted necesita cambiar … ACTUALIZACIÓN … No es exacto insertar solo, que es?
    • Creo que es INSERTAR-sólo con respecto a los datos reales. La «a» y «de» las columnas son más parecidos a los meta-columnas en este caso. Recordar también que la columna «a» es NULO hasta Actualizada y nunca se cambia, por lo tanto, también es en un sentido de sólo INSERCIÓN. Una vez que el valor real se inserta en ella, no se actualiza.
    • No almacenar to y from, se presenta una actualización anomalía es incorrecto diseño. Usted sólo necesita almacenar un valor.
    • tal vez esta anomalía en realidad no se producen en la práctica, ya que en realidad nunca actualización de las marcas de tiempo en ellos. Es esto correcto?

  2. 17

    [Post tarde, pero añade dos técnicas que no han sido mencionados aquí]

    De lectura de registro de transacciones – si su base de datos está en modo de recuperación completa luego del registro de transacciones almacena una gran cantidad de información útil que puede ser usado para ver la historia de cada fila.
    La desventaja es que esto no es apoyado por defecto. Usted puede intentar el uso de funciones no documentadas DBCC de REGISTRO o fn_dblog o herramienta de terceros, como ApexSQL Log

    Mediante la Captura de Datos modificadosLa captura de datos modificados hace esencialmente lo mismo como se muestra arriba, pero es más ágil y un poco más fácil de usar. Por desgracia, esto sólo está disponible en la edición enterprise.

    Ambos de estos puede resolver el problema de permitir actualizar y borrar porque realmente no se puede cambiar lo que está escrito en el registro de transacciones.

  3. 14

    El uso de una «insertar» sólo la base de datos, como se describe por Shiraz Bhaji, pero se puede usar una simple técnica. Para cada tabla en la que usted necesita para mantener la auditoría de datos, sólo tiene una columna adicional Actualizada en el Tiempo, por defecto ahora. Cuando usted hace un cambio a un registro, en lugar de actualizar, acaba de hacer un insert con todos sus datos; la UpdatedTime de la columna para obtener la hora actual.

    Tenga en cuenta que este método significa que usted tiene que romper o reconsiderar sus ÚNICAS limitaciones; puede mantener una clave principal, pero la singularidad se convierte en un compuesto de la clave principal y su UpdatedTime.

    Esta técnica tiene la ventaja de ofrecer un rango de datos históricos para cada registro en la tabla (cada registro es válido por un tiempo determinado si es el TOP 1 de los registros en los que TimeOfInterest > UpdatedTime ORDEN POR UpdatedTime DESC), con una baja sobrecarga (sólo una sola columna de la tabla). También es muy susceptible a la conversión de las tablas no se utiliza este método, con un simple ALTER TABLE para agregar una sola columna (la que puede asignar un nombre de forma consistente). A continuación, sólo tiene que modificar sus ÚNICAS limitaciones para el uso de un compuesto de sus actuales límites impuestos y la UpdatedTime columna, y algunas consultas tendrá que ser alterado.

    Nota así que usted puede evitar la conversión de todas las consultas si se crea una vista de la tabla que simplemente devuelve la entrada más reciente de cada uno de los registros; terminar con una tabla que mantiene un histórico de datos de forma transparente, y un punto de vista que se ve como una tabla normal sin la changelogging.

  4. 5

    Un enfoque totalmente diferente es que sólo tienen un registro de auditoría. A continuación, utilice esto para construir la versión más actual de sus datos. De crear «puntos de control» de forma periódica o mediante el almacenamiento en caché para acelerar este proceso.

    Hay una presentación acerca de alguien usando esta técnica: http://www.infoq.com/presentations/greg-young-unshackle-qcon08. La gran ventaja aquí es que, dado que sólo se tiene el registro de auditoría vas a estar bastante seguros de que su pista de auditoría es correcta.

    Nunca he probado esto y parece bastante complicado … pero algo en que pensar.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...