# ADR-011: Estrategia de Base de Datos - Carga Limpia **Estado:** Aceptado **Fecha:** 2025-11-24 **Responsable:** Architecture-Analyst **Proyecto:** ERP Construccion ## Contexto El proyecto esta en fase de desarrollo activo donde la estructura de la base de datos evoluciona frecuentemente. Necesitamos una estrategia clara para gestionar cambios. ## Decision **Adoptamos la estrategia de "Carga Limpia" (Clean Load) para la gestion de base de datos.** ### Principios ``` +-------------------------------------------------------------+ | SI - PERMITIDO | +-------------------------------------------------------------+ | - Archivos DDL completos por schema (01-auth.sql, etc.) | | - Scripts de seeds para datos iniciales | | - Scripts de recreacion (drop + create) | | - Un solo punto de verdad: los archivos DDL | +-------------------------------------------------------------+ | NO - PROHIBIDO | +-------------------------------------------------------------+ | - Archivos de migracion incremental (migrations) | | - Archivos de fix o patch | | - ALTER TABLE sin actualizar DDL | | - Scripts numerados tipo migration_001_xxx.sql | | - Hotfixes directos a la base de datos | +-------------------------------------------------------------+ ``` ### Estructura de Archivos ``` apps/database/ +-- ddl/ | +-- 00-prerequisites.sql # Extensions, utilities | +-- 01-auth.sql # Schema auth | +-- 02-core.sql # Schema core | +-- ... | +-- 09-construction.sql # ESPECIFICO construccion | +-- 10-infonavit.sql # ESPECIFICO INFONAVIT | +-- 11-estimates.sql # ESPECIFICO estimaciones +-- seeds/ | +-- dev/ # Seeds desarrollo | +-- staging/ # Seeds staging | +-- prod/ # Seeds produccion (minimos) +-- scripts/ +-- create-database.sh +-- reset-database.sh +-- load-seeds.sh ``` ### Flujo de Trabajo para Cambios ``` 1. Editar archivo DDL correspondiente Ejemplo: Agregar columna a proyectos -> Editar: ddl/09-construction.sql 2. Actualizar documentacion -> INVENTARIO-OBJETOS-BD.yml -> Trazabilidad si aplica 3. Actualizar seeds si es necesario -> seeds/dev/05-sample-data.sql 4. Ejecutar reset -> ./scripts/reset-database.sh 5. Verificar que todo funciona ``` ## Justificacion ### Alineacion con ERP Generico - Misma estrategia de gestion de BD - Facilita sincronizacion de schemas genericos ### Especifico para Construccion - Schemas 09-11 especificos se manejan igual - Seeds con datos de prueba de proyectos, lotes, etc. ## Consecuencias ### Positivas - Simplicidad: Un comando recrea todo - Reproducibilidad: Cualquier dev obtiene BD identica - Sin deuda tecnica: No hay parches acumulados ### Negativas - Perdida de datos locales: Cada reset borra datos - Mitigacion: Seeds completos para desarrollo ## Transicion a Produccion Cuando entre en produccion con datos reales: 1. CONGELAR version actual de DDL como "baseline v1.0" 2. CREAR nuevo ADR para estrategia de migracion 3. IMPLEMENTAR herramienta de migraciones (Prisma/Flyway) ## Directiva para Agentes ``` DIRECTIVA ADR-011 - CARGA LIMPIA DE BASE DE DATOS Los agentes DEBEN: - Editar archivos DDL existentes para cambios - Usar reset-database.sh despues de cambios - Actualizar inventarios y trazabilidad - Mantener seeds actualizados Los agentes NO DEBEN: - Crear archivos de migracion - Crear archivos de fix o patch - Ejecutar ALTER TABLE directamente - Crear scripts numerados incrementales ``` ## Referencias - [ERP Generico ADR-011](../../erp-generic/docs/adr/ADR-011-database-clean-load-strategy.md)