# 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. ```sql -- 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_id` en 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 - [x] Función get_tenant_schema() - [x] Middleware de routing por tenant - [x] RLS policies por tenant ### Criterios de Aceptación - Usuario de tenant A no puede ver datos de tenant B - Performance igual que single-tenant ## Referencias - [Gamilit Database Architecture](../00-analisis-referencias/gamilit/database-architecture.md) - [Odoo Multi-Company](../00-analisis-referencias/odoo/odoo-base-analysis.md)