Tabelas ´Ancestrais´

04/08/2005

0

Estou começando um sistema de gerenciamento comercial apenas para treinar minhas habilidades e resolvi fazer as coisas de um jeito um pouco diferente. Ao invés de ter uma única tabela de Cliente contendo todas informações possíveis e imagináveis sobre o cliente, eu criei uma tabela de Cliente contendo apenas informações básicas, ligada com duas outras tabelas: Pessoa Física e Pessoa Jurídica. A ligação é feita através de chaves estrangeiras pelos campos RG e IE da tabela de Cliente, respectivamente, que possuem correspondente nas outras tabelas (lógico).

Além disso, ao invés de cadastrar todas informações possíveis e imagináveis sobre Pessoa Física e Pessoa Jurídica, eu tb criei uma tabela ´ancestral´ para essas duas: a tabela de Pessoa, que contém informações necessárias a qualquer tipo de pessoa, seja ela física ou jurídica.
E além disso criei uma tabela de Endereço que aponta para a tabela de Pessoa, de forma que uma pessoa pode ter N endereços.

Será que vou ter algum tipo de problema a longo prazo?


Mordred

Mordred

Responder

Posts

17/08/2005

Mordred

OK, achei muito difícil trabalhar desse jeito. Os relacionamentos não funcionavam de maneira satisfatória. Resolvi reagrupar os dados que eu tinha desmembrado em tabelas e agora está funcionando.


Responder

18/08/2005

Beppe

Eu usaria o mesmo campo ID para as duas, caso contrário se perde(ou não se beneficia da) integridade.

Unificar ou separar depende do caso. Unificando, vc terá alguns campos nulos dependendo do tipo. Separando, migrar tipos e outras operação não é tão fácil, mas é mais elegante.


Responder

18/08/2005

Mordred

É, realmente... o meu problema foi na hora de implementar. Eu criei uma tela de cadastro com todos os campos desabilitados. Quando a pessoa clicava em ´Novo´ o campo Nome (da tabela de Pessoa) era liberado. No evento OnExit do campo nome tinha instruções pra dar insert na tabela de Pessoa Física, insert na tabela de Endereço e liberar os campos relativos às duas tabelas. Entre os campos liberados tinha o campo RG da tabela de Pessoa Física que ligava a Pessoa Física com o Funcionário.
Maravilha, até aí funcionava. O problema foi na hora de gravar. Dava uns paus de constraint nas chaves estrangeiras mesmo eu gravando as alterações na ordem necessária pra que as chaves estrangeiras funcionassem. Daí, como não tenho o ano todo pra terminar esse sistema, resolvi agrupar os campos das tabelas Pessoa, Pessoa Fisica, Endereço e Funcionário, tudo numa coisa só.
Seja o que Deus quiser. :P


Responder

19/08/2005

Beppe

É, realmente... o meu problema foi na hora de implementar. Eu criei uma tela de cadastro com todos os campos desabilitados. Quando a pessoa clicava em ´Novo´ o campo Nome (da tabela de Pessoa) era liberado. No evento OnExit do campo nome tinha instruções pra dar insert na tabela de Pessoa Física, insert na tabela de Endereço e liberar os campos relativos às duas tabelas. Entre os campos liberados tinha o campo RG da tabela de Pessoa Física que ligava a Pessoa Física com o Funcionário. Maravilha, até aí funcionava. O problema foi na hora de gravar. Dava uns paus de constraint nas chaves estrangeiras mesmo eu gravando as alterações na ordem necessária pra que as chaves estrangeiras funcionassem. Daí, como não tenho o ano todo pra terminar esse sistema, resolvi agrupar os campos das tabelas Pessoa, Pessoa Fisica, Endereço e Funcionário, tudo numa coisa só. Seja o que Deus quiser. :P

Eu também quis espelhar a interface de acordo com o modelo de dados uns dias atrás, bem como tu fez. Não é algo comum de se ver, mas até dá certo mesmo. O problema é que eu estou começando a achar que um modelo maravilhoso não é tão maravilhoso na prática, pq esbarra no projeto físico(as constraints...).


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