DEV Community

Cover image for Database-per-tenant {Explicando Padrões de arquitetura de banco de dados multilocatários}
Alexandre Justen Filho
Alexandre Justen Filho

Posted on

Database-per-tenant {Explicando Padrões de arquitetura de banco de dados multilocatários}

Arquiteturas de Banco de Dados para Multi-Tenancy

=================================================

Quando comecei a desenvolver a versão web de um sistema que já rodava localmente, me deparei com uma decisão estratégica: como estruturar o banco de dados para suportar vários clientes (multi-tenancy). Essa escolha não é apenas técnica; ela impacta escalabilidade, segurança, custos e até a forma como a equipe vai trabalhar no dia a dia.

Grosso modo, existem três modelos principais: desde o mais simples, onde todos compartilham as mesmas tabelas, até o mais isolado, com um banco dedicado para cada cliente.


Padrão 1 – Banco Único e Tabelas Compartilhadas

CREATE TABLE customers (
  id INT PRIMARY KEY,
  tenant_id INT NOT NULL,
  name VARCHAR(255),
  email VARCHAR(255),
  INDEX(tenant_id)
);
Enter fullscreen mode Exit fullscreen mode

Nesse modelo, todos os clientes dividem as mesmas tabelas. O que diferencia os dados é uma coluna tenant_id. É o desenho mais direto e geralmente o primeiro que vem à mente.

Vantagens

  • Mais barato e simples de operar.
  • Backups, monitoramento e atualizações em um único ponto.
  • Mudanças de schema refletem em todos os clientes de uma vez.

Desvantagens

  • Qualquer descuido em queries pode vazar dados entre clientes.
  • Um cliente pesado pode afetar todos os outros.
  • Não dá muita flexibilidade de customização.

Padrão 2 – Banco Único, Schemas Separados

CREATE SCHEMA tenant1;
CREATE TABLE tenant1.customers (...);

CREATE SCHEMA tenant2;
CREATE TABLE tenant2.customers (...);
Enter fullscreen mode Exit fullscreen mode

Aqui ainda temos um banco só, mas cada cliente fica em um schema separado. É algo que bancos como PostgreSQL e SQL Server oferecem nativamente.

Vantagens

  • Mais isolamento do que o modelo anterior.
  • Possibilita pequenas customizações por cliente.
  • Custos ainda controlados (um único banco físico).

Desvantagens

  • As migrações precisam ser replicadas em cada schema.
  • Com muitos clientes, o banco pode atingir limites de objetos.
  • Gerenciar backups/restores é mais trabalhoso.

Padrão 3 – Um Banco por Cliente

CREATE DATABASE tenant1;
CREATE DATABASE tenant2;
Enter fullscreen mode Exit fullscreen mode

Esse é o modelo mais isolado: cada cliente tem sua própria base de dados, totalmente separada das demais.

Vantagens

  • Isolamento total (ideal para compliance e segurança).
  • Escalabilidade independente por cliente.
  • Facilidade em atender exigências regulatórias.

Desvantagens

  • Maior custo de operação e infraestrutura.
  • Migrações de schema são mais trabalhosas.
  • Exige automação para gerenciar conexões e atualizações.

Comparativo Rápido

Critério Compartilhar Banco + Esquema Compartilhar Banco + Schemas Banco por Tenant
Suporte em SGDBs Todos PostgreSQL, SQL Server, etc. Todos
Conformidade Difícil Possível com esforço extra Mais simples
Complexidade Baixa Média/Alta Alta
Customização Limitada Moderada Total
Escalabilidade Banco inteiro Banco inteiro Por cliente

Dicas para Migrações de Schema

Não importa o modelo que você escolha, mudar a estrutura do banco será sempre uma dor de cabeça se não houver disciplina.

  • Versione seus scripts no Git com numeração sequencial.
  • Automatize com CI/CD, rodando testes antes de aplicar.
  • Escreva scripts idempotentes (seguros para rodar mais de uma vez).
  • Aplique mudanças primeiro em staging e depois em subset de clientes.
  • Mantenha compatibilidade retroativa sempre que possível.
  • Use um catálogo centralizado para acompanhar versões de cada tenant.

Conclusão

Não existe receita única. O melhor modelo depende do seu estágio e das exigências do seu negócio.

  • Quer começar simples e barato? → Banco + Tabelas Compartilhadas
  • Precisa de isolamento e compliance? → Banco por Cliente
  • Busca um equilíbrio? → Banco único com Schemas separados

O mais importante é escolher algo que funcione bem hoje, mas com clareza de como migrar no futuro conforme sua base de clientes crescer.


Referências

Top comments (0)