h1

Log en una base de datos

29 diciembre 2010

Al parecer este era un log antes de que existiesen los ordenadores

Bueno para tener un log mas menos sofisticado dentro de nuestra base de datos, por lo general en las empresas manejan estados lógicos de sus registros, donde por ejemplo una tabla llamada correo puede tener los siguientes campos:

COR_ID PK
USU_ID FK_USUARIO
COR_COR_ID FK_CORREO
COR_DESCRIPCION
COR_FECHA_INICIO
COR_FECHA_TERMINO
COR_QRY ESTADO

Como podemos ver, tenemos la llave primaria de la tabla, donde a su vez podemos ver dos llaves foráneas, la primera hace referencia a la tabla usuario y la segunda hace referencia a la misma tabla, finalmente tenemos un campo llamado COR_QRY donde en él manejo los estados del registro, que pueden ser los siguientes:

I : fila insertada
U: fila actualizada
D: fila eliminada

Por lo tanto cada vez que realice una modificación de la fila cambiare el estado de ella por “U” y crearé una nueva fila con estado “I” con los nuevos valores que se modificaron, donde además agregaré el id de la fila anterior para poder saber cuáles fueron los valores anteriores.

Veamos un ejemplo práctico:

COR_ID USU_ID COR_COR_ID COR_DESCRIPCION COR_FECHA_INICIO COR_FECHA_TERMINO COR_QRY
1 2 hola@angerrising.cl 29/12/2010 30/12/2010 U
2 2 1 testing@angerrising.cl 30/12/2010 31/12/2010 U
3 2 2 chao@angerrising.cl 31/12/2010 I
4 1 otro@angerrising.cl 31/12/2010 I

Por lo tanto si quisiéramos luego mostrar el log de algun correo, debo tomar el id de algún correo en estado “I” (se asume que esa es la ultima actualización del registro) y comenzar a ver cuáles son sus antepasados, para ello ejecuto la siguiente query (sobre Oracle):

select level, c.* from correo c
START WITH COR_ID = 96
CONNECT BY PRIOR COR_COR_ID like cor_id
ORDER BY COR_ID

y nos mostrara como resultado lo siguiente:

LEVEL COR_ID USU_ID COR_COR_ID COR_DESCRIPCION COR_FECHA_INICIO COR_FECHA_TERMINO COR_QRY
3 1 2 hola@angerrising.cl 29/12/2010 30/12/2010 U
2 2 2 1 testing@angerrising.cl 30/12/2010 31/12/2010 U
1 3 2 2 chao@angerrising.cl 31/12/2010 I

Bueno esto es considerado una buena práctica al momento que nos realicen una auditoria en caso de que se hayan realizado cambios malintencionados sobre la integridad de los datos o si tan solo queremos mantener históricos de algo especifico, incluso tb sirve si queremos organizar jerarquías donde podemos ver un ejemplo de ello en este sitio, espero que les haya gustado y/o servido, saludos.

Advertisement

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.