erp-construccion/docs/97-adr/ADR-011-database-clean-load-strategy.md

3.8 KiB

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