16 de julio de 2007

SQL Select - Bufferred Queries

Artículo original: SQL Select - Bufferred Queries
http://rickschummer.com/blog/2007/07/sql-select-bufferred-queries.html
Autor: Rick Schummer
Traducido por: Luis María Guayán - 16/07/2007

Utilicé hoy por primera vez, una nueva característica de VFP 9 en un escenario del mundo real: la nueva capacidad de consultar datos de un cursor con buffering, usando la nueva cláusula WITH (BUFFERING = .T.)

Sé que hay desarrolladores de VFP y administradores de bases de datos que dirán que usar esta sintaxis es absolutamente incorrecta porque los datos aun pueden ser revertidos, y así el resultado de la consulta no es reproducible. La información se podría utilizar incorrectamente para tomar decisiones de negocio y esto no es elegante, y no es un enfoque profesional. Estos individuos están absolutamente acertados, cuando necesitas tener control y equilibrio en la base de datos, integridad de los datos en la base de datos, e integridad en informes y análisis.

Por otra parte, yo tenía que usar esta nueva funcionalidad para comprobar la validez de los datos antes de que estos fueran grabados en la base de datos. Aquí está mi escenario:
  1. Tengo datos para importar de una fuente exterior.
  2. Tengo datos para importar de una fuente interna, pero exportados de una aplicación diferente.
  3. Hay una gran posibilidad de datos duplicados en las dos fuentes de datos.
  4. Todos los datos se importan a cursores con buffering.
  5. Tengo que ejecutar la importación de los datos a través de tres tablas distintas, de una vez, o no. Dos de las tablas están relacionadas.
Comienzo la transacción e importo los datos de la fuente interna, después importo los datos de la fuente externa comprobando para saber si hay duplicados. Quiero revisarlos antes de enviar la transacción. En el proceso de la revisión consulto las tablas para asegurarme de que no hay personas duplicadas, ningún vendedor duplicado, y necesito verificar que todas los registraciones son tomadas en el año apropiado.

Aquí está mi consulta para contar el número de la personas con registros duplicados:
SELECT cLastName, cFirstName, COUNT(*) as nCount ;
  FROM people WITH (BUFFERING = .T.) ;
    JOIN registration WITH (BUFFERING = .T.) ;
      ON people.cPeople_PK = registration.cPeople_FK  ;
  GROUP BY cLastName, cFirstName ;
  HAVING nCount > 1 ;
  INTO CURSOR curMultiYearRegistrations
Antes de la importación conté los registros de los datos de ejemplo para hacer mis comparaciones. Esta división y manejo de los datos almacenados en el buffer me ahorró muchos la molestia de quitar los datos importados cuando encontraba errores. Habría podido hacer volar la base de datos y restaurar una backup, pero ésa habría tomado más tiempo. Habría podido importar a otra área, pero con esto habría hecho dos veces el trabajo. Podía suspender el proceso de la importación y hacer algunas consultas específicas para verificar que todo está bien durante cada paso de la importación.

Tengo otra idea donde esta nueva sintaxis ayudará al producto HackCX Professional. Espero agregar en la próxima versión un informe o resumen en pantalla, así se puedan ver todos los cambios almacenados en buffer que se realizaron en la biblioteca de clases que esta cambiando. Seguro que puedo hacer esto sin una sintaxis SQL Select, pero pienso que que escribir un simple SQL Select es más rápido y menos código que recorrer toda la tabla para determinar qué registros han cambiado.
¿Has utilizado esta nueva sintaxis? Si es así ¿Para qué?

No hay comentarios. :

Publicar un comentario