Base de Dados para múltiplos clientes?

Gostaria de entender qual a melhor solução com relação a (performance e escalonabilidade) de uma um Sistema Web que ao logar (email e senha) cada cliente possui acesso aos seus dados (Ex: Relatório de Vendas, Estoque, Cadastro de Clientes, Produtos…etc).

Estava verificando um Software de ERP em que o cliente entra com o seu login e senha e consegue visualizar os dados acima mencionados, minha dúvida é para cada cliente é criado uma base de dados ou é uma base de dados e a cada registro é criada uma tabela para cada cliente?

As duas abordagens são possíveis, cabe ver o que é melhor em cada. Geralmente, o que vejo é uma base para cada cliente/empresa, e toda a estrutura (tabelas, etc) é replicada.

Abraço.

Entendi @TerraSkilll, e quanto a performance, imaginemos que está aplicação web receba de 100 a 200 clientes. Cada cliente teria um banco de dados único?

Eu andei pesquisando algumas coisas relacionadas a Multi Latency, não sei bem se enquadraria no que estamos discutindo.

Multitenancy você quer dizer? Se for, a resposta é sim, cada tenant teria seu próprio BD e schema.

Sobre a performance, isso vai depender da arquitetura do banco de dados escolhido, de como vai ser configurado e onde será hospedado. Pesquise sobre multitenancy no cloud e verá muitas opções por aí.

Atualmente trabalho com projeto multitenancy, cada cliente teu seu próprio DNS, host, configurações, BD.

Obrigado @leandronsp , eu andei lendo sobre Multitenancy interessante, mas confesso que ainda possuo algumas dúvidas.

A minha noção de banco de dados (Mysql) estende até criação de banco de dados e as consultas SQL.
Com relação a hospedagem sempre trabalhei com a Locaweb, e confesso que por comodismo meu de não buscar outras e novas soluções.

Para que eu monte um sistema web único que atenda a vários clientes e estes sem ter acesso é claro aos dados dos outros clientes, para qual caminho eu devo seguir? O que eu deveria estudar ou ler, qual tipo de serviço de hospedagem procurar e qual abordagem é a melhor, cada cliente com um banco de dados, um banco de dados único e cada cliente com um schema ou um banco de dados e um schema e dividir os dados dos clientes através de um Identificador (ID)?

Confesso que buscaria pela segurança dos dados, menos oneroso e melhor escalável, já que seria disponibilizado para futuros clientes.

Você pode começar lendo estes artigos:

Multi tenant storage with amazon dynamodb
Multi tenancy and cloud

Mas acima de tudo, não importa onde está hospedado. Oq diferencia é a oferta de produtos que a empresa de cloud vai te oferecer pra facilitar a arquitetura. Você pode perguntar pra Locaweb como proceder numa arquitetura assim, etc e tal.

Eu atualmente trabalho com Amazon EC2 e meu banco de dados é NoSQL, nunca trabalhei com multi tenant em base relacional como o MySQL, mas acredito que você pode fazer teste local (prova de conceito) simulando dois potenciais clientes, dado que teus clientes vão utilizar o mesmo schema:

  • sobe duas instâncias do web server, cada uma com um nome específico, como se fosse cada cliente
  • cria dois banco de dados diferentes no MySQL, sendo que o nome de cada um tem que ser exatamente o mesmo nome da instância do web server
  • dentro da aplicação, você precisa conectar no banco correto a partir do nome da instância

Tenta seguir estes passos, talvez deve funcionar no teu caso, e se funcionar, é questão de replicar isso no cloud de forma mais adequada. Entretanto, caso você no futuro precise que cada cliente tenha schema de dados diferente, é muito provável que terá que partir pra uma solução NoSQL, como por exemplo MongoDB.