数据库设计问题。
假设我们有一个webapp或者使用20到40个单词备注的主题标签的东西。存储用户标签的最佳方式是什么。
例如,如果用户输入。 "I like to have #lunch at #sizzler"
我们将句子存储为文本,我们可以将主题标签存储为JSON,逗号分隔列表或其他一些机制。
还值得指出的是,标签需要可搜索,例如有多少人使用哈希标记午餐等等。
对此事的建议会很棒,在mysql中存储可变大小的输入时,我总是有点难过。每个音符可以有无限数量的标签,存储它们的最佳方式是什么?
答案 0 :(得分:38)
我建议使用消息和标签之间的典型多对多关系。
这意味着你需要3张桌子。
messages
本身的一个表格(最低要求:列ID
,UserID
和message-content
)tags
的一个表格(此处的最低要求是:列ID
和tag-name
)tagMessagesRelations
用于建立消息和标记之间的连接(通过外键messageID
和tagID
)这样你就不会多次存储一个标签,只会创建一个新的消息关系(如果那个标签已经存在于标签表中)。
然后你可以
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