J'ai une application Web existante et je souhaite ajouter une fonctionnalité d'étiquette afin que les utilisateurs puissent marquer des objets existants. La question est est-ce que je devrais ajouter une étiquette à chaque objet? ou devrais-je le normaliser et utiliser une table d'étiquettes où chaque objet aura une collection d'étiquettes? Je penche pour ce dernier car il se sent plus propre, plus facile à rapporter et plus facile à créer un nuage de tags. Mais depuis que je sais que cela a été résolu 1000 fois, je voulais demander et voir si quelque chose me manque?Comment modéliser des tags dans la base de données?
9
A
Répondre
6
Prévoyez-vous que les utilisateurs doivent associer plus d'un tag à un objet?
Si pas, ajoutez le TAG_ID fk à la table OBJECT. Sinon, vous auriez besoin de trois tables au total pour modéliser correctement plusieurs-à-plusieurs:
OBJET
- OBJECT_ID (pk)
OBJECT_TAG_XREF
- OBJECT_ID (pk, fk à OBJECT)
- TAG_ID (pk, fk à TAG)
TAG
- tag_id (pk)
4
Oui, vous devriez le normaliser. La 'colonne d'étiquette' va soit ne supporter qu'une seule étiquette par enregistrement, soit va avoir des performances de recherche hideuses.
2
Definitivement normaliser. Une table pour les tags, une table pour vos objets existants et une table de liens entre eux.
Comment serait ce changement pour attacher des balises aux utilisateurs? Est-ce que OBJECT_ID deviendrait USER_ID? –
@JuniperAsh: Vous devez ajouter une colonne 'user_id' à' OBJECT_TAG_XREF' - identique aux deux autres colonnes, clé primaire et clé étrangère de la table des utilisateurs. –
Donne beaucoup plus de sens! Je vous remercie! –