PessoaFisica e Juridica como fica no banco?

Pessoal, vi vários tópicos mas não supriu a minha dúvida.
Tenho uma classe cliente abstrata e duas classes PessoaFisica e PessoaJuridica que herda de cliente.
Gostaria de saber como vai ficar no banco de dados relacional essa descrição.
Crio uma tabela e coloco todos os atributos em uma tabela só?
ou crio duas tabelas no banco para cada?

agradeço a todos que colaborarem.

eu criaria uma tabela soh.

Depende… rs mas a grande discussão que tem sobre este assunto é em função de Pessoa Fisica e Juridica serem usadas para explicar herança, mas na maioria dos casos não ser uma boa aplicação pratica de herança… em geral Pessoa fisica é uma coisa e Pessoal Juridica é outra, apesar de ambos serem chamados de Pessoa. (Bom mas esta não foi sua pergunta…voltando)

Das duas formas funciona, como em geral são usadas em casos diferente eu faria duas tabelas, pois na hora de fazer um select where será menos regitros para manipular… (se não tirver casos de ter que fazer join com pessoaFisica e pessoaJuridica)

Abraço,

Marcelo Gomes

Na prática eu faria uma tabela só também… Porém se fosse didático você poderia fazer com que PessoaFisica e PessoaJuridica fossem uma especialização total da classe Pessoa…

Acredito que utilizando uma unica tabela seria melhor, porém se o volume da dados for grande, utilizar tabelas diferentes seria melhor em questão de desempenho.

Quais as vantagens de usar uma tabela só?

Caso precisar fazer uma busca em PF e PJ junto vai ser mais rápido. (Isso em geral não acontece em PF e PJ certo)

Quais as vantagens de usar uma tabela para cada ?

Velocidade nas buscas;
Redução do espaço em uso (tendo PF e PJ na mesma tabela você vai ter campos sem uso);

Não entendo porque tanta sugestão por usar uma unica tabela… alguém poderia postar as vantagens reais ???

Se o cliente pode ser juridico ou pessoa fisica e você colocar em tabelas separadas como vai procurá-lo?
Vai realizar uma pesquisa em cada tabela?
E não acho que tenha muitos campos em desuso, vai ter um campo dizendo se ele é fisico ou juridico, o CNPJ/CPF pode ser um campo só…
Ou pode fazer tabelas separas e ter uma tabela clientes com chave primaria cliente e a chave estrangeira das duas tabelas…

Na minha visão, Pessoa Fisica é Pessoa Fisica, Pessoa Juridica é Pessoa Juridica e Cliente é Cliente!!!

Se caminhar para este lado… podemos cair em uma situação em que, se um funcionário pode comprar, então acaba tendo uma tabela PesssoasJuridicasFisicaseFuncionários!!! e por ai vai…

Não é bem o que você perguntou…

Mais aqui utilizei as três formas de herança entre Pessoa, Fisica e Juridica.

http://www.altieresdematos.com.br/2011/07/09/implementando-heranca-com-hibernate/

Talvez lhe ajude em algo.

Abraço.

Caramba, cada coisa que se vê.
Pessoa Fisica, Pessoa Juridica, Cliente, Funcionario, Dono são todos especializações de pessoa ou não. O que define isto é a estrutura do teu projeto (escopo).
Considerando o teu ambiente, você pode optar por criar uma única tabela sim, mas há a necessidade de criar uma coluna contendo a descrição da pessoa (pf, pj) e, ao invés de uma coluna para cnpj e uma para cpf, criar uma única com nome identificador_fiscal, por exemplo.

Poderia, também, criar 3 tabelas, Pessoa ou cliente e fisia e juridica, que teriam, ambas, uma FK apontando para a PK de pessoa.

É exatamente isso, o negócio e os requisitos do projeto é que mandam!
Não se pode afirmar se as pesquisas vão ser feitas juntas ou separadas, nem se vai ter colunas sobrando, nem se Pessoa Física ou Pessoa Juridica devem herdar de Cliente, sem conhecer o domínio que está sendo modelado.

Dependendo do negócio até um Cachorro pode ser um cliente ! :slight_smile: