Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Base de Datos Histórica

Estas en el tema de Base de Datos Histórica en el foro de SQL Server en Foros del Web. hola a todos, tengo un requerimiento de guardar registros historicos de un proceso en mi sistema (que abarca 35 a 40 tablas). se me ha ...
  #1 (permalink)  
Antiguo 14/03/2006, 11:32
Avatar de rodri  
Fecha de Ingreso: febrero-2005
Mensajes: 406
Antigüedad: 19 años, 2 meses
Puntos: 2
Base de Datos Histórica

hola a todos,


tengo un requerimiento de guardar registros historicos de un proceso en mi sistema (que abarca 35 a 40 tablas). se me ha sugerido hacer un vaciado de datos en otra base para tal efecto e indicar la versión de la modificación que se pueda hacer.

Es buena práctica el tener dos base de datos (una original y otra histórica) para el guardado de datos históricos?

saludos.
__________________
0.o Rodri
  #2 (permalink)  
Antiguo 14/03/2006, 12:02
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Personalmente no me agrada la idea. Al separar en diferentes DBs pierdes integridad relacional de una DB a otra y algunas veces la puedes necesitar.

En términos de rendiminto puedes optimizarlo en una sola DB: pues puedes tener diferentes filegroups en diferentes RAID; por ejemplo para eficientar el acceso a un data warehouse.

Una ventaja de usar 2 DBs es que si los históricos no cambiarán puedes respaldar unicamente la DB en vivo, con la consiguiente reducción de tiempo de respaldo (no recuerdo si puedes respaldar a nivel de filegroups)
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 16/03/2006, 15:28
Avatar de rodri  
Fecha de Ingreso: febrero-2005
Mensajes: 406
Antigüedad: 19 años, 2 meses
Puntos: 2
Si en realidad la copia de la Base de Datos quiere mostrar los cambios realizados ( el histórico). Aunque hay ciertos detalles adicionales, al hacer un cambio en la Base se deberia generar una nueva versión, pero eso significaria un grabado de todas las tablas con la nueva versión, esto para no perder la integridad de datos. El problema es la cantidad de datos que se estarían replicando por cada cambio.

Otro enfoque que yo habia estado considerando es el de guardar solamente en una tabla los cambios realizados relacionados a la tabla en específico, el nombre del campo y las claves primarias. De esta manera solo se replicaría la información cambiada, no se si es un buen enfoque, aunque veo q me ahorraría problemas de almacenamiento....

saludos
__________________
0.o Rodri
  #4 (permalink)  
Antiguo 17/03/2006, 14:59
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Hmm, nunca me he metido tan a detalle con ese tipo de problemas. Sale de mi alcance

Si llegas a alguna conclusión será interesante si la posteas para ayudar a quien llegue después de ti.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 17/03/2006, 17:48
Avatar de rodri  
Fecha de Ingreso: febrero-2005
Mensajes: 406
Antigüedad: 19 años, 2 meses
Puntos: 2
De acuerdo Una Solucion Alternativa

muchas gracias Mithrandir.

Te cuento que ya llegamos a una mejor solución con mi equipo.

Diseñamos una técnica en la que se guardan datos históricos en cada tabla, es decir, el cambio se hace a nivel de cada tabla, esto para poder reconstruir reportes dependiendo de la fecha y versión.

La técnica es la siguiente:

1. Todas las tablas que participan en el proceso, llevan dos atributos extra:
a. fecha (timestamp)
b. versión, donde versión 0 es la última versión.

2. Existen dos condiciones para hacer modificaciones:
a. Modificación trascendental
b. Modificación no trascendental

3. Si la Modificación es trascendental, se hace una inserción en la base de datos de la fila (o filas) que son objetos de cambio, y el dato que estaba antes de modificarse pasa a tener el último número en versión. Los nuevos datos pasan a tener versión 0 y se graban con su timestamp correspondiente.

4. Si la Modificación no es trascendental, el último dato es actualizado, es decir sobreescrito (ya no se cambia versión ni se hace la actualización).

5. Para la recuperación de Datos: esta se basa en elegir la fecha de modificación (si se está en modo histórico) y jalar las tablas relacionadas a la recuperación aumentando la restriccion de si la fecha de modificación de la tabla en cuestión es menor o igual a la fecha de la que se quiere sacar el reporte.

Si no se está en modo histórico, la consulta saca las tablas relacionadas agregando la restricción de sacar la máxima fecha (es decir, la última). MODIFICACION 21/03/2006 -> También se puede obtener de mejor forma si es que se eligen las versiones "0", las últimas.


6. El modo histórico correspondería a un usuario con roles mas altos (administrador p.ej), el cual podría dar permiso a los usuarios de rol inferior para que hagan modificaciones. Acá también se define si el cambio que se va a hacer es trascendental o no trascendental (en web, por ejemplo con variables de sesion o cookies).


Ventajas: Siempre se puede reconstruir los formularios dependiendo de la fecha en la que se quiera ver el histórico.

Desventajas: Si no se administra bien, es posible tener basura acumulada en cada tabla lo cual podria incurrir en fallos de performance y otros.
y bueno creo que ese es el algoritmo básico.

espero que pueda ser un método que resultados deseados.

saludos


MODIFICACION 21/03/2006 -> Créditos: bicha_ares
__________________
0.o Rodri

Última edición por rodri; 21/03/2006 a las 08:44
  #6 (permalink)  
Antiguo 20/03/2006, 16:01
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Excelente! gracias por compartirlo.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #7 (permalink)  
Antiguo 20/03/2006, 16:38
Avatar de rodri  
Fecha de Ingreso: febrero-2005
Mensajes: 406
Antigüedad: 19 años, 2 meses
Puntos: 2
ok, creo que es una buena técnica IMHO y he tratado de encontrar puntos débiles y lo peor sería lo que ya dije, si no se tiene un buen control, es posible que las tablas crezcan. Espero que hagan mas comentarios al respecto si hay algún problema por favor posteenlo.

Saludos.
__________________
0.o Rodri
  #8 (permalink)  
Antiguo 14/02/2010, 00:29
 
Fecha de Ingreso: marzo-2009
Mensajes: 155
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Base de Datos Histórica

hola rodri quisiera, si es posible, que me explicaras un poco mas detallado tu algoritmo para crear historicos de las base de datos

saludos manuelle
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:17.