Planteamiento
Si has usado índices complejos y en algunas ocasiones no te han funcionado correctamente y has llegado a la conclusión de que es una «incidencia/bug» de Velneo, te interesa leer este artículo porque puede ser de gran ayuda para que puedas aprovechar todo el potencial de los índices complejos consiguiendo que te funcionen bien, ya que como podrás leer no se trata de una incidencia de Velneo sino de la aplicación correcta de un criterio que debemos tener en cuenta al programar.
La incidencia
Vamos a utilizar un ejemplo sencillo y práctico de índice complejo habitual. Indexamos la tabla de facturas por el nombre del cliente que lógicamente es un campo ubicado en la tabla de clientes. Resulta que cuando creas una nueva factura se indexa todo correctamente, pero si vas al cliente y le cambias el nombre ¡sorpresa! el índice complejo no se ha reindexado y sigue encontrando las facturas con el nombre antiguo y si buscas por el nuevo nombre no encuentra nada. ¿Te ha pasado? ¿Tienes claro que es una fallo de Velneo? Sigue leyendo.
Solución bruta
He hablado con clientes que me comentan que como no se fían de los índices complejos lo que hacen es forzar la reindexación del índice complejo todos los días o semanas. Evidentemente tras realizar la reindexación el índice queda correcto y la incidencia comentada anteriormente se evita. Sin embargo, es evidente que esa no es la solución, estamos ante un caso de eliminación de síntomas pero no del origen de los mismos.
¿Qué está pasando?
Lo primero que tenemos que comentar es que es que esta aparente «indicencia» no se produce en el 100% de los casos, solo en «algunos» casos concretos, por lo que aún nos puede despistar más. Lo verdaderamente importante es que tenemos que conocer bajo qué condiciones trabaja la reindexación de las claves cuando cambia el valor de la tabla maestra involucrada en el índice complejo.
Índices a puntero a maestro sin condiciones
Quédate con esta frase, pues es la clave de todo. Para que un índice complejo pueda reindexar correctamente los cambios de un maestro que está declarado en el índice complejo se deben cumpliar las 2 siguientes condiciones:
- Debe existir un índice del campo puntero a maestro declarado en la tabla que se indexa. Aplicado a nuestro ejemplo significa que en la tabla de facturas de venta debemos tener declarado un índice por el campo puntero a cliente. Si no existe este índice Velneo es incapaz de saber que registros se verán afectados por el cambio y no podrá reindexarlos.
- El índice del campo puntero a maestro no debe estar condicionado este suele ser el motivo de la falsa incidencia que nos puede estar sucediendo. Lo normal es que hayamos cumplido la primera condición de tener al menos un índice por el campo puntero a maestro, en nuestro ejemplo el índice por el campo cliente de la factura.
Sin embargo, debemos tener siempre presente que aunque podemos declarar en la tabla de facturas tantos índices como consideremos oportuno por el campo campo cliente, al menos un índice debe tener limpia la propiedad de condición para indexar. Te puedes estar preguntando ¿Por qué? y la respuesta es sencilla, porque si el índice está condicionado no podemos garantizar que seremos capaces de apuntar a todos los registros plurales de la tabla, en nuestro ejemplo a todas las facturas del cliente, por lo tanto ante un cambio del nombre del cliente podríamos dejar parcialmente registros sin reindexar. Este criterio es el que aplica la base de datos de Velneo a la hora de reindexar registros de índices complejos de tal forma que si no encuentra ningún indice al campo maestro sin condicionar no realizará el refresco de los cambios del maestro en el índice complejo.
Recomendación
Conociendo las 2 condiciones expuestas anteriormente está claro que nuestro objetivo como programadores al crear un índice complejo es garantizar que exista al menos un índice del campo puntero a maestro sin condicionar. Si tienes algún índice complejo donde se te está produciendo esta falsa «incidencia» comentada en este artículo prueba a crear el índice sin condición de indexación, y casi seguro que habrás conseguido el funcionamiento deseado del índice complejo evitando de esta forma tener que reindexarlo periódicamente para garantizar que los datos y las búsquedas funcionen correctamente.
Deja una respuesta