Ir para conteúdo
Fórum Script Brasil
  • 0

Modelagem Pess Fisica e Pess Juridica


Guido Gabriel

Pergunta

Bom dia pessoal.

Seguinte, Estou começando a modelar um banco de dados para gerenciamento de equipamento de uma empresa.

Estou na dúvida a respeito da minha tabela de CLIENTE, existem tanto clientes pessoas fisicas, como clientes pessoas juridicas. Lembrando que existem informaçoes que somennte estão relacionadas com pess fisica (CPF, Data de aniversário, estado civiil, profissao) e campos que somente estão relacionados com pess juridica (CNPJ, nome fantasia, inscricao estadual) Como devo fazer essa(s) tabela(s)?

Minha modelagem inicial está assim:

ENTIDADE_PESSOA

ent_id

tipo_pessoa

pess_fisico_id

pess_juridico_id

ent_endereco

PESSOA_FISICA

pess_fisco_id

pess_fisico_cpf

pess_fisico_rg

pess_fisico_dta_niver

PESSOA_JURIDICA

pess_juridico_id

pess_juridico_cnpj

pess_juridico_insc_estadual

pess_juridico_nome_fantasia

Eu não to gostando muito dessa estrutura mas não consigo visualizar outra forma, to achando redundante informar na tabela ENTIDADE PESSOA o tipo da pessoa (campo tipo_pessoa) e depois na mesma tabela ENTIDADE_PESSOA ter um chave estrangeira que aponte pra pessoa fisica (campo pess_juridico_id) ou juridica (pess_juridico_id). E em relação a performace ?

Qual a sugestão de voces?

Atenciosamente,

Guido Gabriel

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'Guido Gabriel'

Você pensou correto quando quis colocar as tabelas em forma de generalização especialização. Mas errou na criação delas.

Veja o modelo em anexo e dê sua opinião.

Pessoa.pdf

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde,

Denis, obrigado mais uma vez pela agilidade.

Da forma que voce propos os atributos comuns de Pess juridica e Pess fisica ficariam na tabela PESSOA. e o identificador_Pessoa seria a chave estrangeira das tabelas Pessoa_fisica e Pessoa_juridica dependendo do tipo de pessoa que seria preenchido no campo Tipo_pessoa na tabela PESSOA.

Assim sendo, as chaves primarias das tabelas Pessoa_fisica e Pessoa_juridica não vão ser sequenciais, certo? Acredito que não exista nenhum problema contra isso.

Uma coisa não entendi, Por que que o endereço da pessoa fica numa tabela separada? Sei que o campo Identificador_endereço na tabela Endereco_pessoa é chave estrangeira da tabela ENDERECO, mas por que voce criou outra tabela? e Tipo_endereço?

Atenciosamente,

Guido Gabriel

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Guido Gabriel

Assim sendo, as chaves primarias das tabelas Pessoa_fisica e Pessoa_juridica não vão ser sequenciais, certo? Acredito que não exista nenhum problema contra isso.
1 - Sim, não vão ser sequenciais.

2 - Não há nenhum problema quanto a isso.

Você deve se lembrar que a sequencia estará na tebela pessoa, que é uma generalização, e as tabelas Pessoa_Fisica e Pessoa_Juridica, por serem filhas da tabela pessoa (especialização dela) estão ligadas por um relacionamento 1:1 e não tem necessidade de terem suas chaves sequenciais.

Por que que o endereço da pessoa fica numa tabela separada? Sei que o campo Identificador_endereço na tabela Endereco_pessoa é chave estrangeira da tabela ENDERECO, mas por que voce criou outra tabela? e Tipo_endereço?

O endereço foi colocado em tabela separada pois o relacionamento é muitos para muitos com pessoa.

Uma pessoa pode ter endereço comercial, residencial, de faturamento, de entrega, etc.

Assim como um endereço pode pertencer a mais de uma pessoa.

