miércoles, 27 de noviembre de 2013

Como Graficar el Esquema de la Base de Datos

Muchas veces necesitamos ver el esquema de la base en un formato grafico, para de este modo analizar visualmente las relaciones, no siempre el formato de texto ayuda y en muchas circunstancias se vuelve impractico no contar con una herramienta visual.

Existen grandes y pesadas herramientas de diseño como mysql-workbench, el problema es que normalmente son muy pesadas y llenas de requerimientos de software que no todo el tiempo pueden ser satisfechas.

Necesidades

1. Lightweight (dependency). 

Se necesita una herramienta liviana que permita graficar una base de datos sin requerir de interfaces graficas (GUI), pudiendose usar desde una linea de comando.

Si bien mysql-workbench la puede graficar y de hecho puede crear totalmente la base de datos, incluso sincronizarla antes cambios al diseño, el problema con mysql-workbench son los requisitos de software, que si bien en ambientes Windows no son un problema, pueden serlo en ambientes Linux donde el sistema de dependencias puede denegar la instalación y complicar el uso de mysql-workbench por completo so pena de reinstalar el OS a una versión anterior.


2.  Exportación del Diagrama.
Se necesita generar un microwebsite que puede ser incluido en el proyecto a ser diseñado que pueda verse en cualquier browser sin necesidad de instalar nada mas que un browser. 
De nuevo mysql-workbench permite exportar "una imagen (jpeg,png)" de la base de datos, esto es util pero muchas veces solo una imagen estática no es suficiente



SchemaSpy como una Solución

SchemaSpy nos permite diagramar una base de datos en forma visual para ser vista en el Browser.  Lo que esta herramienta hace es leer el esquema de cualquier base de datos para luego generar un microwebsite que muestra el esquema basico, todo en nuestro propio computador, el cual podra ser visto con el Browser.


SchemaSpy tiene dos requerimientos simples de cumplir:

1. el framework de java 1.5 o superior
2. la herramienta graphviz

Una vez satisfechos los requerimientos, ambos simples de cumplir pues obtenemos un microwebsite que podemos explorar con el browser tipeando la direccion del esquema generado.

El framework de java (JRE) y la herramienta graphviz solo son necesarios para generar el contenido, una vez este ha sido generado solo se requiere de un browser (html) para visualizarlo.




Instalacion.


Paso 1, Instalamos java y debemos asegurarnos que la version es la 1.5 o superior.  para ello tipeamos en una consola:

christian@coquito:~$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)

con eso sabemos que tenemos el JRE de java funcionando correctamente.

Paso 2, luego, instalamos graphviz, en el caso linux asi:

christian@coquito:~$ sudo apt-get install graphviz

Paso 3, verificamos que el programa "dot" es visible tras la instalacion de graphviz:

christian@coquito:~$ dot -V
dot - graphviz version 2.26.3 (20100126.1600)
Paso 4,
Necesitamos una libreria JAR para conectarnos al motor de base de datos requerido, en este ejemplo: mysql, que se obtiene del sitio web de mysql-connector.

Paso 5,
Creamos un soft-link, para que SchemaSpy pueda ver esta libreria JAR, en el caso de mysql esta programado para por defecto buscar la libreria en:

/mysql/mysql-connector-java-5.1.6-bin.jar

Seguramente has bajado una version superior a la que el programa SchemaSpy buscara por defecto (en rojo arriba de estas lineas), pues creamos un softlink o renombramos la libreria (no recomendado) para que se ajuste.

# creamos un softlink llamado "/mysql" que apunte a donde hemos
# descargado la libreria JAR.
sudo ln -s /mi/ruta/donde/descargue/el/jar /mysql

ahora creamos otro softlink que simule que la libreria que bajamos es la la libreria que el programa requiere. (o copiamos la libreria a otra con el nombre requerido):
ln -s /mi/ruta/donde/descargue/el/jar/mysql-connector-java-5.1.27-bin.jar
   /mi/ruta/donde/descargue/el/jar/mysql-connector-java-5.1.6-bin.jar

Finalmente lo que necesitamos es que esta ruta apunte a la libreria JAR que necesitamos:

/mysql/mysql-connector-java-5.1.6-bin.jar

Paso 6,
He descargado la version 5.0.0 del JAR de SchemaSpy desde aqui , he puesto el archivo JAR en mi directorio de Downloads:  "schemaSpy_5.0.0.jar"

~/Downloads/schemaSpy_5.0.0.jar

Paso 7,
creamos un script que automatice un poco el proceso, yo lo llame "spygraph" y se usa asi:  "./spygraph callcenter2", este script leera la base de datos mysql llamada "callcenter2" (los parametros de conexion estan dentro del script) y generara los archivos de salida en: /var/tmp/schema-callcenter2 los cuales puedes visualizar con el browser tipeando en tu maquina la siguiente URL:

file:///var/tmp/schema-callcenter2/index.html

Importante:



al script hay que darle permisos de ejecucion tipeando:
# chmod 755 ~/spygraph

#!/bin/bash
echo "crea un esquema visual de la base de datos mysql."
echo " uso: spygraph callcenter2"
echo " generara archivos en directorio: /var/tmp/schema-callcenter2"
echo " ver requisitos en este script"
# REQUISITOS:
#
# 1. sudo apt-get install graphviz
# 2. sudo ln -s /home/christian/javatest/jar /mysql
# 3. verificar que exista /mysql/mysql-connector-java-5.1.6-bin.jar
db=$1
if [[ "$db" != "" ]]
then
java -jar ~/Downloads/schemaSpy_5.0.0.jar -t mysql -host localhost -db $db -u root -p MIPASSW -o /var/tmp/schema-$db
else
echo "uso: spygraph basedato"
fi