sql >> Databasteknik >  >> RDS >> Mysql

Är det verkligen värt det att normalisera Toxi-sättet? ( 3NF )

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.



  1. Hur man bygger en JSON-array från mysql-databas

  2. SKAPA TYP på MySQL

  3. Skapa MySQL-funktion i Laravel 5.5

  4. Hur importerar man befintliga *.sql-filer i PostgreSQL 8.4?