At have alle tags i forskellige poster (normaliseret) betyder, at du lettere kan omdøbe taggene, hvis behovet skulle opstå, og spore tagnavnehistorikken.
SO
, for eksempel omdøbt SQL Server
relaterede tags mindst tre gange (mssql
-> sqlserver
-> sql-server
).
At have alle tags i én post (denormaliseret) betyder, at du kan indeksere denne kolonne med en FULLTEXT
indekser og søg efter indlæg med to eller flere tags på én gang:
SELECT *
FROM posts
WHERE MATCH(tags) AGAINST('+mma +ufc')
hvilket også er muligt, men mindre effektivt med normaliseret design.
(Glem ikke at justere @ft_min_word_len
for at indeksere tags af 3
tegn eller færre for at dette virker)
Du kan kombinere begge designs:gem både korttabellen og den denormaliserede kolonne. Dette vil dog kræve mere vedligeholdelse.
Du kan også gemme det normaliserede design i din database og bruge den forespørgsel, du har angivet, til at sende taggene til Sphinx
eller Lucene
.
På denne måde kan du grave historie med MySQL
, fuldtekst-tag-søgninger ved hjælp af Sphinx
, og der kræves ingen ekstra vedligeholdelse.