Dúvida cunsulta SQL e Entidade-Relacionamento !!!!!

11/02/2004

0

Imagine que eu tenha 3 tabelas:

Tabela Pessoa, com os campos:
cd_p (pk) - código da pessoa
cd_name - nome da pessoa
cd_type - indica o tipo de pessoa, se é física ou jurídica
----------------------------------------
Tabela Pessoa Física, com os campos:
cd_p (pk) - código da pessoa
cd_rg - RG da pessoa
cd_cpf - CPF da pessoa
----------------------------------------
Tabela Pessoa Jurídica, com os campos:
cd_p (pk) - código da pessoa
cd_cgc - CGC da empresa

Alguém já fez algo parecido com isso ????! Se algué fez, como fica o relacionamento das tabelas ?!!! E por que há 3 tabelas e não apenas 2, uma para pessoa física e outra para jurídica?!!! E como eu faria uma consulta para trazer todas as pessoas com o nome ´X´, e trazer ainda o CGC se for pessoa jurídica, e o CPF se for pessoa física ?!!!

Obrigado.

Allans


Allans

Allans

Responder

Posts

23/02/2004

Wtjunior

Allans

A tabela Pessoa fica sendo a tabela PAI e as Tabelas Pessoa Física e Pessoa Jurídica ficam sendo FILHOS
Não pode haver um FILHO sem um PAI, este relacionamento vc faria com a cd_p (Tabela Pessoa) com cd_p (Tabela Pessoa
Fisica) ou cd_p (Tabela Pessoas Juridica)
===> melhore os nomes dos campos e acrescente na Pessoa Juridica os campos Insc. Municipal, Insc. Estadual.....
Não é obrigatório a criação destas 3 tabelas, mas no exemplo citado, a tabela Pessoa terá os dados comuns das duas
tabelas (endereço, telefone ......) e as tabela Fisica ou Jurídica terão os dados específicos....
===> Atenção Não pode existir um registro nas 3 tabelas

SELECT P.*, PF.CD_RG, PF.CD_CPF
FROM PESSOA P, PESSOA_FISICA PF
WHERE P.CD_P = PF.CD_P
AND P.CD_P = <codigo>

mais ou menos isso, para pessoa jurídica seria igual...
===> Na minha opinião está solução não é das melhores (das 3 tabelas), mas se vc quiser fazer assim.....
Cuidado quando for alterar um registro de pessoa fisica para juridica ou vice_versa....

Wilson


Responder

24/02/2004

Allans

Saudações,

qual seria uma solução melhor para este caso ?!!

Obrigado.


Responder

25/02/2004

Wtjunior

Olá Allans,

Eu prefiro usar uma tabela só e colocar uma coluna TIPO para diferenciar
F (Fisica) J (Jurídica) e colocar o nome dos campos assim:
CPF_CNPJ VARCHAR2()
RG_INSCEST VARCHAR2()
se o TIPO for F vc grava o CPF e RG
se o TIPO for J vc grava CNPJ e INSCEST....

O mais importante é vc sempre ter em mente a melhor forma de recuperar estas informações, guardar as informações é fácil, mas e quando precisarmos dessas informações... da forma que vc descreveu, eu teria que fazer a consulta em 2 tabelas e a manutenção fica mais difícil.

Dica... Estude um pouco de modelagem, principalmente normalizações ....

Valeu...


Responder

25/02/2004

Allans

Oi,

vc conhece algum bom livro ou tutorial sobre o assunto ?!!

Obrigado.

Alan


Responder

26/02/2004

Wtjunior

Procure na internet por ´Modelagem de Dados´, vc vai encontrar inúmeras apostilas.

Wilson


Responder

12/06/2004

Andre Brito

No Site da Revista SQL Magazine tem uma boa apostila sobre Modelagem de Dados. POrém aconselho livros.


Responder

18/06/2004

Flaviocf

Ola,

Nao eh uma simples opcao modelar uma especializacao. Talvez o exemplo falado aqui (pessoa, PF, PJ) seja desnecessario criar-se a especializacao, pois entre pessoa fisica e pessoa juridica ha quase nada em comum e, principalmente, uma pessoa nao pode ser fisica e juridica ao mesmo tempo. Se voce tiver uma especializacao nao exclusiva (por exemplo, Pessoa, Aluno e Professor: uma pessoa pode ser aluno e professor ao mesmo tempo) usar uma coluna Tipo nao resolve.

Para escolher se voce vai desenhar a especializacao ou nao voce deve levar em conta duas perguntas principais: Ha MUITOS atributos em comum entre as entidades especificas? E, principalmente, ha relacionamentos ligados DIRETAMENTE a entidade GERAL e outros ligados diretamente as especificas?
Se voce tiver relacionamentos com pessoas, independentemente de serem fisicas ou juridicas, entao voce deve implementar a especializacao. Se voce tiver relacionamentos exclusivos de pessoa juridica que nao podem ocorrer com pessoa fisica, entao voce tambem deve implementar a especializacao.

Agora, se voce DBA vai externalizar a especializacao ou nao, eh uma opcao sua. Voce pode criar views que juntem as tres tabelas acima em duas visoes: PF e PJ e so dar direitos sobre estas...

Flavio

[quote:60254cf9b8=´Andre Brito´]No Site da Revista SQL Magazine tem uma boa apostila sobre Modelagem de Dados. POrém aconselho livros.[/quote:60254cf9b8]


Responder

19/08/2004

Mprocha

Ola, ...Se voce tiver uma especializacao nao exclusiva (por exemplo, Pessoa, Aluno e Professor: uma pessoa pode ser aluno e professor ao mesmo tempo) usar uma coluna Tipo nao resolve.... Flavio [quote:669b101992=´Andre Brito´]No Site da Revista SQL Magazine tem uma boa apostila sobre Modelagem de Dados. POrém aconselho livros.
[/quote:669b101992]

colegas,
em relação a colocação do Flavio de especialização não exclusiva, isso quer dizer que tenho que incluir 1 registro na tabela pessoa, aluno e professor se caso a pessoa for aluno e professor ao mesmo tempo ??? :?:


Responder

08/09/2005

Luiz_ro

Caso você esteja procurando um livro sobre modelagem, recomendo o ´Projeto de Banco de Dados´ do professor Carlos Alberto Heuser da Editora Saga Luzato. Além de ótimas dicas, nesse livro você encontrará uma discussão sobre como transformar em tabelas o caso de ´generalização/especialização´.

Boa sorte

Luiz


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar