viernes, 11 de febrero de 2011

MySQL y SQL Developer, una de versiones

Andábamos buscando un cliente sencillo para acceder a nuestros servidores. Viniendo de Oracle, como veníamos desde hace tiempo, el SQL*plus resulta muy unix-like, antediluviano. Más tarde nos llegó el iSQL*plus que como idea era muy bueno, acceder con un navegador a una url y poco más, ninguna instalación, objetivos de la asignatura cumplidos… pero el demonio o el servicio, según sistema operativo, se nos colgaba hoy sí y ayer y mañana también. Es una historia larga y complicada para añadir comentarios a lo obvio de la solución. Con esto de pasarnos a MySQL, el problema es que lo que ofrece la casa se pasa algún pueblo de lo que necesitamos. Y volvemos a Oracle. Y si somos como somos nos bajamos lo último, incluso en beta.


Programas cliente para acceder al servidor de base de datos hay muchos pero al final nos hemos decantado por SQL Developer. Si más bien por mantener cierta compatibilidad con cursos anteriores, nos resulta flexible —puede conectarse a Oracle, a MySQL, a SQL Server, hasta a Access,fíjese—, de interfaz relativamente simple y con la posibilidad de obtener la salida en texto plano o en una tabla de lo más aparente. Felices. Hasta que llegó la hora de probar un comando muy evidente en MySQL: use database. Simplemente, no funciona. Siendo así, para hacer una simple consulta a una tabla debemos usar obligatoriamente su nombre “completo”, es decir: select * from tiendaonline.pedido. No es que sea complicado, pero sí pesado.

Inicialmente, SQL Developer es una herramienta de migración entre sistemas de bases de datos diseñada para el entorno Oracle. Si quieres conectar a otro producto debes instalar los JConectores adecuados. Y si trabajas con Oracle, no existe más que una base de datos donde se alojan, eso sí, los esquemas de cada usuario. Un esquema, para entendernos, es un “trozo”de esa base de datos única donde podemos hacer lo que queramos —o nos dejen. Ahora bien, Oracle permite crear sinónimos: create synonym pedidos for tiendaonline.pedido. Con los permisos adecuados, y siempre que no haya en nuestro esquema una tabla “pedidos”, nos alegra la vida, ya podemos ejecutar select * from pedidos, y obtendremos el contenido de “tiendaonline.pedido”.

MySQL trabaja con bases de datos tal cual y no dispone de sinónimos que nos faciliten la referencia a las tablas. Por eso, si queremos acceder a las tablas debemos especificar el nombre completo o seleccionar previamente la base de datos.


Si entras por los foros de por ahí,pues que no hace falta, ya se puede conectar uno a la base de datos que quiera en la propia definición de conexión. ¿Que necesitas acceder cómodamente a otra base de datos? Pues otra conexión y listo.

En la figura anterior, puesto que el usuario fbd va a trabajar con 2 bases de datos, Ejemplo y TiendaOnLine, y ya que tenemos 2 servidores, el total de conexiones a definir será 4, una por cada servidor y BD. Además, es obligatorio proporcionar la identificación de usuario para usar el botón “Seleccionar Base de Datos”. El resultado de esta definición es la entrada en el servidor como fbd y con la posibilidad de ejecutar select * from profesores,por ejemplo. Si, con esta conexión, quisiéramos acceder a pedidos de la base de datos TiendaOnLine, necesitaríamos escribir select * from tiendaonline.pedido.

Hay que entender nuestro contexto. Este curso,que vamos a tener más de 500 estudiantes entre grados y no grados y varias bases de datos de prácticas,que una parte de las prácticas consiste en trabajar cada uno en su propia base de datos para crear y borrar tablas sin interferencias. Pues generar tantas conexiones como bases de datos distintas se necesiten era un poco pesado. Lo que pretendemos es que los estudiantes entren con un usuario genérico o con uno particular suyo y naveguen entre las distintas bases de datos a las que tienen acceso o definan más adelante. Para eso necesitamos que, aparte de identificarse y acceder al servidor, puedan usar el comando use database. La mayoría de clientes que hemos probado —ya hablaremos de ellos— no nos ha permitido el tipo de conexión genérica sin usuario y base de datos predeterminados.

Admitimos la posibilidad de que seamos muy burros pero la solución adoptada casi da risa. Resulta que la versión de SQL Developer 1.2.1 (ya vamos por la 3) sí admite el comando de marras. Y ya está. A partir de cierta versión posterior, “se pierde” este comando. Como, prácticamente, solo queremos lanzar selects a la base de datos, nos sobra. Para más datos, utilizamos el conector J de MySQL 5.1.11, que tampoco es el más moderno, no.

Resumiendo, si instalas otra versión de SQL Developer o uno de los muchos clientes alternativos que existen, tendrás que definir tantas conexiones como te sean necesarias. E insistimos, hay clientes alternativos y nos sirven igualmente, alguno será comentado aquí. Paciencia.

Reflexión:¿tendrá esto algo que ver con la obsolescencia programada?