Da sich alle Tags in verschiedenen Datensätzen (normalisiert) befinden, können Sie die Tags bei Bedarf einfacher umbenennen und den Verlauf der Tag-Namen nachverfolgen.
SO
, beispielsweise umbenannt in SQL Server
verwandte Tags mindestens dreimal (mssql
-> sqlserver
-> sql-server
).
Alle Tags in einem Datensatz zu haben (denormalisiert) bedeutet, dass Sie diese Spalte mit einem FULLTEXT
indizieren können Indizieren und suchen Sie nach Posts mit zwei oder mehr Tags gleichzeitig:
SELECT *
FROM posts
WHERE MATCH(tags) AGAINST('+mma +ufc')
was mit normalisiertem Design auch möglich, aber weniger effizient ist.
(Vergessen Sie nicht, @ft_min_word_len
anzupassen um Tags von 3
zu indizieren Zeichen oder weniger, damit dies funktioniert)
Sie können beide Designs kombinieren:Speichern Sie sowohl die Zuordnungstabelle als auch die denormalisierte Spalte. Dies erfordert jedoch mehr Wartung.
Sie können das normalisierte Design auch in Ihrer Datenbank speichern und die von Ihnen bereitgestellte Abfrage verwenden, um die Tags an Sphinx
weiterzugeben oder Lucene
.
Auf diese Weise können Sie mit MySQL
den Verlauf durchsuchen , Volltext-Tag-Suchen mit Sphinx
, und es ist keine zusätzliche Wartung erforderlich.