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

Conception de base de données pour les applications utilisant des hashtags

Je vous conseillerais d'utiliser une relation typique plusieurs à plusieurs entre les messages et les balises.

Cela signifierait que vous avez besoin de 3 tables.

  • Messages (colonnes Id , UserId et Content )
  • Tags (colonnes Id et TagName )
  • TagMessageRelations (colonnes :MessageId et TagId - pour faire les liens entre les messages et les balises - via des clés étrangères pointant vers Messages.Id / Tags.Id )

De cette façon, vous ne stockez pas une balise plusieurs fois, mais créez uniquement une nouvelle relation avec un message (si cette balise existe déjà dans la table des balises bien sûr).

De cette façon, vous pouvez

  • comptez facilement le nombre de balises il y a (SELECT COUNT(*) FROM Tags )
  • n'enregistrez chaque balise qu'une seule fois et la recherche de balises peut être facilement indexée
  • ou compter combien de fois une certaine balise a été utilisée par utilisateur - par exemple :

SELECT COUNT(*) FROM Tags INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id GROUP BY Messages.UserId