Direcionar gravação dos dados em bases de dados distintas

Olá,

Estou a modelar a base de dados de um sistema e vejo que o SC vai acabar direcionando no modo que devo modelá-la.

Situação: Temos vários clientes e estamos a decidir entre fazer um BD unificado ou um BD para cada cliente.

Se mantermos um BD idêntico para cada cliente, teremos que ter a mesma aplicação no SC, replicando ela para cada cliente (considerando que para cada aplicação teríamos que referenciar a mesma tabela, porém uma de cada BD)?

Vou explicar melhor: Possuo uma tabela TB_UNIDADE em cada base de dados. Quando eu fizer uma aplicação de formulário para cadastrar estas unidades, terei que ter várias “aplicações iguais” para cada base de dados?

A questão maior é: O SC permite no momento de eu gravar os dados que eu aponte em qual base de dados deverá armazenar, podendo, após determinada verificação, ser em uma ou em outra?

Espero ter sido clara…

Ah, se alguém tiver pontos que influenciaram na construção do BD que gostaria de dividir, ajudaria muito!

Carol,

Existem pelo menos duas visões para a solução do teu problema: uma é criar um BD somente, criando uma tabela de empresas e tendo a chave estrangeira dessa tabela replicada em todas as outras tabelas, para que dentro do sistema você possa filtrar os dados de uma determinada tabela. A outra é a que você mencionou, a de se construir um BD para cada cliente, assim ficaria relativamente mais simples pois os dados de uma determinada empresa estariam separados de todos os outros dados. Para ambos os casos o SC atua tranquilamente. Eu preferi a primeira situação, pois os dados inseridos nas tabelas diariamente não sugerem um crescimento muito grande pelo menos a médio prazo. Tua decisão vai depender da quantidade de dados que teu BD vai ter, o crescimento dele, quantas empresas vai suportar, etc. Mas o SC vai sim funcionar em qualquer das tuas escolhas.

Espero ter ajudado.

Para quem trabalha com sistemas sempre customizando de acordo com o cliente, eu vejo a opção de um BD para cada cliente mais vantajosa. Visto que se for único banco e houver customização apenas de um cliente, teria que mexer pra todos os restantes. Há vantagens e desvantagens em ambas soluções, o que vai lhe dizer a respeito de qual melhor será seus clientes e suas diversificação de regra de negócio de cada um deles. No meu caso, uso um BD pra cada cliente!

Obrigada srs., agradeço até o momento.

Partirei do príncipio que caso eu separe as bases, todas serão sempre iguais.

Também aplicaremos parametrização nos formulários (exibição e obrigatoriedade de preenchimento) e nas regras de negócio, ou seja, uma regra poderá ser aplicada em um cliente e no outro não. Alguém já trabalhou com parametrização no SC e poderia nos dizer se é possível?

Entendi que terei que levantar o crescimento do meu BD para estudar a viabilidade de unificação… tranquilo. Porém ainda tem a questão: Caso eu opte por bases separadas, terei que criar um sistema para cada cliente ou no mínimo uma aplicação de formulário para cada cliente, considerando que o SC “amarra” a aplicação ao bd, certo?

??? não bem assim… eu estou em um projeto aqui de gestao de contrutora com bases separadas… cada cliente tem seu banco… no entanto a app é a mesma para todos…separada em módulos… quando faço uma atualização eu replico a todos apenas atualizando a estrutura do banco e aa App’s…
não precisa criar um sistema para cada cliente e/ou um formulario para cada cliente…

algo que fiz aqui foi criar tabelas que registro os dados do meu cliente dentro do banco dele… informando inclusive dados de e-mail (para enviar os emails do sistema)… nos relatorios que precisa sair os dados do cliente faço select buscando o mesmo…parametrização é possível sim

se foi isso que entendi aqui não fica nada travado…

uma outra questão que me fez separar os bancos foi o gerenciamento de backup…imagina vc com uma base sendo usada por 100 clientes e 1 deles precisa fazer um restore/backup… é mais complicado…pelomenos para meu conhecimento e experiencia em BD…

leve em consideração a criticidade da app, isto é, seu cliente pode ficar quanto tempo parado porque seu sistema que é hospedado num servidor nas nuvens parou?(projeto compartilhado) aqui se eu fizer isso posso pular num buraco…pois é um sistema que gerencia um grande volume de operações e 30 minutos de parada pode causar um grande transtorno na matriz.

nesse caso faço a hospedagem interna e disponibilizo acesso externo e caso a internet falhe, no maximo os externos param, já a matriz continua em operação…

no caso de fazer uma implementação para um e para outro não eu apenas não habilito o recurso no cliente que não o quer…mas na atualização e deixo full…e quando esse determinado cliente deseja usar eu simplesmente habilito…

criei aqui um painel de implantação com um menu que tem tudo (so eu acesso) e criei os menus dos modulos dos clientes, logo eu nao deixo o cliente acessar a tela que ele pode habilitar recursos, e se ele precisar tem que solicitar…

resumindo…eu faço uma aplicação FULL e cada solicitação que alguem me faça eu atualizo para todos…desde que não interfira nas regras de negocio gerais…daí habilito o cliente de acordo com o contrado…

Obrigada Jean, está ajudando bastante!!

Ainda uma dúvida: O SC, no momento que vou criar minhas apps de formulário, antes devo conectar à minha base de dados, certo? Sendo assim, se eu tiver uma base para cada cliente, concluo que terei que conectar cada app à sua base… estou errada? Ou o SC permite que uma única app seja conectada a várias bases e eu direcione (via PHP) em qual bd gravar?

HUnn…acho que entendi o que vc quer…

sua ideia é fazer app única mas com banco de dados distintos, isto é, todos os clientes acessam a mesma interface mas usam bancos diferentes…
pela arquitetura do SC nao sei se e possivel… o /_conf solicita uma conexao a um banco de dados especifico…nao sei como funciona o redirecionamento de banco no SC de dentro da APP…mas já vi muita discussão disso aqui no forum… pois de dentro de uma app vc pode redirecionar a conexao para outro banco, mas nao sei como isso funciona dinamicamente…

É disto mesmo que estou falando Jean…
No teu caso, só pra eu entender, você mantém um BD para cada cliente e possui uma interface para cada um, separada por módulos (cada módulo de um cliente), tudo dentro de um único sistema, seria isso?

Carol o SC tem o opção de alterar a base dinamicamente, assim não precisa ter a aplicação replicada, ou seja o máximo que você terá que fazer é criar uma tabela que valide qual empresa esta acessando e assim antes de iniciar a aplicação de controle já fazer a alteração para o banco corresponde a esta empresa.

Uma maneira fácil de fazer isso é ter uma tabela com os códigos das empresas e na url informa este código e no scriptInit da aplicação de controle que faz login você faria a verificação deste código e alteraria para o banco correspondente.

Se não entendeu me deixe saber que tento explicar melhor.

Entendi sim Saulo. Muito obrigada!