Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Agregação: Tabela de agregação pode ter campos extras ? Existe alguma norma com relação a usar campos extras em relacionamentos do tipo agregação? Um exemplo: Um sistema de curriculos, onde o candidato precisa selecionar suas habilidades, então a classoe Candidato teria uma relação agregação com a classe Habilidade, criando então a Classe CandidatoHabilidade Classe: Candidato - Tabela no Banco de Dados: candidato Classe: Habilidade - T...
WG
Agregação: Tabela de agregação pode ter campos extras ?  
Fechado
Existe alguma norma com relação a usar campos extras em relacionamentos do tipo agregação?

Um exemplo: Um sistema de curriculos, onde o candidato precisa selecionar suas habilidades, então a classoe Candidato teria uma relação agregação com a classe Habilidade, criando então a Classe CandidatoHabilidade

Classe: Candidato - Tabela no Banco de Dados: candidato
Classe: Habilidade - Tabela no Banco de Dados: habilidade
Classe: CandidatoHabilidade - Tabela no Banco de Dados: candidato_habilidade

Na entidade de ligaçãoCandidatoHabilidade se armazena os IDs das 2 tabelas relacionadas, e tem-se então a agregação. Já no diagrama de classe quando se representa uma relação de agregação a Entidade de ligação(CandidatoHabilidade) nem aparece no diagrama, mas está implícito que ela existe e fará a ligação; já no banco de dados ela aparece normalmente (tabela candidato_habilidade).

Mas e se além de ligar os candidatos às suas habilidades, também precisar definir a data em que o mesmo se qualificou? Posso criar novos campos na tabela de ligação ajustando manualmente no Adianti Framework e deixar diferente do Modelo de Classes ? Me preocupo porque daí o código das classes não irá refletir o modelo UML...

Isso tá me deixando confuso...

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (6)


FC

olha o exemplo no tutor na tabela customer/skill/contact é exatamente o que vc quer fazer.
WG

Boa tarde Felipe..

O relacionamento de Customer com Contact é de composição... então não tem problemas, porque cada contact só será linkado ao seu respectivo Customer...

Já na agregação, para temos vários Customers e vários Skills, e a forma de relacionar um com o outro é criando uma classe intermediária que fará a ligação entre as duas: CustomerSkill, que por sua vez representará a tabela customer_skill no banco de dados e aí que tá o ponto pois só na agregação entre 2 tabelas, cria uma terceira tabela que irá conter apenas as chaves estrangeiras lingando as chaves primárias das 2 tabelas relacionadas... Não tem mais attributos.

O que eu quero saber é se eu precisar adicionar mais campos, como a data em que ocorrem o relacionamento... se posso colocar ou isso foge do padrão!
JN

Não vejo nenhum problema em vc informar a data de inclusão ou alteração, não vai afetar a relação, minha opinião, mas posso estar errado.
PD

Veja que a tabela de meio (customer_skill) só é usada como ponte para a carga dos objetos agregados (Skill), ou seja, seus atributos são desconsiderados:
www.adianti.com.br/framework_files/tutor/index.php?class=Aggregation

Nesse exemplo específico, que é parecido com a relação entre um Pedido e seus itens, eu transformaria a agregação Candidato e Habilitade, em uma composição entre Candidato e HabilidadeCandidato, e em um associação entre HabilidadeCandidato e Habilidade.

Outro caso parecido ocorre com Pedidos, Notas fiscais, e coisas afim, que possuem o campo QUANTIDADE no item. Nesse caso ficaria assim:
* Pedido - composição com - ItemPedido // onde ItemPedido possui chave para pedido, chave para produto e quantidade;
* ItemPedido - associação com - Produto

Assim, decompomos uma agregação em dois relacionamentos (composição e associação). Use a agregação quando não existirem atributos de significado na tabela de meio.

Abraço!
Pablo
WG

Show de bola !
AR

Eu tinha essa duvida e já ia perguntar aqui no fórum... Show de bola!!!