# ADR-003: Row-Level Multi-Tenancy with tenant_id | Field | Value | | --- | --- | | Status | Accepted | | Date | 2025-01-01 | | Deciders | Platform Architecture | | Supersedes | — | | Superseded by | — | ## Context Every business module must isolate tenant data. Database-per-tenant is operationally heavy for early phases. ## Decision Use shared databases per service with mandatory `tenant_id` on every business table. Tenant resolution order: `X-Tenant-ID` → `X-Tenant-Slug` → subdomain → custom domain → user `current_tenant_id`. Cross-tenant queries are forbidden. ## Consequences ### Positive - Simple ops on a single DB per service - Consistent middleware and repository filters - Compatible with subdomain and custom-domain white-label ### Negative - Requires rigorous tenant filters in every query - Noise-neighbor risk at very large scale (future mitigation possible) ## Alternatives Considered 1. Database-per-tenant 2. Schema-per-tenant ## Related Documents - [Multi-Tenant Architecture](../multi-tenant-architecture.md) - [Security Architecture](../security-architecture.md) - [Project Principles](../../development/project-principles.md)