Melhor evitar tabela Associativa

20 respostas
M

Olá a todos!!Conversando com meu professor, não tive exatamente uma fixa conclusão de não criar tabelas associativas.

20 Respostas

T

Se você precisa criar um relacionamento M para N, é necessário criar uma tabela associativa - mas isso é só representado no modelo físico, não no modelo lógico.

Giulliano

Não entendi se isso era uma pergunta ??? E se for, qual é a pergunta ???

M

É que alguns professores disseram que é melhor evitar as tabelas associativas. Gostaria de saber o porquê?

T

Pergunte ao seu professor.
Que eu saiba, toda vez que você tiver um relacionamento M para N você precisa criar no modelo FÍSICO uma tabela associativa.
No modelo LÓGICO essa tabela não existe, porque é um artefato de implementação.

M

Você quer dizer que no diagrama (físico) preciso demonstrar, e não implementando (lógico)!?

Andre_Fonseca

uma vez eu trabalhei num lugar onde tinha uma tabela que tinha 13 chaves extrangeiras dentro dela, algo como

tabela produto
id_produto
id_item1
id_item2

id_item13

ou seja, produto só pode ter no máximo 13 itens, se tiver um 14 item vai ter que usar um alter table ai…

uma das vantagens de voce ter uma tabela associativa é vc evitar isso… agora tudo depende to tipo de BD que vc vai usar, se a query (join) que vc vai ter que usar para recuperar os dados vai ficar pesado, etc…

M

Valeu ai thingol, andré!

bonfarj

André Fonseca:
uma vez eu trabalhei num lugar onde tinha uma tabela que tinha 13 chaves extrangeiras dentro dela, algo como

tabela produto
id_produto
id_item1
id_item2

id_item13

ou seja, produto só pode ter no máximo 13 itens, se tiver um 14 item vai ter que usar um alter table ai…

uma das vantagens de voce ter uma tabela associativa é vc evitar isso… agora tudo depende to tipo de BD que vc vai usar, se a query (join) que vc vai ter que usar para recuperar os dados vai ficar pesado, etc…

Peço desculpas por atuar como coveiro, mas essa realmente me deixou impressionado, não vejo razão para isto.

E aproveitando, gostaria de saber por que este professor afirma que não é uma boa usar tabelas associativas, fiquei curioso.

Abraços,

AUser

Em alguns casos (sistemas de extrema-alta-super-ultra performance) não é legal mesmo usar. Imagine uma tabela que tem 4 associações e que tem mais ou menos 400 entradas por segundo… Mais ou menos em casos assim.

[]'s

bonfarj

Verdade, mas se pensarmos em performance boa parte das “boas práticas” de BD vai pro saco, normalização etc. Sendo assim, acho estranho que este professor tenha ressaltado que tabelas associativas não são uma boa, deve ter alguma outra razão que não consigo ver.

Abraços,

AUser

Nada. Talvez tenha falado isso apenas p/ se achar ou então é daqueles que gostam de escovar bits.

Tem um sistema bancário aqui que por ex: metade dele é com associativas (a parte que é menos usada), algumas outras partes tem, e as de alta performance não tem nenhuma associação sequer.

[]'s

Mauricio_Linhares

Muitos materiais sobre orientação a objetos e modelagem de bancos de dados dizem que tabelas associativas não são comuns, porque a maior parte das associações tem algum “dado” a mais que termina virando uma coluna na tabela associativa e fazendo com que ela não seja mais uma simples tabela associativa. Então, associações N:N diretas normalmente simbolizam pouco conhecimento do modelo em questão (ou que você tem um problema bem incomum pra ser resolvido).

Um exemplo disso pode ser encontrado no capítulo 5 do livro Domain Driven Design (o exemplo começa na página 82).

P

Já me intrometendo… rsrs

No modelo logico vc não cria a tabela associativa, apenas destaca a relação. Por exemplo: N produtos podem ser comprados por N clientes.

No modelo fisico vc tem a tabela produto, a tabela cliente e mais a tabela que relacionado os produtos comprados com os clientes.

abraços.

B

Nem 8 nem 80, normalizar tudo deixa tudo bonitinho, mas joins entre tabelas muito grandes derrubam a performance do banco.

