Pergunta

Atualmente, tenho um banco de dados com duas tabelas chamadas artigos e tags. Para permitir que os artigos estejam em várias categorias, tenho muitos a muitos relacionamentos. É um erro ter esse design em termos de desempenho? Ou devo remover o relacionamento entre essas duas tabela e adicionar uma terceira tabela como uma ponte (articlestags)?

Foi útil?

Solução

Não há nada inerentemente errado em ter um relacionamento muitos para muitos, você só precisa criar um Tabela de junção (que é a que parece que você está se referindo articlesTags) para facilitar esse relacionamento.

Outras dicas

Você está vendo a diferença entre um design conceitual de banco de dados (o relacionamento n: n) e sua realização física. Não importa como você modela seu relacionamento n: n, você precisará da tabela de junção acima mencionada para fazê -la funcionar.

Não há nada de errado em modelar um relacionamento do mundo real o mais próximo possível do mundo real como uma declaração geral. A clareza é rei.

Quando se trata de qualquer pergunta de desempenho em qualquer sistema, a resposta geralmente se resume a "depende".

Se o seu problema de desempenho estiver relacionado às gravações, uma estrutura altamente normalizada é a melhor e você deseja essa tabela de junção. Você acaba escrevendo muito menos dados e isso pode acelerar substancialmente as coisas (embora você possa queimar essa vantagem tendo que fazer pesquisas antes de criar as inserções). A leitura das tabelas normalizadas individuais também pode ser muito rápida.

Se o seu problema estiver relacionado a leituras analíticas, uma estrutura desnormalizada será a melhor. As junções podem ser muito intensivas em desempenho se as tabelas forem grandes e os índices se espalharam. Você sacrifica muito espaço para ganhar muito tempo.

Em geral, você deseja examinar as especificidades da sua situação e pesar os prós e os contras de cada abordagem antes de decidir sobre uma solução. Pessoalmente, sempre achei melhor focar na clareza nos estágios iniciais e refatorar o desempenho se descobrir um problema mais tarde.

Existe um relacionamento de muitos para muitos em um modelo de relação, é apenas uma abstração da mente. Quando você o implementar, haverá uma tabela Artigos_to_tags onde você terá:

fk_article (número inteiro) fk_tag (número inteiro)

cf.http://en.wikipedia.org/wiki/many-to-many_(data_model)

Não há problema em usar muitos para muitos relacionamentos. É frequentemente necessário.

E sim, não é possível criar muitos para muitos, sem usar uma terceira tabela.

Não há problema em ter um relacionamento de muitos para muitos, se é isso que os dados exigem, mas você deseja que uma terceira tabela o represente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top