Mapeamento OO para relacionamentos com atributos

2 respostas
F

Pessoal,

Tenho o seguinte problema. Possuo duas classes (Pessoa e Categoria). Existe um relacionamento entre elas onde uma pessoa pode ter uma Categoria. Porém preciso armazenar tbm a data e hora que a pessoa foi promovida para uma determinada categoria. Relacionalmente o que ocorre seria o seguinte:

TBL_PESSOA
ID | NOME | RG |…

TBL_CATEGORIA
ID | NOME | DESCRICAO |…

TBL_PESSOA_CATEGORIA ( Apenas para mapear o atributo do relacionamento)
ID_PESSOA | ID_CATEGORIA | DATAHORA |…

Existe algum pattern? Ou qual seria uma solução bonita para isso.

[]s,
Flavio

2 Respostas

S

depende do que vc tá querendo fazer:

  • se vc pretende guardar um histórico das categorias da pessoa essa solução é a melhor e mais bonita

  • se vc só pretende armazenar uma categoria por pessoa vc deveria colocar a data na tabela de pessoa

S

A parte bonita é que num modelo de entidades e relacionamentos, os relacionamentos podem ter atributos, como este exemplo do Flavio.

Porém, quando "traduzimos um ExR como este para seu modelo de implementação relacional, os relacionamentos, necessariamente, serão traduzidos para:

exportar a chave primária de uma tabela para outra, como chave estrangeira, o que não permite atributos de relacionamento (sem ferir as regras de normalização - o caso da 2ª opção de seuparada);

ou, criar uma tabela que implemente o relacionamento, composta das chaves estrangeiras das tabelas relacionadas mais os atributos deste relacionamento. A chave primária desta nova tabela deverá necessariamente incluir as chaves estrangeiras, mutas vezes acrescidas de algum atributo.

Como dá para perceber, entre ExR o modelo relacional correspondente, se perde muito da beleza!!!

Quanto a padrões carimbados (design patterns), todos tem -deveriam ter- mecanismos para tais situações, mas abrir mão de entender o que de fato está ocorrendo, não contribui para uma visão clara das coisas ao nosso redor. (bonita frase, não acham?)

Criado 18 de novembro de 2004
Ultima resposta 18 de nov. de 2004
Respostas 2
Participantes 3