Este proyecto es un script en Node.js diseñado para generar automáticamente archivos DBML (Database Markup Language) a partir de una base de datos PostgreSQL. Utiliza metadatos de la base de datos para crear un esquema completo, incluyendo tablas, columnas, relaciones, índices y restricciones. Opcionalmente, integra inteligencia artificial (Gemini de Google) para enriquecer las descripciones de tablas y columnas con contexto semántico.
- Extracción Completa de Metadatos: Obtiene esquemas, tablas, columnas, tipos de datos, claves primarias, foráneas, índices únicos y restricciones de verificación.
- Relaciones Explícitas e Inferidas: Detecta relaciones foráneas existentes y puede inferir nuevas basadas en nombres de columnas o coincidencias de valores en los datos.
- Integración con IA: Usa Gemini para generar descripciones automáticas de tablas y columnas, mejorando la documentación del esquema.
- Concurrencia y Rendimiento: Procesa tablas en paralelo para optimizar el tiempo de ejecución en bases de datos grandes.
- Validación DBML: Verifica la sintaxis del archivo generado para asegurar compatibilidad.
- Manejo de Errores y Reintentos: Incluye reintentos para llamadas a IA y manejo de permisos restringidos.
- Configuración Flexible: Variables de entorno para personalizar comportamiento, como tamaño de muestra, concurrencia, etc.
- Reportes y Métricas: Genera reportes de tablas sin acceso y métricas de procesamiento.
- Node.js (versión 14 o superior)
- Acceso a una base de datos PostgreSQL
- (Opcional) Clave API de Google Gemini para usar IA
-
Clona o descarga el proyecto en tu directorio local.
-
Instala las dependencias:
npm install
-
Configura las variables de entorno en un archivo
.envo directamente en el entorno:DB_USER: Usuario de la base de datosDB_HOST: Host de la base de datosDB_DATABASE: Nombre de la base de datosDB_PASSWORD: ContraseñaDB_PORT: Puerto (por defecto 5432)DB_SSL: 'true' si usa SSLUSE_AI: 'true' para activar IAGEMINI_API_KEY: Clave API de Gemini (si USE_AI=true)- Otras variables opcionales como
SAMPLE_SIZE,TABLE_CONCURRENCY, etc.
Ejecuta el script principal:
node generar-dbml.jsEl script generará un archivo database_completa.dbml con el esquema completo. Si hay errores de validación, se guardará en database_invalida.dbml.
OUTPUT_FILE: Archivo de salida principal (por defecto:database_completa.dbml)ERROR_OUTPUT_FILE: Archivo para errores (por defecto:database_invalida.dbml)PARTIAL_FILE: Archivo de guardado parcial (por defecto:database_parcial.dbml)SAMPLE_SIZE: Número de filas de muestra por tabla (por defecto: 20)TABLE_CONCURRENCY: Número de tablas procesadas en paralelo (por defecto: 4)USE_AI: Activar/desactivar IA (por defecto: false)INFER_FKS: Inferir relaciones foráneas por datos (por defecto: true)- Y muchas más en el código fuente.
Este proyecto destaca por varios logros técnicos y funcionales:
-
Automatización Completa: Transforma una base de datos PostgreSQL en un archivo DBML válido sin intervención manual, ahorrando tiempo en documentación de esquemas.
-
Integración Avanzada con IA: Incorpora Gemini para generar descripciones contextuales, convirtiendo metadatos técnicos en documentación legible y útil para desarrolladores y analistas.
-
Inferencia Inteligente de Relaciones: No solo extrae FKs existentes, sino que infiere nuevas relaciones basadas en patrones de nombres y coincidencias de datos, mejorando la precisión del modelo relacional.
-
Optimización de Rendimiento: Usa concurrencia para procesar tablas en paralelo, reduciendo significativamente el tiempo de ejecución en bases de datos con muchas tablas.
-
Robustez y Fiabilidad: Maneja errores de permisos, reintentos en llamadas a IA, validación sintáctica y guardado parcial para evitar pérdida de progreso.
-
Flexibilidad y Configurabilidad: Más de 20 variables de entorno permiten adaptar el comportamiento a diferentes entornos y necesidades, desde desarrollo hasta producción.
-
Métricas y Transparencia: Proporciona métricas detalladas de procesamiento, incluyendo tablas procesadas, tiempo total y reportes de acceso restringido.
-
Compatibilidad con DBML: Genera archivos compatibles con herramientas como dbdiagram.io, facilitando la visualización y edición de esquemas.
-
Escalabilidad: Diseñado para manejar bases de datos grandes, con límites configurables y manejo eficiente de memoria.
-
Código Limpio y Documentado: El script está bien estructurado con comentarios en español, facilitando mantenimiento y extensiones futuras.
generar-dbml.js: Script principal para PostgreSQL.gen-dbml-mysql.js: Versión alternativa para MySQL (no detallada en este README).package.json: Dependencias y configuración de Node.js.
Si deseas contribuir, por favor:
- Haz un fork del proyecto.
- Crea una rama para tu feature.
- Envía un pull request con descripciones detalladas.
Este proyecto es de código abierto. Consulta el archivo LICENSE para más detalles.
Para preguntas o issues, abre un issue en el repositorio o contacta al maintainer.