B2B, B2C ou uma estratégia híbrida?
[Finalizado Pelo Aluno]
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! :)
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!
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".
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!