「用户标签」在数据库设计时应该如何存储?
业务逻辑是这样的: 用户可以给自己贴标签,以供他人搜索。比如我给自己贴上“90后 程序员”的标签,那么别人就能通过“90后”或者“程序员”搜到我。 用户最多可以给自己贴10个标签。标签可以随时更新。 方案一:在User表里设置一个tags字段,里面存的是“90后,程序员”这样的字符串,用逗号分隔不同标签。缺点:不便于搜索,建立索引的话会很低效,因为“90后,程序员”和“程序员,90后”被认为是不同的。 方案二:在User表里设置10个tag_n字段(n=1,2,3...10),每个字段存一个标签。缺点:不利于Update。比如我现在把我的标签改为“程序员,90后,帅哥”,那么我要逐个检查“程序员”、“90后”和“帅哥”是否已存在,不存在才能添加。 不知道有什么好方法。 我在问问题的时候想到可以先给标签排序在存到数据库里。 注1:存tag的id而不是存tag的内容这一点已经采用了,我在问题里直接用tag内容是为了表述方面。 注2:我使用的是关系型数据库。 解决方案1:多对多 这应该是一个多对多的问题。 对于小型系统,我的设计方案通常是这样 user表 ===================== userId userName ===================== 1 test 2 test2 ... tag表 ===================== tagId