Link para o comentário
Compartilhar em outros sites

  • 0

Entendido caro Denis.

Outra problemática, agora um sistema de gerenciamento de processos de um escritório de adivocacia:

No meu sistema vai existir a figura:

- do cliente (pessoa que vem vem ao encontro do advogado procurando auxilio especializado);

- do adverso (pessoa contra qual meu cliente vai entrar na justica) e

- parceiro (pessoa que indicou aquele cliente para procurar meu escritório)

Vale comentar que tanto cliente, quanto adverso quanto, parceiro podem ser pessoas fisicas ou juridicas (generalização).

Essas três entidades (cliente, adverso e parceiro) possuem quase os mesmos atributos, mudam muito pouca coisa mesmo.

Pensamosem duas alternativas.

primeira:

ENTIDADE_PESSOA

id_pessoa

tipo_pessoa

PESSOA_FISICA

id_pessoa

fisica_cpf

fisica_niver

PESSOA_JURIDICA

id_pessoa

juridica_cnpj

juridica_insc_estadual

Onde o campo tipo_pessoa da tabela ENTIDADE_PESSOA seria onde preencheriamos com cliente ou adverso ou parceiro.

outra maneira:

CLIENTE

id_cliente

nome_cliente

CLIENTE_PESSOA_FISICA

id_cliente

cliente_fisica_cpf

cliente fisica_niver

CLIENTE_PESSOA JURIDICA

id_cliente

cliente_juridica_cnpj

cliente_juridica_inscricao_estadual

ADVERSO

id_adverso

nome_adverso

ADVERSO_PESSOA_FISICA

id_adverso

adverso_fisica_cpf

adverso_fisica_niver

ADVERSO_PESSOA_JURIDICA

id_adverso

adverso_juridica_cnpj

adverso_juridica_inscricao_estadual

PARCEIRO

id_parceiro

nome_parceiro

PARCEIRO_PESSOA_FISICA

id_parceiro

parceiro_fisica_cpf

parceiro_fisica_niver

PARCEIRO_PESSOA_JURIDICA

id_parceiro

parceiro_juridica_cnpj

parceiro_juridica_inscricao_estadual

Qual a melhor opção no que tange performance, normalizacao, integridade?

Atencisamente,

Guido Gabriel.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'Guido Gabriel'

Lembrando que uma pessoa pode ter quaisquer dos três papéis(Cliente, Adverso, paceiro) e um papel pode ser representado por qualquer pessoa, temos, então, um relacionamento muitos para muitos entre a tabela de domínio papel e pessoa. Um atributo que poderá entrar na tabela de relacionamento pessoa_papel é o da data ou número do processo em que a pessoa passou a representar aquele papel.

Veja a modificação no DER em anexo:

Pessoa.pdf

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia,

Confesso que não tinha pensado dessa maneira. Já que um cliente pode representar um papel dependendo do processo que estamos falando, então é interessante relacionar a tabela PROCESSO não à tabela PESSOA e sim à tabela PESSOA_PAPEL que é onde informanos qual o papel daquela pessoa em relacão àquele determinado processo. Interpretei corretamente?

Fiquei um pouco confuso da tabela RELACIONAMENTO BAIRROS CIDADE ESTADO. Não existe uma maneira diferente de implementar essa parte do endereço de uma maneira mais simples?

Fungindo um pouco do assunto, voce poderia me indicar algum livro sobre banco de dados que tenha uma liguagem bem amigavel? Eu já tenho uma base em BD, mas ainda em sinto meio "cru". Comprei ultimamente o livro da Série "Use a cabeça - SQL", ainda estou esperando chegar.

Att,

Guido Gabriel

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'Guido Gabriel'!

Bom dia,

