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

127 lines
3.8 KiB
Markdown

# 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)