jueves, 14 de junio de 2012

Usando schemaspy

Buenas! Hoy en un rapto de inspiración y por cortesía de Gabriel (un compañero del trabajo) les voy a presentar una herramienta muuuy interesante para quienes les toque lidiar (en algún momento) con alguna base de datos de la cuál no tiene el Diagrama de Entidad Relación (DER de ahora y hasta el fin de los tiempos :P ). En mi caso en particular se trata de la BD de una aplicación llamada DTC.

Necesitamos un par de cosas para proceder:
  1. Schemaspy, que lo pueden descargar de: http://schemaspy.sourceforge.net/
  2. El driver jdbc para mysql (en este caso, porque la aplicación usa ese motor), que lo pueden obtener de: http://dev.mysql.com/downloads/connector/j/
  3. Y hay que tener también el paquete graphviz, necesario para la generación de las imágenes que describen las tablas de la BD.
Entoncessss, en el directorio de trabajo tenemos:

juan@moon:~/dtc$ ls
schemaSpy_5.0.0.jar  mysql-connector-java-5.1.20.tar.gz
juan@moon:~/dtc$

Descomprimimos el connector,

tar -xvf mysql-connector-java-5.1.20.tar.gz

Hacemos un backup de la base (Just In Case):

mysqldump -u root -p -h 127.0.0.1 --databases dtc > dtc.sql

Ahora tenemos:

juan@moon:~/dtc$ ls
mysql-connector-java-5.1.20         schemaSpy_5.0.0.jar
dtc.sql  mysql-connector-java-5.1.20.tar.gz
juan@moon:~/dtc$

Una vez tomadas las precauciones necesarias, lanzamos schemaspy:

juan@moon:~/dtc$ java -jar schemaSpy_5.0.0.jar -t mysql -db dtc -host 127.0.0.1 -u root -p ElPassword -dp mysql-connector-java-5.1.20/mysql-connector-java-5.1.20-bin.jar -o der_dtc

Como schemaspy se trata de una aplicación java la lanzamos con "java -jar schemaSpy_5.0.0.jar", el resto son parámetros de schemaspy, que significan:

-t mysql: indicamos que se trata de un motor MySQL.
-db dtc: indicamos que vamos a trabajar sobre la base de datos llamada dtc.
-host 127.0.0.1: indicamos el host donde escucha la BD.
-u root: indicamos el usuario con cuál vamos a conectarnos.
-p ElPassword: indicamos el password para autenticarnos (por lo que vi, esta es la única manera de pasar el password).
-dp mysql.../mysql....jar: indicamos el path al driver jdbc a utilizar.
-o det_dtc: el directorio donde queremos que schemaspy nos escriba toda la salida.

NOTA: existe una opción "-port puerto", que se supone se usa para especificar el puerto donde se encuentra la BD, en caso de que no sea el standard. Hago la nota, porque a mi no me funcionó :P.

Ahora abrimos el resultado:

juan@moon:~/dtc$ firefox der_dtc/index.html &

Y nos encontramos con toda la información que schemaspy pudo recolectar de nuestra BD.



La información que mas me interesaba debería estar en la tab de "Relationships", pero lamentablemente las tablas no tienen integridad referencial, por lo tanto schemaspy no es capaz de detectar las dependencias entre tablas, y por eso no dibuja el DER. Pero me sirve la tab "Utility tables", donde se listan todas las tablas, y uno puede darse una idea de las relaciones por el nombre de los campos y armar consultas para obtener lo que hace falta :D.


No hay comentarios:

Publicar un comentario