使用“hashtags”的应用程序的数据库设计

时间:2014-07-17 09:30:35

标签: mysql normalization hashtag

数据库设计问题。

假设我们有一个webapp或者使用20到40个单词备注的主题标签的东西。存储用户标签的最佳方式是什么。

例如,如果用户输入。 "I like to have #lunch at #sizzler"我们将句子存储为文本,我们可以将主题标签存储为JSON,逗号分隔列表或其他一些机制。

还值得指出的是,标签需要可搜索,例如有多少人使用哈希标记午餐等等。

对此事的建议会很棒,在mysql中存储可变大小的输入时,我总是有点难过。每个音符可以有无限数量的标签,存储它们的最佳方式是什么?

1 个答案:

答案 0 :(得分:38)

我建议使用消息和标签之间的典型多对多关系。

这意味着你需要3张桌子。

  • messages本身的一个表格(最低要求:列IDUserIDmessage-content
  • tags的一个表格(此处的最低要求是:列IDtag-name
  • 最后一个表tagMessagesRelations用于建立消息和标记之间的连接(通过外键messageIDtagID

这样你就不会多次存储一个标签,只会创建一个新的消息关系(如果那个标签已经存在于标签表中)。

然后你可以

  • 可轻松计算有多少个标签(SELECT COUNT(*) FROM tags
  • 您只能保存每个代码一次,并且可以轻松索引标记
  • 或计算每个用户使用某个标记的次数(例如:

SELECT COUNT(*) FROM tags INNER JOIN tagMessagesRelations ON tags.ID = tagMessagesRelations.tagID INNER JOIN messages ON tagMessagesRelations.messageID = messages.ID GROUP BY messages.UserID