[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Rafael Felipe
Criador Rafael Felipe 27/10/2020

Tudo bem professor?

Pelo título, aparetemente não faz sentido a pergunta estar associada a categoria Laravel, então preciso explicar onde quero chegar:

Em uma arquitetura multi tenant convencional, temos dois cenários comuns, dependendo do propósito do SaaS — ou seja, quem é meu cliente?

 

- B2B (Empresa para Empresa):

Neste caso, o tentant ou quem está usando o SaaS é outra empresa, que pode ter funcionários associados a esse tentant. 

 

- B2C (Empresa para Consumidor)

Já neste caso, o tenant geralmente é uma Pessoa Física — mas não limitado somente à PF; que apenas consume o serviço que o SaaS oferece. Posso citar o exemplo do Spotify, onde este tenant (usuário do SaaS) não está associado a outros tentants.

 

Dito isso, imagine o cenário que o SaaS atende a modalidade B2B onde empresas além de gerenciar seus funcionários, também gerenciam seus clientes. 
Neste caso seria necessário um Dashboard para a empresa (tentant) e outro para o cliente da empresa (clientes associados ao tentant).

A parte técnica:

Seria necessário uma tabela só para os clientes do tentant? Ou armazena-los na mesma tabela de users com alguma flag que sinalize que este user é um tentant ou um customer associado à um tentant. Neste último exemplo, provavelmente precisaria de uma tabela pivot para referenciar o customer ao tenant. Ou talvez um auto relacionamento.

Ah, outro detalhe importante é que estou pensado neste cenário usando Single Database.

Enfim professor, tentei abordar esse problema da forma mais simples possível e também não quero ser chato com essas dúvidas fora de contexto.

Poderia dar a sua visão diante deste caso de uso?

Forte abraço! :)

Manager Carlos Ferreira 27/10/2020

Olá, Rafael!
Estou bem, e vc?

Seria necessário uma tabela só para os clientes do tentant?
Eu recomendo ter uma tabela só para os clientes, porque fica mais fácil controlar, e deixa a tabela users para fins mais específicos, além de povoar os dados de forma mais distribuída.

-------------

Eu apliquei o conceito de multi-tenancy em um projeto onde tinha matrizes e filiais, para identificar as matrizes de uma filial, adicionei uma coluna chamada parent_id com um auto relacionamento para conseguir amarrar as filiais as matrizes.

-------------

Suas dúvidas são bem inteligentes, pode continuar perguntando sempre, porque abrem parênteses para discussões de alto nível na plataforma. Sinta-se livre!

Carlos Ferreira
Criador Rafael Felipe 27/10/2020

Show professor!

A princípio pensei em usar apenas uma tabela para todos os users do sistema usando uma flag (enum) para diferenciar o tipo, mas logo pensei "caramba, isso vai crescer e pode acabar se tornando um gargalo", é claro que os bancos de dados são projetados para suportar cenários bem mais críticos, porém a dor de cabeça para alterar o schema no futuro é bem maior.

Já dizia Albert Einstein:

"Uma pessoa inteligente resolve um problema, um sábio o previne".

Rafael Felipe
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!