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

Fad*_*orm 21 mysql normalization hashtag

数据库设计问题.

假设我们有一个webapp或者使用20到40个字的笔记的标签.存储用户标签的最佳方法是什么.

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

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

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

DrC*_*ste 40

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

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

  • 一张Messages自己的表(最低要求:列Id,UserIdContent)
  • 一个表Tags(这里的最低要求是:列IdTagName)
  • 最后一个表TagMessageRelations来建立消息和标签之间的连接(通过外键MessageIdTagId)

这样,您不会多次存储标记,而只会创建与消息的新关系(如果该标记已经存在于标记表中).

那样就可以了

  • 轻松计算有多少标签(Messages.Id)
  • 您只能保存每个标签一次,并且可以轻松索引标签搜索
  • 或计算每个用户使用某个标签的次数(例如:

Tags.Id

  • @StefanCebulak你可以做到这一点.TLDR; 我很确定额外的数据量(INT列)对于其他列来说是无关紧要的,并且应该在性能上得到回报.Speedwise,我想你只会注意到你的数据库中有大量数据.没有自己测试,但似乎有一些证据表明加入int比加入varchars更有效(例如)以下链接是关于sql server虽然:https://www.sqlinthewild.co.za/index .PHP/2011/02/15 /是-INT-加入-快于字符串加入-2 / (2认同)