Att ha alla taggar i olika poster (normaliserade) innebär att du lättare kan byta namn på taggarna om behov uppstår och spåra taggnamnhistoriken.
SO
, till exempel, bytt namn till SQL Server
relaterade taggar minst tre gånger (mssql
-> sqlserver
-> sql-server
).
Att ha alla taggar i en post (denormaliserad) innebär att du kan indexera den här kolumnen med en FULLTEXT
indexera och sök efter inlägg som har två eller flera taggar samtidigt:
SELECT *
FROM posts
WHERE MATCH(tags) AGAINST('+mma +ufc')
vilket också är möjligt men mindre effektivt med normaliserad design.
(Glöm inte att justera @ft_min_word_len
för att indexera taggar för 3
tecken eller mindre för att detta ska fungera)
Du kan kombinera båda designerna:lagra både karttabellen och den denormaliserade kolumnen. Detta kommer dock att kräva mer underhåll.
Du kan också lagra den normaliserade designen i din databas och använda frågan du angav för att mata taggarna till Sphinx
eller Lucene
.
På så sätt kan du gräva historik med MySQL
, fulltext-taggsökningar med Sphinx
, och inget extra underhåll kommer att krävas.