Mysql
 sql >> Database >  >> RDS >> Mysql

Progettazione di database per app che utilizzano hashtag

Consiglierei di adottare una tipica relazione molti-a-molti tra messaggi e tag.

Ciò significherebbe che hai bisogno di 3 tabelle.

  • Messages (colonne Id , UserId e Content )
  • Tags (colonne Id e TagName )
  • TagMessageRelations (colonne:MessageId e TagId - per effettuare le connessioni tra messaggi e tag - tramite chiavi esterne che puntano a Messages.Id / Tags.Id )

In questo modo non memorizzi un tag più volte ma crei solo una nuova relazione con un messaggio (se quel tag esiste già nella tabella dei tag, ovviamente).

In questo modo puoi

  • Conta facilmente quanti tag ci sono (SELECT COUNT(*) FROM Tags )
  • salva ogni tag una sola volta e la ricerca di tag può essere facilmente indicizzata
  • o conta quante volte è stato utilizzato un determinato tag per utente, ad esempio:

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