Confesso que não tinha pensado dessa maneira. Já que um cliente pode representar um papel dependendo do processo que estamos falando, então é interessante relacionar a tabela PROCESSO não à tabela PESSOA e sim à tabela PESSOA_PAPEL que é onde informanos qual o papel daquela pessoa em relacão àquele determinado processo. Interpretei corretamente?
Sim.

Fiquei um pouco confuso da tabela RELACIONAMENTO BAIRROS CIDADE ESTADO. Não existe uma maneira diferente de implementar essa parte do endereço de uma maneira mais simples?
Sim. Da maneira tradicional, colocando bairro cidade, estado, direto na tabela como campos descritivos. Mas, deste jeito, você estará propiciando erros, abreviações, duplicidades de informação, etc.

Fungindo um pouco do assunto, voce poderia me indicar algum livro sobre banco de dados que tenha uma liguagem bem amigavel? Eu já tenho uma base em BD, mas ainda em sinto meio "cru". Comprei ultimamente o livro da Série "Use a cabeça - SQL", ainda estou esperando chegar.
Espere que ele chegue. Você terá muito o que explorar nele. Eu gosto muito deste livro: Sistemas de Bancos de Dados

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite,

Outra dúvida cruel: Num processo existem as partes, ou seja, meu cliente e o adverso (aquele contra quem meu cliente está entrando judicialmente).

Como faço para modelar essa parte do banco partindo do principio de que num MESMO processo um ou mais clientes meus podem entrar contra um ou mais adversos. Essa relação deve tratar essas situações, vários clientes contra um adverso ou um cliente contra contra vários adversos.

Assim que tiver uma folga no orçamento, pretendo comprar o livro que voce indicou.

Voce tem alguma formação superior?

Obrigado!

Atenciosamente,

Guido Gabriel.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'Guido Gabriel'!

Outra dúvida cruel: Num processo existem as partes, ou seja, meu cliente e o adverso (aquele contra quem meu cliente está entrando judicialmente).

Como faço para modelar essa parte do banco partindo do principio de que num MESMO processo um ou mais clientes meus podem entrar contra um ou mais adversos. Essa relação deve tratar essas situações, vários clientes contra um adverso ou um cliente contra contra vários adversos.

Observe o último modelo que te passei, no post #6 deste tópiico, a tabela de relacionamento "pessoa_papel" deverá ser renomeada para pessoa_papel_processo, pois é uma ligação ternária e atende o que você está solicitando aqui.

Assim que tiver uma folga no orçamento, pretendo comprar o livro que voce indicou.
Primeiro, esgote por completo o livro que você comprou. ele tem muitos truques que te serão muito úteis.

Voce tem alguma formação superior?
Sim. Adm de Empresas. Escolhi este curso porque já sabia o suficiente de TI e necessitava saber como pensava o cidadão que ficava do outro lado da mesa, quando eu o entrevistava para desenvolver um sistema.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia,

Eu já estava escrevendo que não havia entendido a explicação quando ao tentar descrever meu problema consegui visualizar o que fora dito. Na tabela pessoa_papel_processo eu teria vários registros pra identificar um só processo e nesses registros estariam quantas pessoas nos seus diferentes papeis fossem necessários!

Qual ferramenta de modelagem voce utiliza? Tenho aqui DBDesigner e PowerDesigner. o primeiro é bem mais simples, o segundo bem mais robusto e completo.

Att,

Guido Gabriel

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Guido,

Bom dia,

Eu já estava escrevendo que não havia entendido a explicação quando ao tentar descrever meu problema consegui visualizar o que fora dito. Na tabela pessoa_papel_processo eu teria vários registros pra identificar um só processo e nesses registros estariam quantas pessoas nos seus diferentes papeis fossem necessários!
Exatamente.

Qual ferramenta de modelagem voce utiliza? Tenho aqui DBDesigner e PowerDesigner. o primeiro é bem mais simples, o segundo bem mais robusto e completo.
Eu uso o ErWin da CA computers. Mas as ferramentas que você tem são bem eficientes.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...