Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbankdesign für Apps mit Hashtags

Ich würde zu einer typischen Viele-zu-Viele-Beziehung zwischen Nachrichten und Tags raten.

Das würde bedeuten, dass Sie 3 Tabellen benötigen.

  • Messages (Spalten Id , UserId und Content )
  • Tags (Spalten Id und TagName )
  • TagMessageRelations (Spalten:MessageId und TagId - um die Verbindungen zwischen Nachrichten und Tags herzustellen - über Fremdschlüssel, die auf Messages.Id zeigen / Tags.Id )

Auf diese Weise speichern Sie ein Tag nicht mehrfach, sondern stellen nur eine neue Beziehung zu einer Nachricht her (wenn dieses Tag natürlich bereits in der Tag-Tabelle vorhanden ist).

Auf diese Weise können Sie

  • einfach zählen, wie viele Tags es gibt (SELECT COUNT(*) FROM Tags )
  • jedes Tag nur einmal speichern und die Suche nach Tags können einfach indiziert werden
  • oder zählen, wie oft ein bestimmtes Tag verwendet wurde pro Benutzer - zum Beispiel:

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