186 lines
4.4 KiB
Markdown
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
|