使用“主题标签”的应用程序的数据库设计

发布于 2021-02-02 16:16:21

数据库设计问题在这里。

假设我们有一个webapp或使用#标签处理20-40个字词的东西。存储用户主题标签的最佳方法是什么。

例如,如果用户输入。`”I like to have #lunch at

sizzler”`我们将句子存储为文本,将标签存储为JSON,逗号分隔列表或其他某种机制。

还值得指出的是,这些标签必须是可搜索的,例如有多少人对午餐进行了哈希标签等等。

在这个问题上的建议会很棒,在将可变大小的输入存储在mysql中时,我总是有些困惑。每个音符可以有无限数量的主题标签,最好的存储方式是什么?

关注者
0
被浏览
70
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

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

    那意味着您需要3张桌子。

    • Messages(列IdUserIdContent
    • Tags(列IdTagName
    • TagMessageRelations(列:MessageIdTagId-在消息和标签之间建立连接-通过指向Messages.Id/的外键Tags.Id

    这样,您不必多次存储标签,而仅创建与消息的新关系(当然,如果该标签已存在于标签表中)。

    这样你可以

    • 轻松 计算多少标签SELECT COUNT(*) FROM Tags
    • 每个标签仅保存一次 ,搜索标签即可轻松建立索引
    • 计算 每个用户 使用某个标签的 次数-例如:

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看