Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est-ce que ça vaut vraiment le coup de normaliser à la manière de Toxi ? ( 3NF )

Le fait d'avoir toutes les balises dans des enregistrements différents (normalisés) signifie que vous pourrez renommer les balises plus facilement en cas de besoin et suivre l'historique des noms de balises.

SO , par exemple, renommé SQL Server balises associées au moins trois fois (mssql -> sqlserver -> sql-server ).

Avoir toutes les balises dans un seul enregistrement (dénormalisé) signifie que vous pouvez indexer cette colonne avec un FULLTEXT indexer et rechercher des messages ayant deux balises ou plus à la fois :

SELECT  *
FROM    posts
WHERE   MATCH(tags) AGAINST('+mma +ufc')

ce qui est possible aussi mais moins efficace avec une conception normalisée.

(N'oubliez pas d'ajuster @ft_min_word_len pour indexer les balises de 3 caractères ou moins pour que cela fonctionne)

Vous pouvez combiner les deux conceptions :stocker à la fois la table de la carte et la colonne dénormalisée. Cela nécessitera cependant plus d'entretien.

Vous pouvez également stocker la conception normalisée dans votre base de données et utiliser la requête que vous avez fournie pour envoyer les balises à Sphinx ou Lucene .

De cette façon, vous pouvez creuser l'historique avec MySQL , recherches de balises en texte intégral à l'aide de Sphinx , et aucune maintenance supplémentaire ne sera nécessaire.