{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreidvn2qgzalrbysudaizjytluerg5j5xrpsoz3sr6sp5ybwkp7t43e",
"uri": "at://did:plc:qnlvqxxf6yadvrhl226p2aiz/app.bsky.feed.post/3mk6gp22otdq2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreichlikmbneme5mpccim7v5hewo4z4ftrosls3mxr5w6llnuqzenpu"
},
"mimeType": "image/png",
"size": 232285
},
"description": "ChartDB es una herramienta pensada para diseño y edición visual de bases de datos, que nos permite exportarlas a DDL o incluso como imágenes para documentación.",
"path": "/disena-bases-de-datos-con-chartdb/",
"publishedAt": "2026-04-23T16:30:16.000Z",
"site": "https://blog.runesoft.net",
"tags": [
"Obsidian",
"Repositorio o documentación oficial de ChartDB."
],
"textContent": "Como programadores muchas veces hemos tenido que utilizar o incluso diseñar estructuras de bases de datos. El problema es que, según crecen los proyectos, entender rápidamente su estructura deja de ser tan sencillo.\n\nAquí es donde entra en juego _ChartDB_ , una herramienta pensada para visualizar estos esquemas de una manera mucho más clara. Nos permite representar tablas, columnas y relaciones de forma gráfica, algo muy útil tanto para documentación como para comprender mejor aplicaciones.\n\nEs totalmente gratuita y nos da una opción de _selfhost_ , que es lo que vamos a cubrir en este post.\n\n# Requisitos\n\nPara poder seguir esta guía necesitaremos lo siguiente:\n\n * Un servidor con Docker y Docker Compose instalados.\n * Acceso al terminal de dicho servidor.\n * Una base de datos existente que queramos documentar o explorar, si queremos sacarle partido desde el primer momento.\n * _Recomendable_ :\n * Un proxy inverso o VPN si queremos acceder de forma segura desde fuera de casa.\n\n\n\n# Instalación\n\nLa forma más cómoda de desplegar _ChartDB_ en nuestro homelab es mediante `docker compose`, ya que nos permitirá dejar definida la aplicación en un único fichero y levantarla fácilmente cuando queramos.\n\n## Crear el directorio del proyecto\n\nLo primero será crear una carpeta específica para este servicio:\n\n\n mkdir ./chartdb\n cd ./chartdb\n\n\nA partir de ahora trabajaremos dentro de este directorio.\n\n## Crear el fichero docker-compose.yml\n\nDentro de la carpeta anterior crearemos un fichero llamado `docker-compose.yml` con un contenido similar al siguiente. Como siempre, recuerda adaptarlo a tus necesidades.\n\n\n services:\n chartdb:\n image: ghcr.io/chartdb/chartdb:latest\n container_name: chartdb\n ports:\n - \"8080:80\"\n restart: unless-stopped\n volumes:\n - ./data:/app/data\n\n\nCon esta configuración estamos indicando que:\n\n * Usaremos la imagen oficial de _ChartDB_.\n * El contenedor se llamará `chartdb`.\n * Expondremos el servicio en el puerto `8080` de nuestro servidor anfitrión.\n * Se reiniciará automáticamente salvo que lo detengamos manualmente.\n * Almacenaremos los datos de la aplicación en la ruta `./data`.\n\n\n\nPuerto\n\nSi ya tienes otros servicios usando ese puerto, tan solo tendrás que cambiar el valor de la izquierda. Por ejemplo, `8081:80`.\n\n## Lanzar el contenedor\n\nUna vez guardado el fichero, ya podremos iniciar el servicio:\n\n\n sudo docker compose up -d\n\n\nSi todo va bien, Docker descargará la imagen y levantará el contenedor en segundo plano. Para comprobar que está funcionando correctamente, podemos ejecutar:\n\n\n sudo docker compose ps\n\n\nY también revisar los logs si fuese necesario:\n\n\n sudo docker compose logs -f\n\n\n# Interfaz web\n\nCon la aplicación ya lanzada, podremos acceder a su interfaz web desde el navegador usando la IP de nuestro servidor y el puerto configurado en el `docker-compose.yml`.\n\nEn el ejemplo anterior sería:\n\n\n http://IP_DE_TU_SERVIDOR:8080\n\n\nUna vez dentro, veremos la interfaz principal de _ChartDB_ , desde la cual podremos empezar a trabajar con nuestros esquemas de base de datos.\n\n# Uso básico\n\nLa utilidad principal de _ChartDB_ es ayudarnos a representar visualmente la estructura de una base de datos. Esto puede venirnos especialmente bien si:\n\n * Tenemos una base de datos ya existente que no terminamos de visualizar.\n * Queremos generar una nueva estructura para una aplicación que estemos desarrollando.\n * Vamos a hacer cambios en una base de datos que no controlamos del todo.\n\n\n\nDependiendo de estos puntos anteriores, podemos empezar a trabajar en ChartDB desde cero, o desde un archivo importado de una base de datos que ya tengamos a disposición, para así poder visualizar el diagrama.\n\nEsto nos permite ver de forma mucho más clara:\n\n * Las tablas existentes.\n * Sus columnas y tipos.\n * Las claves primarias y otras restricciones.\n * Las relaciones entre unas tablas y otras.\n\n\n\nEn muchos casos, una vista así ahorra bastante tiempo frente a revisar el esquema directamente desde sentencias SQL o paneles menos visuales. Y ya no hablemos a nivel de documentación técnica, que aquí sí que se da un paso importante.\n\nAquí un ejemplo:\n\n## Configuración de tablas\n\nCuando creamos una tabla, podemos hacerlo con click derecho en el grid, o podemos gestionarlo desde su apartado en el menú izquierdo:\n\n## Relaciones o referencias\n\nTambién podemos gestionar las relaciones entre las tablas, ya sea desde la propia interfaz visual, o desde su apartado en el menú izquierdo de **Refs** :\n\nAquí nos aparecerán todas las que tenemos, pudiendo modificarlas; o crear nuevas dándole al botón de **Agregar Relación** en la parte superior derecha de este menú.\n\n## Lenguaje DBML\n\nSon las siglas de _DataBase Markup Languaje_ , y se trata de un lenguaje estándar para definir estructuras de bases de datos. ChartDB trabaja sobre esto, y nos permite editarlo directamente como si de código se tratase, si nos resulta más práctico.\n\nLa ventaja es que nos permite compartir nuestros esquemas de forma más cómoda, gestionarlos incluso como repositorios de código, etc.\n\nAquí un ejemplo:\n\n\n Table \"public\".\"users\" {\n \"user_id\" bigint [pk, not null, increment]\n \"user_name\" varchar(500) [not null]\n \"user_mail\" varchar(500) [not null]\n \"user_register_date\" timestamp [not null]\n \"user_bio\" text\n }\n\n Table \"public\".\"posts\" {\n \"post_id\" bigint [pk, not null, increment]\n \"post_content\" text [not null]\n \"post_date\" timestamp [not null]\n \"post_update_date\" timestamp\n \"post_delete_date\" timestamp\n }\n\n Table \"public\".\"user_posts\" {\n \"user_posts_user_id\" bigint [not null, ref: > \"public\".\"users\".\"user_id\"]\n \"user_posts_post_id\" bigint [not null, ref: > \"public\".\"posts\".\"post_id\"]\n\n Indexes {\n (user_posts_user_id, user_posts_post_id) [pk]\n }\n }\n\n Table \"public\".\"comments\" {\n \"comment_id\" bigint [pk, not null, increment]\n \"comment_content\" bigint [not null]\n \"comment_date\" timestamp [not null]\n \"comment_parent_id\" bigint\n \"comment_update_date\" timestamp\n \"comment_delete_date\" timestamp\n }\n\n Table \"public\".\"users_comments\" {\n \"users_comments_user_id\" bigint [not null, ref: > \"public\".\"users\".\"user_id\"]\n \"users_comments_comment_id\" bigint [not null, ref: > \"public\".\"comments\".\"comment_id\"]\n\n Indexes {\n (users_comments_user_id, users_comments_comment_id) [pk]\n }\n }\n\n Table \"public\".\"posts_comments\" {\n \"post_comments_post_id\" bigint [not null, ref: - \"public\".\"posts\".\"post_id\"]\n \"post_comments_comment_id\" bigint [not null, ref: - \"public\".\"comments\".\"comment_id\"]\n\n Indexes {\n (post_comments_post_id, post_comments_comment_id) [pk]\n }\n }\n\n\n## Importado y Exportado\n\nTeniendo en cuenta el uso de DBML, tanto importar como exportar nuestro esquema resulta muy sencillo y cómodo.\n\nPero si estamos en la situación de que queremos visualizar una base de datos ya existente, ChartDB nos permite importar desde un dump de casi cualquiera de los proveedores de bases de datos relacionales.\n\nY por supuesto podemos hacer este mismo camino pero a la inversa: Generar los DDL para ejecutarlos en el motor que deseemos, como pueden ser PosrgreSQL o MariaDB.\n\nTambién contamos con la posibilidad de generar imágenes de nuestra estructura, ideal para generar documentación técnica de los proyectos. He de decir que esto me ha salvado la vida en muchas ocasiones en conjunto con Obsidian.\n\nAquí un ejemplo del exportado a PostgreSQL del esquema, que lo podemos obtener haciendo clic en **Acciones > Exportar SQL > PostgreSQL**:\n\n# Conclusión\n\nCon _ChartDB_ podemos añadir a nuestro homelab una herramienta muy práctica para visualizar y entender mejor la estructura de nuestras bases de datos.\n\nSu despliegue con Docker Compose es muy sencillo, por lo que en pocos minutos podemos tenerla funcionando en nuestro servidor y lista para ayudarnos a documentar proyectos, revisar relaciones entre tablas o simplemente comprender mejor cómo está organizada la información de nuestras aplicaciones.\n\nY todo esto en la privacidad de nuestra red, por lo que no debemos preocuparnos por datos sensibles u otros aspectos en el mundo laboral.\n\n# Referencias\n\n * Repositorio o documentación oficial de ChartDB.\n * Instalación propia en entorno Docker Compose.\n\n\n\n# Vídeo\n\n0:00\n\n/2:14\n\n1×",
"title": "Diseña bases de datos con ChartDB",
"updatedAt": "2026-05-11T10:58:32.482Z"
}