Modelo Entidad Relación con el menor número de cruces

Problema

Hace ya varios meses al estar desarrollando un software bastante complejo, que requería una base de datos muy grande, nos enfrentamos al problema de cómo poder visualizar un diagrama entidad-relacion de la forma más legible posible. Intentamos con MySQL Workbench, el cual nos dibujó las tablas con sus relaciones pero desgraciadamente todas juntas y teníamos que acomodarlas a mano; lo cual además de llevar tiempo, es difícil, pues llegar a un modelo que tenga el menor número de cruces y sea fácil de entender es una tarea casi imposible. Así que buscamos en Google un programa que pudiera dibujar de una forma estética nuestra base de datos, y aunque algunos lo prometían ninguno lo hacía.

Historia

Buscamos un algoritmo que se encargara de distribuir gráficas con el menor número de cruces, lo que se conoce como aplanamiento de gráficas y encontramos uno llamado dibujado ortogonal, que nos pareció el más estético para dibujar un digrama EER. Encontramos gran cantidad de documentos de investigación que hacían alusión a un algoritmo publicado por Kandinsky, pero en ninguna parte pudimos encontrar el pseudo código o algún documento más detallado de ese algoritmo. Seguimos buscando y encontramos otros programas que servían para acomodar diagramas UML y algunos con el menor número de cruces. Notamos que muchos usaban un formato de archivo llamado GML y encontramos su especificación. GML significa Graphics Modeling Language y fue un poco difícil de encontrar porque hay otro formato de archivo con el mismo nombre que siginifica Geographic Modeling Language.

Después de un día de búsqueda encontramos un framework para diferentes tipos de dibujado de gráficas llamado OGDF, librería escrita en C++ y de código abierto. Para nuestra sorpresa esa librería recibe un archivo GML para procesarlo y devuelve otro de igual formato procesado.

Idea

Al ver que no había un programa que te hiciera todo el proceso completo, desde conectarse a la base de datos, obtener su estructura, procesarla, graficarla con el menor número de cruces y presentarla tuvimos una idea:

¿Por qué no hacer un programa que obtenga la estructura de la base de datos junto con sus relaciones, genere un archivo .GML y lo pase a un programa que use la librería OGDF, luego lea el archivo procesado y dibuje las tablas en la posición adecuada?

Nuestra solución

- Java
Inicialmente lo solucionamos haciendo un programa escrito en Java, que se conectara a la base de datos MySQL, obtuviera su estructura mediante SHOW TABLES, DESCRIBE tabla, y con el código de creación de la tabla obtuviera las llaves foráneas y se encargara de relacionar las tablas y generar un archivo GML válido con la estructura y las relaciones.

- C++
Ahora mirando en OGDF notamos que había un How To, lo copiamos, modificamos un poco y compilamos, generando un binario que lee dos parámetros, el archivo fuente y la ruta del archivo GML a donde queremos guardar el procesamiento.

- Conectar Java y C++
Nos dispusimos a conectar los dos programas, llamando al binario de OGDF desde nuestro programa en Java y luego nuevamente leer el GML, parsearlo y relacionar con las tablas que estaban en memoria.

Hasta este punto ya teníamos solucionado todo, ahora solo faltaba dibujarlo.

Dibujarlo
Pensamos en un momento dibujarlo en Java, el problema iba a ser que Java no es exactamente lo más amigable para dibujar, y había otro problema, a lo largo del desarrollo del programa pensamos que sería una buena idea liberarlo bajo la GPL y poner el código a disposición de todos y fue cuando se nos ocurrió una idea: ¿porqué no volver todo este programa una aplicación web y abrirla al público?, pero ¿cómo podríamos solucionarlo?

- PHP y Flash
Pensamos que era fácil simplemente crear un formulario que pidiera el acceso a la base de datos, llamara del lado del servidor a nuestro programa en Java y así podríamos generar un XML que leyera una aplicación en Flash, además por medio de Actionscript lo dibujara y agregara comportamientos como arrastrar que hiciera más facil la interacción del usuario.

Diagrama Entidad Relación Procesado- Conectar Java, C++, PHP, Flash
Lo hicimos, y nuestro programa en Java después de haber leido y parseado el GML generó un XML con la estructura y coordenadas, que luego Flash leería mediante Actionscript y dibujaría obteniendo una representación interactiva de la base de datos como se muestra en la imagen.

Código Abierto
Después de algunos ajustes liberamos el código de Java, C++, Flash, PHP y Actionscript bajo la GPL y siendo nuestro primer programa que liberamos bajo esa licencia nos sentimos muy felices. Para mi fue como un logro que desde hace tiempo quería hacer, pues siempre nos ha ayudado enormemente el código abierto y nunca habíamos regresado el favor.

Ahora tenemos pensado liberar otros algoritmos y scripts que tenemos guardados bajo GPL, y creamos una sección para todo ese Software en nuestra página, que según tenemos pleaneado irá creciendo poco a poco.

Nos sentimos muy bien de poder colaborar con la Open Software Foundation, e invitamos a otras compañías que tienen mucho software detenido que lo liberen y aporten algo a la comunidad.

La versión en línea de nuestro programa se encuentra disponible al público y esperemos que lo aprovechen.

Con este software nuevo esperamos que este año que apenas comienza aportemos mucho más a la comunidad del software libre.

¡ Feliz año 2009 !