这里是数据库设计问题。
假设我们有一个网络应用程序或使用主题标签来记录 20-40 个单词的笔记的应用程序。存储用户标签的最佳方式是什么。
例如,如果用户输入。 “我喜欢在#sizzler 吃#lunch”
我们会将句子存储为文本,我们可以将主题标签存储为 JSON、逗号分隔列表或其他一些机制。
另外值得指出的是,标签需要是可搜索的,比如有多少人在hash tag lunch等。
就此事提出建议会很好,当谈到在 mysql 中存储可变大小的输入时,我总是有点难过。每个笔记可以有无限多个主题标签,存储它们的最佳方式是什么?
最佳答案
我建议在消息和标签之间采用典型的多对多关系。
这意味着您需要 3 个表。
消息
(列Id
、UserId
和Content
)标签
(列Id
和TagName
)TagMessageRelations
(列:MessageId
和TagId
- 通过指向Messages 的外键在消息和标签之间建立联系.Id
/Tags.Id
)
这样您就不会多次存储标签,而只会创建与消息的新关系(当然,如果该标签已经存在于标签表中)。
这样可以
- 轻松计算标签的数量(
SELECT COUNT(*) FROM Tags
) - 每个标签只保存一次,搜索标签可以轻松索引
- 或计算每个用户使用某个标签的次数 - 例如:
选择
数数(*)
来自标签
INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId
INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id
GROUP BY Messages.UserId
关于mysql - 使用 "hashtags"的应用程序的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799753/