1.6 KiB
1.6 KiB
ADR-003: Multi-Tenancy Schema-Level
Estado: Aceptada
Fecha: 2025-11-23
Responsable: Architecture-Analyst
Contexto
El ERP Genérico debe soportar múltiples empresas/tenants con:
- Aislamiento de datos seguro
- Performance óptimo
- Escalabilidad
Decisión
Schema-Level Isolation: Cada tenant tiene su propio schema PostgreSQL.
-- Tenant 1
CREATE SCHEMA tenant_abc;
-- Tenant 2
CREATE SCHEMA tenant_xyz;
Justificación
Referencia a Gamilit
- Gamilit usa multi-schema para separar dominios
- Permisos granulares por schema
- Backups selectivos por tenant
Referencia a Odoo
- Odoo usa
company_iden todas las tablas (row-level) - Schema-level es más seguro y performante
Consecuencias
Positivas
- Aislamiento completo (seguridad máxima)
- Backups/restore por tenant
- Migrations por tenant
- Performance (no filtros WHERE company_id)
Negativas
- Complejidad en gestión de schemas
- Requiere lógica de routing por tenant
Alternativas Consideradas
1. Row-Level (column tenant_id)
- Rechazada: Menor seguridad, queries más lentas
2. Database por tenant
- Rechazada: Overhead de conexiones, difícil mantenimiento
Implementación
Acciones Requeridas
- Función get_tenant_schema()
- Middleware de routing por tenant
- RLS policies por tenant
Criterios de Aceptación
- Usuario de tenant A no puede ver datos de tenant B
- Performance igual que single-tenant