Avere tutti i tag in record diversi (normalizzati) significa che sarai in grado di rinominare i tag più facilmente in caso di necessità e tenere traccia della cronologia dei nomi dei tag.
SO
, ad esempio, rinominato SQL Server
tag correlati almeno tre volte (mssql
-> sqlserver
-> sql-server
).
Avere tutti i tag in un record (denormalizzato) significa che puoi indicizzare questa colonna con un FULLTEXT
indicizza e cerca post con due o più tag contemporaneamente:
SELECT *
FROM posts
WHERE MATCH(tags) AGAINST('+mma +ufc')
anche questo è possibile ma meno efficiente con il design normalizzato.
(Non dimenticare di modificare @ft_min_word_len
per indicizzare i tag di 3
caratteri o meno affinché funzioni)
Puoi combinare entrambi i design:memorizza sia la tabella della mappa che la colonna denormalizzata. Tuttavia, ciò richiederà più manutenzione.
Puoi anche memorizzare il design normalizzato nel tuo database e utilizzare la query che hai fornito per inviare i tag a Sphinx
o Lucene
.
In questo modo, puoi scavare nella cronologia con MySQL
, ricerche di tag fulltext utilizzando Sphinx
e non sarà necessaria alcuna manutenzione aggiuntiva.