MyDatabase… menudo trabajo

O un coñazo, dependiendo de a quien le preguntes. Mi idea original era modelar las conexiones por separado: tengo por un lado una conexión con el alojamiento (MyAlojamiento), otra con los asistentes (MyAsistentes), una para los grupos (MyGrupos) y así hasta la nausea… pero claro, me di cuenta de que todas ellas comparten una única conexión con la base de datos, modelada como MyAcolitoDB, y entonces se fue todo al garete. ¿Cómo podría asegurar, a la hora de cerrar la conexión y volverla a abrir, que se hubieran eliminado todos los modelos y las sentencias lanzadas en cada una de ellas? Porque las señales no te aseguran que se ejecuten los slots de forma secuencial…

Al final, después de darle muchas, muchas vueltas, decidí tirar por la calle de enmedio: un Facade y se acabó. Y dentro del Facade / Singleton, ya tengo las conexiones modelizadas como quiera (un MyAlojamiento, por ejemplo, o un MyAsistentes que me devuelvan los modelos que necesito).

Después de tener decidido cómo iba a ser el esquema, me puse a preparar el script de la base de datos… el MySQL Workbench es una cosa estupenda y maravillosa, pero hay que vigilarlo muy de cerca a la hora de establecer las relaciones entre las distintas tablas. ¿Por qué? Porque no resulta todo lo intuitivo que debería: de repente me encontré con tablas que tenían claves externas compartidas a dos bandas y claro, fallaba; además que el BLOB/TEXT no permite índices y referencias sin especificar el tamaño máximo, ni tampoco valores por defecto, así que fue necesario modificar las tablas y cambiar el tipo a VARCHAR(100), para que tengan espacio de sobra. No me preocupa el gasto de indices (están limitados a 30 caracteres) porque la base de datos no debería de crecer sobremanera. Aún así, aunque ahora mismo funciona, todavía faltan por introducir en el script procedimientos y triggers… ¡y sólo estamos hablando del alojamiento y personas, que todavía faltan las actividades!

Otro problema del que me dí cuenta: la inserción de eventos no incluía a las categorías. ¡Madre mía, qué de vueltas he tenido que dar para conseguir que se introduzcan las categorías en el evento recién creado! Porque hay que tener en cuenta que, al crear un evento, se introducen primero los datos en la base de datos de Eventos (desde allí se pueden presentar al usuario para que escoja el que quiera abrir), y luego debe de crearse la base de datos con las categorías por defecto. Así que envío los datos a MyEventoDB, el cual introduce la información en MyModeloEventos, y este envía una señal que recibe MyEventoDB y que vuelve a lanzar para que la capte MyDatabase y cree el esquema de la base de datos e introduzca las categorías por defecto. Este proceso se tiene que realizar usando la conexión de MyEventoDB porque la conexion de MyDatabase no esta abierta, y hay que pre-procesar el script para incluir el nombre del esquema en todas las tablas… no es complicado, pero sí es tedioso.

¡Menos mal que funciona!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s