SISTEMA ONLINE - ESTRUTURA DO BANCO DE DADOS

RICATOM 19/02/2013 14:04:59
#419350
Boa tarde colegas

Estou desenvolvendo um sistema online que será ofertado para várias empresas e gostaria da opinião dos colegas a respeito da estrutura do banco de dados: 1 banco de dados para cada cliente ou um único bd para todos os clientes?

Algumas das minhas observações:


01 BANCO DE DADOS PARA CADA CLIENTE

Vantagens:
• Fácil excluir base de dados caso o cliente não deseje mais o serviço (exclui a base toda).
• Não é preciso criar uma ID única em toda tabela para identificar o cliente.

Desvantagens:
• Dificuldade de manutenção e atualização da estrutura.
• Tabelas internas vão ficar em outra base e portanto será usada 2 conexões
• Dificuldade para ter estatísticas e outras informações (internamente).
• Login: somente através de login e senha fica difícil identificar a qual empresa o usuário pertence. Talvez criar um subdominio nomecliente.site.com.br.


01 ÚNICO BANCO DE DADOS PARA TODOS

Vantagens:
• Facilidade de manutenção e atualização da estrutura.
• Tabelas internas vão ficar na mesma base e portanto será usada somente 1 conexão ao banco de dados.
• Facilidade para ter estatísticas e outras informações (internamente).
• Login: através de um login único (email) e senha, pode-se facilmente identificar a qual empresa o usuário pertence.


Desvantagens:
• Difícil excluir informações caso o cliente não deseje mais o serviço (tem que fazer busca em várias tabelas e excluir por chave ID).
• é preciso criar uma ID única em toda tabela para identificar o cliente.
• Revisar bem os processos, principalmente para não possibilitar que um cliente veja ou crie, edite ou exclua informações de outro.


Abraços
RICATOM 20/02/2013 15:16:01
#419425
Alguém tem alguma dica, sugestão, um oi ???
ALEVALE 20/02/2013 16:04:39
#419432
Não sou desenvolvedor mas a minha opinião é claro um banco para cada cliente.

Já pensou se der pau ? Para todo o serviço.
Em relação a segurança, controle, atualização etc bem mais fácil também.
ALTAIR148 20/02/2013 16:11:32
#419433
Boa tarde,

Amigo, sem dúvidas eu usaria um banco para cada cliente, assim, vamos supor na pior das hipóteses mas já ví muitos relatos disso acontecer que durante uma manutenção se esquece de fazer um backup e perde alguns dados.... ei ai já pensou? Todos os seus clientes seriam afetados, não adianta pensar assim: [Ô]Eu nunca vou fazer isso[Ô], mas vale lembrar que somos humanos e estamos sujeitos a falhas, então tendo um banco para cada cliente, uma dessas acontece você não vai afetar todos. E também existe vários outros fatores que iriam lhe atrapalhar se todos usassem o mesmo banco.
RICATOM 20/02/2013 21:28:23
#419449
Agradeço as respostas dos colegas

A principio também acho que um banco para cada cliente parece ser a melhor opção, mas...

Se pensarmos em por exemplo 500 clientes:

- vou precisar de uma forma para criar bancos automaticamente (ainda não testei, mas parece que meu hosting oferece meios para isso)

- seriam 500 banco de dados para fazer backup, vou precisar de uma rotina para automatizar isso

- executar agendamentos via cron, para envio de emails com avisos e lembrete. Rotina para percorrer cada banco de dados e verificar se existem emails a serem enviados.

RICATOM 22/02/2013 08:37:21
#419511
Bom dia

Alguém tem uma experiencia real para compartilhar?
RICATOM 26/02/2013 09:05:19
#419636
Bom dia

Bem creio que a melhor saida seja mesmo criar um bd para cada cliente, agora vem a melhor parte:

Alguém sabe como criar um banco de dados através da Api da Kinghost - https://api.kinghost.../doc/Mysql/POST ?

Através de linha de comando consegui, mas não sei como fazer isso via php

curl -d [Ô]idDominio=123&senha=654321[Ô] -k --digest -u usuario:senha -X POST https://api.kinghost.net/mysql.xml


Obs: já perguentei isso para o suporte deles e a resposta foi: não temos nenhum exemplo para este tipo de uso.
ALEXMARCHI 27/02/2013 10:32:56
#419673
Resposta escolhida
Ricardo TOM, e demais colegas, tenho um cliente que tem mais de 300 filiais no mundo, na época do inicio do desenvolvimento eu fiquei na mesma indecisão, apesar dos colegas já terem dito para você utilizar uma base para cada cliente eu tenho que discordar veementemente, porque, imagina que você tem que rodar um scripty de atualização de uma estrutura de um cliente, você vai ter que rodar este scripty mais de 500 vezes, e se você esquecer de rodar em 1 ??? Ferrou !!! fora que você vai ter MUITA mas MUITA dor de cabeça para fazer o plano de manutenção do banco de dados, imagina você ter que guardar mais de 500 arquivos de backup e se você for guardar o backup de 30 dias só nesta brincadeira já são mais de 15000 arquivos e para administrar tudo isto ? fora 2 conexões que é terrível de administrar

a minha sugestão é, use um único banco de dados, como eu vi em seu ultimo post você utiliza MySql, então quando você for definir a estrutura ative o Delete Cascade, então se você for excluir um cliente com um único delete você exclui TODO o histórico dele sem precisar ir de tabela em tabela, outra coisa, como seu banco está na WEB ( kinghost ) você já calculou quanto vai custar ter 500 bancos de dados ?

e por ultimo, não deixe de fazer um bom plano de manutenção, com backups agendados para 3 a 4 vezes por dia, re-indexação de madrugada, de 98% da sua atenção inicial ao banco de dados, ele vai ser o alicerce de todo seu sistema, se ele começar errado, dificilmente você terá sucesso no seu sistema !

Esta é minha dica !
NETMANIA 27/02/2013 10:39:18
#419674
Eu concordo com o Alexmarchi, usar uma única base de dados para todos os clientes.
RICATOM 27/02/2013 10:52:17
#419676
ALEXMARCHI agradeço muito a sua resposta

Em um outro tópico também vi uma pessoa relatando que teve muitos problemas de atualização e backups usando um banco por cliente, e agora com seu relato pessoal, começo a volta a minha ideia original de um unico bd para todos os clientes.

Tenho um plano revenda na Kinghost e segundo eles não existe um limite de bancos de dados, mas estou vendo que criar os bancos via código vai ser outro problema.

Vou analisar mais os prós e contras.

Eu não conhecia o Delete Cascade, vou dar uma pesquisada sobre ele e fazer testes.

Muito obrigado.
Tópico encerrado , respostas não são mais permitidas