Ter todas as tags em registros diferentes (normalizados) significa que você poderá renomear as tags com mais facilidade, caso seja necessário, e acompanhar o histórico do nome da tag.
SO
, por exemplo, renomeado para SQL Server
tags relacionadas pelo menos três vezes (mssql
-> sqlserver
-> sql-server
). Ter todas as tags em um registro (desnormalizado) significa que você pode indexar esta coluna com um
FULLTEXT
indexe e pesquise postagens com duas ou mais tags ao mesmo tempo:SELECT *
FROM posts
WHERE MATCH(tags) AGAINST('+mma +ufc')
o que também é possível, mas menos eficiente com design normalizado.
(Não se esqueça de ajustar
@ft_min_word_len
para indexar tags de 3
caracteres ou menos para que isso funcione) Você pode combinar os dois designs:armazene a tabela de mapas e a coluna desnormalizada. Isso exigirá mais manutenção, no entanto.
Você também pode armazenar o design normalizado em seu banco de dados e usar a consulta fornecida para alimentar as tags para
Sphinx
ou Lucene
. Dessa forma, você pode pesquisar o histórico com
MySQL
, pesquisas de tags de texto completo usando Sphinx
, e nenhuma manutenção extra será necessária.