Le fait d'avoir toutes les balises dans des enregistrements différents (normalisés) signifie que vous pourrez renommer les balises plus facilement en cas de besoin et suivre l'historique des noms de balises.
SO
, par exemple, renommé SQL Server
balises associées au moins trois fois (mssql
-> sqlserver
-> sql-server
).
Avoir toutes les balises dans un seul enregistrement (dénormalisé) signifie que vous pouvez indexer cette colonne avec un FULLTEXT
indexer et rechercher des messages ayant deux balises ou plus à la fois :
SELECT *
FROM posts
WHERE MATCH(tags) AGAINST('+mma +ufc')
ce qui est possible aussi mais moins efficace avec une conception normalisée.
(N'oubliez pas d'ajuster @ft_min_word_len
pour indexer les balises de 3
caractères ou moins pour que cela fonctionne)
Vous pouvez combiner les deux conceptions :stocker à la fois la table de la carte et la colonne dénormalisée. Cela nécessitera cependant plus d'entretien.
Vous pouvez également stocker la conception normalisée dans votre base de données et utiliser la requête que vous avez fournie pour envoyer les balises à Sphinx
ou Lucene
.
De cette façon, vous pouvez creuser l'historique avec MySQL
, recherches de balises en texte intégral à l'aide de Sphinx
, et aucune maintenance supplémentaire ne sera nécessaire.