sql >> Database >  >> RDS >> Mysql

Database-ontwerp voor apps die hashtags gebruiken

Ik zou adviseren om te gaan met een typische veel-op-veel-relatie tussen berichten en tags.

Dat zou betekenen dat je 3 tabellen nodig hebt.

  • Messages (kolommen Id , UserId en Content )
  • Tags (kolommen Id en TagName )
  • TagMessageRelations (kolommen:MessageId en TagId - om de verbindingen tussen berichten en tags te maken - via externe sleutels die verwijzen naar Messages.Id / Tags.Id )

Op die manier sla je een tag niet meerdere keren op maar creëer je alleen een nieuwe relatie met een bericht (als die tag natuurlijk al in de tag-tabel bestaat).

Op deze manier kun je

  • eenvoudig tel hoeveel tags er zijn (SELECT COUNT(*) FROM Tags )
  • elke tag slechts één keer opslaan en zoeken naar tags kan eenvoudig worden geïndexeerd
  • of tel hoe vaak een bepaalde tag is gebruikt per gebruiker - bijvoorbeeld:

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




  1. SQL-selecteer elementen waarbij de som van het veld kleiner is dan N

  2. mysqli::query():Kan mysqli niet ophalen

  3. Waarom krijg ik een java.lang.IllegalArgumentException:de bindwaarde bij index 1 is in dit geval null?

  4. Hoe 2 keer op te halen in MYSQL PDO zonder FETCHALL