sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo modelo datos que cambian lentamente con el tiempo?

Tuve un problema similar:grandes archivos planos importados a la base de datos una vez al día. La mayoría de los datos no cambian.

Agregue dos columnas adicionales a la tabla, fecha_inicial y fecha_final. El valor predeterminado para la fecha_finalización debe ser en algún momento en el futuro.

Para comparar un archivo con el siguiente, ordénelos por columnas clave y luego lea una fila de cada archivo.

  • Si las claves son iguales:compare el resto de las columnas para ver si los datos han cambiado. Si los datos de la fila son iguales, la fila ya está en la base de datos y no hay nada que hacer; si es diferente, actualice la fila existente en la base de datos con una fecha de finalización de hoy e inserte una nueva fila con una fecha de inicio de hoy. Lea una nueva fila de ambos archivos.
  • Si la clave del archivo anterior es más pequeña:la fila se eliminó. Actualice la fecha_finalización a hoy. Lea una nueva fila del archivo antiguo.
  • Si la clave del nuevo archivo es más pequeña:se insertó una fila. Inserte la fila en la base de datos con fecha_inicial de hoy. Lea una nueva fila del nuevo archivo.

Repita hasta que haya leído todo de ambos archivos.

Ahora, para consultar las filas que eran válidas en cualquier fecha, simplemente seleccione con una cláusula where test_date entre start_date y end_date.