127 lines
3.8 KiB
Markdown
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)
|