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.
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?)