Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Lohnt es sich wirklich, den Toxi-Weg zu normalisieren? ( 3NF )

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.