Em 20 de abril de 2011 14:38, Wagner Porto de Souza
<[email protected]> escreveu:
> Boa tarde !
> Pessoal,
> hoje temos aqui na empresa um sistema com vários banco de dados Firebird,
> sua estrutura foi construida de modo que a cada novo cliente eu tenho um
> novo DB (Hoje tenho 84 bancos com a mesma estrutura e a tendência e
> crescer).
> Cada cliente está vinculada a uma empresa,
> hoje são duas empresas que compartilham o mesmo banco para
> clientes/faturamento/serviços
> que são separados pelo " id " de cada empresa, ainda em 2011 serão 3
> empresas.
>
> A intenção e unir tudo em um unico banco para simplificar a administração.

Perfeito.

> Gostaria de opiniões sobre a melhor forma de estruturar esse banco com
> PostgreSQL
> com Schemas separados ou Registros separados por Id ?

Depende. Fazer com que todos os clientes utilizem os mesmos objetos implica em:

* Todos utilizam exatamente a mesma estrutura, sem adaptações
exclusivas para determinados clientes.
* Você terá de alterar boa parte da estrutura das tabelas para
acomodar o novo campo e isso significa alterar também a aplicação. Se
você já está migrando de um SGDB para outro, talvez você já esteja
prevendo algumas alterações, esta não é tão complexa.
* Se as bases crescerem muito, você pode querer particionar algumas
tabelas. Se vários clientes utilizam a mesma tabela, isso pode ocorrer
com maior frequência.
* As alterações na estrutura vão ocorrer de uma vez só para todos os
clientes. Isso pode ser bom, pois dá menos trabalho. Também pode ser
ruim, se um dos clientes estiver resistente a adotar uma nova versão.
* Você vai ter de tomar alguns cuidados especiais para que os dados de
um cliente não sejam vistos por outro cliente. Implementar acesso por
meio de funções ou visões onde o nome do cliente é um dos parâmetros
pode ser uma forma segura de fazer isso;
* A parte de GRANTs deve ser estudada com mais cuidado. O cliente não
deve em hipótese nenhuma ter acesso direto às tabelas.

A outra opção é óbvia: manter um esquema para cada cliente.

Uma 3ª opção é fazer um mix disso. Um esquema comum para vários
clientes com objetos comuns à todos e esquemas específicos com objetos
de cada cliente.

Só conhecendo bem a sua aplicação para dizer qual é a melhor opção.
Todas são viáveis e podem ser executadas com êxito e segurança. Cada
uma tem vantagens e desvantagens.

Espero ter ajudado mais do que confundido.
-- 
Atenciosamente,
Fábio Telles Rodriguez
blog: http://www.midstorm.org/~telles/
e-mail / gtalk / MSN: [email protected]
Skype: fabio_telles
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a