Últimos días en Granada

Dentro de dos días estaremos ya en… no sé si llamarlo pueblo, sierra o chalet. Dejémoslo simplemente en la residencia de verano, que suena más fino aunque en realidad es un chalet. Estos días voy a estar dando viajes con maletas y limpiando muebles, para luego meterme a fondo con la piscina. ¡Y echando cuentas, eso significará que hace casi un año que empece con el blog! Cuanto tiempo…

Volviendo a temas más interesantes, ICS ha publicado una serie de aplicaciones de ejemplo que hacen uso de Qt y las APIs de Google, algo que me resulta muy interesante de cara al futuro (poder subir y descargar copias de seguridad en CSV de las bases de datos, es una primera posibilidad). Además, echándole un ojo al código de una de ellas he descubierto una librería muy interesante, también de Qt, para poder parsear y devolver objetos JSON. ¡Aleluya! Tengo ganas de echarle un buen vistazo y empezar a trastear con ella, pero lo primero es lo primero: terminar en condiciones la aplicación para las jornadas.

Eso sí, he visto un uso que no se me había ocurrido de QVariant, y una clase aún más interesante para enviar los datos necesarios a, por ejemplo, mi librería de generación de reportes BReport: QVariantMap. Básicamente, un diccionario que puede incluir un montón de datos interesantes. ¡Una muy buena forma de plantear una ficha de actividades o un formulario de asistente!

Menos mal :D

Al final, el diseño ha sido más flexible de lo que me temí en un principio. Hace tiempo que no revisaba los diferentes scripts para la base de datos, y afortunadamente fui previsor e incluí una buena cantidad de procedimientos almacenados para casi todo lo que se me ocurrió… ¡al menos, concerniente a los asistentes y grupos!

Con un par de triggers nuevos concernientes a la tabla de grupos, la cosa funciona bastante bien; es más, he podido añadir la operación de DELETE al modelo de asistentes de forma consistente gracias a los procedimientos que ya había descrito. ¡Y parece bastante consistente! Al menos, a primera vista: todavía no he podido hacer las pruebas de estrés con dos o más ordenadores atacando la misma base de datos. De cualquier modo, no creo que durante las jornadas se vayan a eliminar asistentes… eso ocurrirá durante la fase previa, cuando se van a ir introduciendo en el sistema los datos.

Ahora, sólo queda por añadir las opciones de cambio de grupo (aislar a un asistente de grupo, crear nuevos grupos, esas cosas…) y vigilar que sean consistentes con las habitaciones.

De vuelta al tablero de dibujo…

Sé que no debería de hacer las cosas así, que tendría que tener un diseño de la base de datos desde el primer momento, antes incluso de ponerme a picar código… pero siempre hay distracciones y detalles que se te escapan.

He vuelto a la base de datos y estoy de nuevo trabajando con los triggers para poder controlar tanto las reservas de habitaciones como la inserción de nuevos grupos. Como las habitaciones se asignan a los grupos y no a las personas, eso significa que cuando se crea un nuevo grupo hay que introducir un nuevo registro en la tabla que relaciona a los grupos con las habitaciones (por defecto, van a una habitación fantasma llamada ‘Sin asignar’, la cual en realidad no existe). Los procedimientos y triggers de la base de datos han de ser modificados en consonancia con este diseño, para que no queden cuelgues raros.

¡Y lo más divertido es que no estoy seguro de si desde un trigger de MySQL es posible llamar a un procedimiento almacenado! Recuerdo haber leído en alguna parte que los procedimientos anidados (procedimientos que llaman a otros procedimientos) no se permitían dentro de MySQL, pero… ¿a qué versión de MySQL se referían?

Un pequeño lío. Menos mal que el diseño es consistente y sólo hay que hacer cambios en unos pocos triggers y procedimientos…