sql >> Databasteknik >  >> RDS >> Mysql

Databasdesign för appar med hashtags

Jag skulle råda dig att använda ett typiskt många-till-många-förhållande mellan meddelanden och taggar.

Det skulle innebära att du behöver 3 bord.

  • Messages (kolumner Id , UserId och Content )
  • Tags (kolumner Id och TagName )
  • TagMessageRelations (kolumner:MessageId och TagId - för att skapa kopplingar mellan meddelanden och taggar - via främmande nycklar som pekar på Messages.Id / Tags.Id )

På så sätt lagrar du inte en tagg flera gånger utan skapar bara en ny relation till ett meddelande (om den taggen redan finns i taggtabellen förstås).

På så sätt kan du

  • enkelt räkna hur många taggar det finns (SELECT COUNT(*) FROM Tags )
  • spara bara varje tagg en gång och sökning efter taggar kan enkelt indexeras
  • eller räkna hur många gånger en viss tagg användes per användare - till exempel:

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. Blackout med EMCLI

  2. Hur väljer man maximalt 3 objekt per användare i MySQL?

  3. MySQL - SELECT WHERE field IN (subquery) - Extremt långsam varför?

  4. Ta bort gränssatsen från MySQL Workbench