3.8 KiB
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:
- CONGELAR version actual de DDL como "baseline v1.0"
- CREAR nuevo ADR para estrategia de migracion
- 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