Multi-tenancy em Laravel: Single DB vs Schema Separado vs Banco Separado
Multi-tenancy é um dos requisitos mais comuns em produtos SaaS — e também um dos que mais gera dúvidas arquiteturais. Neste post, vou analisar as três abordagens principais no contexto do Laravel, com trade-offs honestos para cada uma.
As Três Abordagens
1. Single Database (Coluna tenant_id)
A abordagem mais simples: todos os tenants compartilham o mesmo banco, e cada tabela tem uma coluna tenant_id que filtra os dados.
Schema::create('projects', function (Blueprint $table) {
$table->id();
$table->foreignId('tenant_id')->constrained();
$table->string('name');
$table->timestamps();
});
Vantagens:
- Implementação simples e manutenção fácil
- Migrations rodam uma vez para todos os tenants
- Queries cross-tenant são triviais (relatórios, analytics)
- Custo operacional baixo
Desvantagens:
- Risco de vazamento de dados se o
tenant_idfor esquecido em alguma query - Um tenant grande pode impactar performance dos demais
- Menos isolamento regulatório (problema em setores como saúde e financeiro)
Use quando: B2C com muitos tenants pequenos, equipe pequena, ou no início do produto para validar.
2. Schema Separado (PostgreSQL)
Cada tenant recebe seu próprio schema no PostgreSQL. As tabelas são idênticas, mas os dados ficam completamente isolados.
Vantagens:
- Isolamento real de dados sem overhead de banco separado
- Backups por tenant ficam mais simples
- Performance melhor para tenants grandes (índices menores)
Desvantagens:
- Migrations precisam rodar em cada schema (mais complexidade)
- Não funciona com MySQL (que não tem schemas reais)
- Queries cross-tenant são mais complexas
3. Banco Separado por Tenant
Cada tenant tem seu próprio banco de dados com suas próprias credenciais.
Vantagens:
- Isolamento máximo — ideal para compliance (HIPAA, LGPD setorial)
- Um tenant não impacta outro em hipótese alguma
- Personalização total por tenant (backup schedule, retenção de dados)
Desvantagens:
- Custo operacional alto — cada banco tem overhead de conexão e storage
- Migrations viram um processo de orquestração complexo
- Difícil de operar com muitos tenants (>100)
O que Usar em 2025?
Para a maioria dos SaaS B2B, single database com boas práticas (Global Scopes, Tenancy Middleware) é o ponto de partida certo. Só mude se tiver requisitos regulatórios ou de escala que justifiquem a complexidade adicional.
Pacotes como Tenancy for Laravel e Stancl/Tenancy abstraem muito do trabalho pesado das abordagens 2 e 3.
Posts relacionados
Você não ficou 4x mais rápido. Ficou 10x mais inseguro — e agora existem os dados
Quase metade do código gerado por IA nasce com uma falha do OWASP Top 10. Os commits saem...
Laravel 13 e PHP 8.5: IA e busca vetorial no framework, sem quebrar o que já existe
O Laravel 13 chegou em março de 2026 com AI SDK de primeira parte, busca vetorial no query...
TypeScript 7 foi reescrito em Go: o que muda no seu build e o que continua igual
O compilador do TypeScript foi portado para Go e saiu em julho de 2026 com type-check até...