「用户标签」在数据库设计时应该如何存储?

业务逻辑是这样的: 用户可以给自己贴标签,以供他人搜索。比如我给自己贴上“90后 程序员”的标签,那么别人就能通过“90后”或者“程序员”搜到我。 用…
关注者
282
被浏览
185,757

14 个回答

这应该是一个多对多的问题。

对于小型系统,我的设计方案通常是这样

user表

=====================

userId userName

=====================

1 test

2 test2

...

tag表

=====================

tagId tagName

=====================

1 tag

2 tag2

...

relation表

=====================

relationId userId tagId

=====================

1 1 1

2 1 2

...

insert update 之类的应该都很简单,不是问题

查询可能有点麻烦,需要用到联合查询

语句一般是这样

SELECT userId, userName FROM user u

INNER JOIN relation r ON u.userId=r.userId

WHERE r.tagId = 1

这样就查出了所有tagId为1的用户。

索引对这个方案可能效果不是很明显,数据量小的时候,索引的提升不明显,数据量大的时候,索引对联合查询起不到什么提升作用。

其实你的方案1不失为一种可行方案,特别是数据量惊人的情况,你可以采用方案1配合NoSQL的方式。

标签库??楼上推荐的都是什么啊。。Bitmap算法啊=。=