Pergunta pro pessoal do DW se eles gostam de ter que ficar esperando a geração de relatórios que os chefões pedem.

Alguns dados são melhores estarem desnormalizados mesmo, mas tudo depende.

bonfarj

Achei isso meio controverso. Por mais que possam existir atributos em uma determinada associação, pode ser que para o seu modelo ele não seja relevante e vc tenha como resultado no modelo físico do banco apenas uma tabela associativa “simples”. Posso estar enganado, mas não vejo como algo errado este tipo de tabela associativa.

Abraços,

Mauricio_Linhares

Se no modelo físico já uma coluna de dados na tabela associativa e isso não é refletido no modelo da aplicação, ou o banco de dados ou a aplicação estão modelados de forma incorreta. Não existem dois modelos.

bonfarj

Se no modelo físico já uma coluna de dados na tabela associativa e isso não é refletido no modelo da aplicação, ou o banco de dados ou a aplicação estão modelados de forma incorreta. Não existem dois modelos.

Talvez não tenha me expressado bem, hehe. Eu quis dizer que, considerando o “mundo real”, até podem existir atributos para a associação, mas para o seu modelo esse atributo é totalmente irrelevante e não será considerado. Sendo assim, isso não será refletivo no banco e não porque esteja errado e sim porque não faz sentido.

Abraços,

fantomas

Deixa eu me meter tambem?

  1. Que eu me lembre, é uma boa pratica vc aplicar as regras de normalização (primeira, segunda e terceira formula normal) conforme a necessidade.

  2. Quando uma tabela associativa recebe um atributo que não tem nada a ver com a associação, ela se torna automaticamente uma entidade forte deixando de ser simplesmente um recurso de implementação; ou seja, um aspecto muito importante no MODELO.

  3. As tecnicas de normalização ACEITA o fato de que em alguns casos uma tabela não NORMALIZADA (formulas normais) possa resultar em maior performance, mas estes casos tem que ser mediante comprovação cientifica; ou seja, mediante testes que comprovam o resultado. Mesmo porque, os problemas de performance sempre estão relacionados a instruções sqls inadequadas, infraestrutura inadequada e uso inadequado/não uso de recursos especias do banco aplicado.

  4. Quanto menor e mais otimizado os arquivos de indices mais rápida é a localização dos dados, eu acho que as tabelas associativas ajudam nesta parte.

  5. Alto indice de redundancia em uma linha pode fazer com que a tabela fique grande e provocar particionamentos (dba faz isto) sem falar que se houver uma busca por leituras sequenciais em trechos (range scan) a perfomance pode ficar comprometida.

flws

Mauricio_Linhares

Como eu disse, isso é geralmente, não sempre.

Só acho improvável que haja um atributo na associação e quem está desenvolvendo o modelo resolva ignorar esse atributo intencionalmente pra ficar com a tabela de associação simples. A não ser que o modelo que está sendo criado pra aplicação seja também uma coisa muito simples, que não precise captar realmente a abstração;

bonfarj

Como eu disse, isso é geralmente, não sempre.

Só acho improvável que haja um atributo na associação e quem está desenvolvendo o modelo resolva ignorar esse atributo intencionalmente pra ficar com a tabela de associação simples. A não ser que o modelo que está sendo criado pra aplicação seja também uma coisa muito simples, que não precise captar realmente a abstração;

Sim, isso mesmo. Estou partindo do princípio de que o modelo é uma abstração do mundo real, não precisamos pegar tudo, apenas o que for relevante para o nosso contexto.

Um exemplo: imagine que eu tenha um relacionamento N-N entre jogadores e times onde eles já jogaram (um jogador já jogou em uma ou N equipes e uma equipe já teve N jogadores). Eu poderia incluir como atributo desta associação a temporada na qual o jogador X jogou na equipe Y, mas talvez isto não seja necessário para o meu modelo. Consequentemente, meu modelo físico do banco poderia usar uma tabela associativa “simples”.

Abraços,

Criado 11 de outubro de 2007
Ultima resposta 28 de fev. de 2009
Respostas 20
Participantes 10