erp-construccion-database-v2/README.md
rckrdmrd bf97e26cdf Migración desde erp-construccion/database - Estándar multi-repo v2
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 08:11:21 -06:00

186 lines
4.4 KiB
Markdown

# Database - MVP Sistema Administración de Obra
**Stack:** PostgreSQL 15+ con PostGIS
**Versión:** 1.0.0
**Fecha:** 2025-11-20
---
## 📋 DESCRIPCIÓN
Base de datos del sistema de administración de obra e INFONAVIT.
**Schemas principales:**
- `auth_management` - Autenticación y usuarios
- `project_management` - Proyectos y estructura de obra
- `financial_management` - Presupuestos y control financiero
- `purchasing_management` - Compras e inventarios
- `construction_management` - Control de obra y avances
- `quality_management` - Calidad y postventa
- `infonavit_management` - Integración INFONAVIT
---
## 🏗️ ESTRUCTURA
```
ddl/
├── 00-init.sql # Inicialización + extensiones
└── schemas/ # Schemas por contexto
├── auth_management/
│ ├── tables/ # Tablas (01-users.sql, 02-roles.sql, ...)
│ ├── functions/ # Funciones SQL
│ ├── triggers/ # Triggers
│ └── views/ # Vistas
├── project_management/
│ └── ...
└── [otros schemas]/
seeds/
├── dev/ # Datos de desarrollo
└── prod/ # Datos de producción inicial
migrations/ # Migraciones versionadas
scripts/ # Scripts de utilidad
```
---
## 🚀 SETUP INICIAL
### 1. Crear Base de Datos
```bash
# Ejecutar script de creación
cd scripts
./create-database.sh
```
### 2. Ejecutar DDL
```bash
# Ejecutar inicialización
psql $DATABASE_URL -f ddl/00-init.sql
# Ejecutar schemas (en orden)
psql $DATABASE_URL -f ddl/schemas/auth_management/tables/01-users.sql
# ... etc
```
### 3. Cargar Seeds (desarrollo)
```bash
psql $DATABASE_URL -f seeds/dev/01-users.sql
psql $DATABASE_URL -f seeds/dev/02-projects.sql
```
---
## 🔧 SCRIPTS DISPONIBLES
| Script | Descripción |
|--------|-------------|
| `create-database.sh` | Crea la base de datos desde cero |
| `reset-database.sh` | Elimina y recrea la base de datos |
| `run-migrations.sh` | Ejecuta migraciones pendientes |
| `backup-database.sh` | Crea backup de la base de datos |
---
## 📊 CONVENCIONES
### Nomenclatura
Seguir **ESTANDARES-NOMENCLATURA.md**:
- Schemas: `snake_case` + sufijo `_management`
- Tablas: `snake_case` plural
- Columnas: `snake_case` singular
- Índices: `idx_{tabla}_{columnas}`
- Foreign Keys: `fk_{origen}_to_{destino}`
- Constraints: `chk_{tabla}_{columna}`
### Estructura de Archivo DDL
```sql
-- ============================================================================
-- Tabla: nombre_tabla
-- Schema: nombre_schema
-- Descripción: [descripción]
-- Autor: Database-Agent
-- Fecha: YYYY-MM-DD
-- ============================================================================
DROP TABLE IF EXISTS schema.tabla CASCADE;
CREATE TABLE schema.tabla (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- columnas...
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
COMMENT ON TABLE schema.tabla IS '[descripción]';
COMMENT ON COLUMN schema.tabla.columna IS '[descripción]';
CREATE INDEX idx_tabla_columna ON schema.tabla(columna);
```
---
## 🔍 VALIDACIÓN
### Verificar Schemas
```sql
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name LIKE '%_management';
```
### Verificar Tablas
```sql
SELECT table_schema, table_name,
(SELECT COUNT(*) FROM information_schema.columns
WHERE table_schema = t.table_schema
AND table_name = t.table_name) as column_count
FROM information_schema.tables t
WHERE table_schema LIKE '%_management'
ORDER BY table_schema, table_name;
```
### Verificar Índices
```sql
SELECT tablename, indexname
FROM pg_indexes
WHERE schemaname LIKE '%_management'
ORDER BY tablename;
```
---
## 📚 REFERENCIAS
- [DIRECTIVA-DISENO-BASE-DATOS.md](../../orchestration/directivas/DIRECTIVA-DISENO-BASE-DATOS.md)
- [ESTANDARES-NOMENCLATURA.md](../../orchestration/directivas/ESTANDARES-NOMENCLATURA.md)
- [MVP-APP.md](../../docs/00-overview/MVP-APP.md)
---
## 📝 VARIABLES DE ENTORNO
```bash
DATABASE_URL=postgresql://usuario:password@localhost:5432/nombre_db
DB_HOST=localhost
DB_PORT=5432
DB_NAME=erp_construccion
DB_USER=postgres
DB_PASSWORD=password
```
---
**Mantenido por:** Database-Agent
**Última actualización:** 2025-11-20