9
votes

Comment modéliser des balises dans la base de données?

J'ai une webApp existante et souhaitez ajouter une fonction de balise afin que les utilisateurs puissent marquer des objets existants. La question est de devoir ajouter une colonne de tags à chaque objet? Ou devrais-je normaliser et utiliser une table d'étiquette où chaque objet aura une collection de balises? Je me penche vers ce dernier parce que cela se sent plus propre, plus facile à signaler et plus facile à créer un nuage de tags. Mais puisque je sais que cela a été résolu 1000 fois, je voulais demander et voir si on me manque quelque chose?


0 commentaires

3 Réponses :


4
votes

Oui, vous devriez normaliser cela. La "colonne tag" ne supporte qu'une seule étiquette par enregistrement, soit avoir une performance de recherche hideuse.


0 commentaires

2
votes

normalement normalement. Une table pour les tags, une table pour vos objets existants et une table de liens entre eux.


0 commentaires

6
votes

Prévoyez-vous que les utilisateurs ont besoin d'associer plus d'une étiquette avec un objet?

Si pas , ajoutez le tag_id fk à la table d'objets. Sinon, vous auriez besoin de trois tables au total pour modéliser correctement une relation de plusieurs à plusieurs:

objet

  • objet_id (pk)

    objet_tag_xref

    • objet_id (pk, fk à l'objet)
    • tag_id (pk, fk à tag)

      tag

      • tag_id (pk)

3 commentaires

Comment cela changerait-il pour attacher des balises aux utilisateurs? Est-ce que Object_id devenir user_id?


@Juniperash: vous devez ajouter une colonne user_id sur objet_tag_xref - même que les deux autres colonnes, la clé primaire et la clé étrangère de la table des utilisateurs.


Fait beaucoup plus de sens! Merci!