Modelagem de um Cadastro de Clientes

Modelagem

30/12/2005

pode parecer bem simples, mas queria aqui levantar um detalhe da modelagem, que vejo sempre passar desapercebido.
o que geralmente vejo é uma tabela para todas as informações do cliente.
mas esta não é uma forma ´bem correta´ de fazer uma base.
o correto seria:
uma tabela para as informações gerais do cliente
outra para endereço
outra para telefones
outra para as informações específicas de pessoa Física
outra com informações específicas de pessoa Jurídica
e outra para observações

alguma contestação?
é realmente necessário usar estas várias tabelas para um único cadastro?
complica muito? o benefício não justifica a complicação?

Como vc´s fazem esta modelagem?


Raserafim

Raserafim

Curtidas 0

Respostas

Raserafim

Raserafim

30/12/2005

ao invés de criar duas tabelas, uma para pessoa física (com CPF e identidade) e outra para pessoa jurídica (com CNPJ e insc. estadual), é aconselhável utilizar um campo para colocar o CPF e o CNPJ, e um outro para a identidade e insc. estadual juntos?
é uma mal prática de programação? mas compensa?


GOSTEI 0
Afarias

Afarias

30/12/2005

|alguma contestação?

quanto a esse seu 1º post eu diria q não há um certo ou errado. já tive experiências com as 2 formas e, na minha opnião, o q vale é escolher o q melhor se adequa a uma necessidade específica.


|é aconselhável utilizar um campo para colocar o CPF e o CNPJ,
|e um outro para a identidade e insc. estadual juntos?

é o q eu faço sempre.


|é uma mal prática de programação?

na minha opnião particular, mal prática é não fazer isso. CPF e CNPJ são o q? Ambos são *inscrições federais* -- só muda o nome -- a mesma coisa para RG e Inscrição Estadual, ambos são *inscrições estaduais*.

Separar essas informações só cria uma complicação q não existe.


T+


GOSTEI 0
Raserafim

Raserafim

30/12/2005

colocar o CHPj e o CPF em um único campo é algo que um amigo me falou. concordo que é mais prático, mas não sei se estou convencido que ´modelalmente´ é uma boa.
...mas como vc é o cara, e vc ta dizendo...

valeu afarias


GOSTEI 0
Afarias

Afarias

30/12/2005

|mas não sei se estou convencido que ´modelalmente´ é uma boa.
|...mas como vc é o cara, e vc ta dizendo

hahahahahahahahahaha... :P :P :P

q isso! Essa é apenas minha visão e experiência. Para mim não existe 1 modelo (o modelo), mas sim um modelo que melhor aborda (melhor custo/benefício) uma determinada situação/necessidade.

Na minha experiência, esse ´modelo´ sempre me serviu como ´o melhor´ em todas as aplicações q tive a oportunidade de criar/participar -- mas isso para os ´requisitos´ que eu tive :)

Não tente se convencer se é certo ou não. Tome como 1 experiência e avalie se á válida para vc! ;-)


T+


GOSTEI 0
Ladamiak

Ladamiak

30/12/2005

Pra falar a verdade eu sempre uso várias tabelas para tratar de pessoas.

Geralmente, nos sistemas internos que desenvolvemos uma pessoa pode ser funcionário e cliente, dependendo da situação, (Trabalhamos com sistemas de controle de colaboradores) e nestes casos posso garantir, a complicação vale a pena. A manutenção é muito mais simples.

[]´s
Ladamiak
[url]http://www.megavenda.com[/url]


GOSTEI 0
Brunoagbr

Brunoagbr

30/12/2005

ao invés de criar duas tabelas, uma para pessoa física (com CPF e identidade) e outra para pessoa jurídica (com CNPJ e insc. estadual), é aconselhável utilizar um campo para colocar o CPF e o CNPJ, e um outro para a identidade e insc. estadual juntos? é uma mal prática de programação? mas compensa?


é exatamente assim que estou usando, mais estou tendo problemas para formatar o campo... se alguem puder me ajudar...


GOSTEI 0
Raserafim

Raserafim

30/12/2005

eu utilizo um campo chamado Tipo_Pessoa (Char 1), onde digo se:
F = Pessoa Física
J = Pessoa Jurídica

então consigo determinar se é CPF ou CNPJ e com isso definir corretamente qual a máscara utilizar.


GOSTEI 0
Daniel Port

Daniel Port

30/12/2005

Eu também separo endereços e fones.

Com relação ao CPF e CNPJ, uso um único campo, e defino se é um ou outro pelo tamanho (14 ou 11 digitos)


GOSTEI 0
Danilo.dct

Danilo.dct

30/12/2005

Bem... acho q o domínio onde a aplicação está inserido é fundamental para tomada de decisão a esse respeito!

mas a grosso modo unir PF e PJ em uma única classe contendo a UNIAO dos atributos dessas 2 primeiras classes gera uma classe nao coesa. Por outro lado concordo que deixa a ´coisa menos amarrada´.

estou passando por algo parecido... na minha aplicacao tenho a classe Funcionario que extende UserPF e UserPF extende PessoaFisica. Existe tb a classe ClientePF que extende UserPF e ClientePJ que extende UserPJ (User PF extende PessoaFisica e UserPJ extende PessoaJuridica).

Nao gostei muito desta abordagem pq ficamos com dados duplicados em UserPF - UserPJ, e ClientePF - ClientePJ. Uma solucao utopica seria UserPf e UserPJ herdar de User, que teria os dados em comum, mas Java nao nos permite heranca multipla... :(

Bem... gostaria de discutir aqui com vcs as vantagens e desvantagens de cada abordagem aqui citada.

vlw galera


GOSTEI 0
Daniel Port

Daniel Port

30/12/2005

Bem... mas a grosso modo unir PF e PJ em uma única classe contendo a UNIAO dos atributos dessas 2 primeiras classes gera uma classe nao coesa. Por outro lado concordo que deixa a ´coisa menos amarrada´.


Sugiro a quem se interessa pelo assunto, os livros Banco de dados, projeto e implementação, de Felipe Nery Rodrigues Machado e Otimizando a performance de banco de dados, de Roberto Carlos Mayer. Especialmente a página 39, no item ´Quando não normalizar´.

Eu não vejo o CPF/CNPJ como um atributo separado de PF (cpf) e PJ (cnpj), mas sim como um atributo único (inscrição) da pessoa.

Os atributos inerentes a cada tipo de pessoa (PF ou PJ), esses sim estão cada um em sua tabela de especialização.

O grande ´problema´ da especialização muitas vezes é a performance do BD, que fica sacrificada em função do grande número de acessos para recuperação de informações.

Cada caso é um caso, mas muitas vezes é melhor colocar dois campos com telefone, do que colocar em tabelas separadas.

Certa vez peguei um BD em que o cadastro de clientes se desobrava em 35 tabelas diferentes (fones, endereços, ceps, contatos etc.) O BD estava muito bem desenhado, e normalizado, porém ficava lento quando um grande número de atendentes acessava as informações para o telemarketing.

Mas, para o cliente e para o chefe, o fato de BD estar ´perfeitamente´ bem construido, é irrelevante. O relevante é a velocidade do sistema, tanto em inserir, quanto em recuperar informações.

Este é apenas um caso, onde se aprende que na prática, a teoria é diferente.


GOSTEI 0
Eleuterio Gonzalez

Eleuterio Gonzalez

30/12/2005

vejo o CPF/CNPJ  como um campo único , identificador númerico da pessoa seja PJ ou PF.
GOSTEI 0
POSTAR