Question

Quel est le meilleur moyen de stocker des tags pour un enregistrement? Il suffit d'utiliser un champ varchar? Qu'en est-il de la sélection de lignes contenant la balise x? Utiliser l'opérateur similaire?

merci!

Était-ce utile?

La solution

Dépend de deux choses:
1) La quantité de balises / enregistrements marqués
2) Que vous ayez ou non une opinion religieuse sur la normalisation :-)

À moins de traiter de très gros volumes de données, nous suggérons d’avoir une table 'Tags' mappant des valeurs varchar à des identificateurs d’entier, puis une seconde table mappant des enregistrements étiquetés à leurs identifiants. Je suggèrerais de commencer par mettre cela en œuvre, puis vérifier si cela ne répond pas à vos besoins de performance. Dans ce cas, conservez une seule table avec un identifiant pour la ligne étiquetée et le texte réel de la balise, mais dans ce cas, je vous conseillerais d'utiliser une colonne de caractères, car elle tue votre requête si l'optimiseur effectue une analyse complète de la table. une grande table avec une colonne varchar.

Autres conseils

Non, c’est généralement une mauvaise idée de mettre plusieurs données dans un seul champ. Au lieu de cela, utilisez une table de balises distincte (avec peut-être uniquement un TagID et un TagName), puis indiquez le TagID associé à chaque enregistrement. Si un enregistrement est associé à plusieurs balises, vous aurez des enregistrements en double, la seule différence étant TagID.

L'avantage ici est que vous pouvez facilement interroger par étiquette, par enregistrement et gérer la table d'étiquettes séparément (c'est-à-dire, que se passe-t-il si le nom d'une étiquette change?).

Utilisez une table de balises avec la plus petite clé primaire autorisée. S'il y a moins de 255 balises, utilisez un octet (tinyint) ou un mot (smallint). Plus la clé est petite, plus l'index de la clé étrangère de la table principale est petit et rapide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top