sql >> Base de Datos >  >> RDS >> Mysql

Diseño de base de datos para aplicaciones usando hashtags

Aconsejaría ir con una relación típica de muchos a muchos entre mensajes y etiquetas.

Eso significaría que necesita 3 mesas.

  • Messages (columnas Id , UserId y Content )
  • Tags (columnas Id y TagName )
  • TagMessageRelations (columnas:MessageId y TagId - para hacer las conexiones entre mensajes y etiquetas - a través de claves externas que apuntan a Messages.Id / Tags.Id )

De esa manera, no almacena una etiqueta varias veces, sino que solo crea una nueva relación con un mensaje (si esa etiqueta ya existe en la tabla de etiquetas, por supuesto).

De esta manera puedes

  • fácilmente cuenta cuántas etiquetas hay (SELECT COUNT(*) FROM Tags )
  • guardar cada etiqueta solo una vez y la búsqueda de etiquetas se puede indexar fácilmente
  • o cuente cuántas veces se usó una determinada etiqueta por usuario, por ejemplo:

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