Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Design de banco de dados para aplicativos usando hashtags


Eu aconselharia usar um relacionamento típico de muitos para muitos entre mensagens e tags.

Isso significa que você precisa de 3 tabelas.
  • Messages (colunas Id , UserId e Content )
  • Tags (colunas Id e TagName )
  • TagMessageRelations (colunas:MessageId e TagId - fazer as conexões entre mensagens e tags - via chaves estrangeiras apontando para Messages.Id / Tags.Id )

Dessa forma, você não armazena uma tag várias vezes, mas apenas cria uma nova relação com uma mensagem (se essa tag já existir na tabela de tags, é claro).

Desta forma você pode
  • facilmente conta quantas tags existem (SELECT COUNT(*) FROM Tags )
  • salve cada tag apenas uma vez e a pesquisa de tags pode ser facilmente indexada
  • ou contar quantas vezes uma determinada tag foi usada por usuário - por exemplo:

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