Tener todas las etiquetas en diferentes registros (normalizados) significa que podrá cambiar el nombre de las etiquetas más fácilmente si surge la necesidad y realizar un seguimiento del historial de nombres de etiquetas.
SO
, por ejemplo, renombrado SQL Server
etiquetas relacionadas al menos tres veces (mssql
-> sqlserver
-> sql-server
).
Tener todas las etiquetas en un registro (desnormalizado) significa que puede indexar esta columna con un FULLTEXT
indexe y busque publicaciones que tengan dos o más etiquetas a la vez:
SELECT *
FROM posts
WHERE MATCH(tags) AGAINST('+mma +ufc')
que también es posible pero menos eficiente con el diseño normalizado.
(No olvide ajustar @ft_min_word_len
para indexar etiquetas de 3
caracteres o menos para que esto funcione)
Puede combinar ambos diseños:almacene tanto la tabla del mapa como la columna desnormalizada. Sin embargo, esto requerirá más mantenimiento.
También puede almacenar el diseño normalizado en su base de datos y usar la consulta que proporcionó para enviar las etiquetas a Sphinx
o Lucene
.
De esta manera, puede hacer una búsqueda histórica con MySQL
, búsquedas de etiquetas de texto completo usando Sphinx
, y no se requerirá mantenimiento adicional.