Conectar vários clientes no mesmo banco?

9 respostas Resolvido
bancoprogramaçãopostgresqlspringjava
D

Estou com uma dúvida onde acredito que vocês possam me esclarecer e neste projeto que estou desenvolvendo vou ter um administrador da conta, que vai criar vários outros usuários para esta conta.

###Exemplos:

Empresa 1

  1. João
  2. Pedro
  3. Marcos

Empresa 2

  1. Maria
  2. Juliana

Ou seja, um novo cliente vai acessar o portal e criar uma conta(Empresa) e a partir dela vai adicionar seus usuários. Estava pensando em separar essas empresas em SCHEMAS em um mesmo banco, ou não sei se existe algo mais prático.

Pesquisei sobre o assunto em fóruns e conversa com outros arquitetos, e surgiu o chamado MultiTenancy. Gostaria de saber dos colegas do GUJ, se já passaram por algo assim, e qual seria uma estrutura recomendada, viável e funcional para um caso como este. Se alguém se deparou com essa situação, usou o multiTenancy, ou outro recurso?

Observação: projeto SPRING e PostgreSQL

9 Respostas

Rodrigo_Void

Olá,
basicamente o MultiTenancy pode ser implementado por base/schema diferente ou por coluna na tabela que identifica de qual empresa é o registro.
Aqui na empresa tbm usamos PostgreSQL e optamos por separar por schemas tbm.
Tem alguns fatores que levaram a essa decisão, por exemplo se vc frequentemente precisa consultar dados de várias empresas, aí é melhor deixar os dados juntos no mesmo banco ou schema e fazer a separação por uma coluna que identifica o registro.

D

Obrigado pela resposta @Rodrigo_Void.

No meu caso talvez eu nem faça consultas em todas as empresas… porque as empresas serão de clientes distintos.

Neste caso de vocês, por exemplo tenho 10 empresas, é utilizada uma tabela para guardar os usuários e nela ficar armazenado a qual schema ele deverá buscar? ou o Tenancy controla isso de alguma forma?

Rodrigo_Void

Temos um outro esquema comum para todos. Dados que são “comuns”(compartilhados por todos) ficam neste esquema.
Ex.: usuários, cadastro das próprias empresas, sessões…

D

Show!

Ajudou bastante pois não havia visto nenhum relato desta funcionalidade aplicada neste contexto, aí fique na dúvida quanto a se iria se encaixar ou não no modelo.

Grato!

D

Mais um situação. Por exemplo eu terei o Schema PADRAO.

Neste armazeno só o registro apontando exemplo…

PADRAO.PESSOA_SCHEMA
IDPESSOA, SCHEMA

e nessa tabela teria por exemplo
1, EMP1
2, EMP2
3, EMP3
4, EMP1
5, EMP1

Poderia ser controlado dessa forma, ou você conhece algo que facilite essa operação?

Rodrigo_Void

Não entendi

D

Bom dia @Rodrigo_Void, deixa eu ver se consigo me expressar melhor,

O usuário da empresa 1, não vai acessar dados da 2 porque são empresas totalmente diferentes.

Desta forma eu precisaria que no login por exemplo ele validasse e apontasse para o banco da empresa daquele login. Ex:

Empresa 1 está no schema EMP1 e tem os funcionários Pedro e Maria.
Empresa 2 está no schema EMP2 e tem os funcionarios Jose e Carlos.

Quando e tentar logar imagem o sistema validar em uma tabela do schema de controle, ex. PADRAO.USUARIOS_SCHEMA. E nessa tabela ele apontar em qual schema ele deverá validar aquele usuário, bem como em qual schema esse usuário irá consumir dados. Pois o usuário não pode consumir dados de outros schemas e nem mesmo logar caso esteja inativo.

Grato,

Rodrigo_Void
Solucao aceita

Sim, um cadastro de empresas no schema comum onde tem uma coluna que informa o nome do schema daquela empresa. No login, ou em qualquer situação que criar uma conexão para um usuário logado, precisa setar o schema na connection, ai tudo será buscado somente daqele schema. Cuidar para não qualificar as tabelas nas SQL, só usar o nome dela, não emp1.tabela1. Já para o schema padrão, as tabelas precisam ser chamadas com o nome do schema na frente.

D

Maravilha!

Muito obrigado pelos esclarecimentos. Serão de grande valia.

Criado 11 de abril de 2017
Ultima resposta 12 de abr. de 2017
Respostas 9
Participantes 2