「用户标签」在数据库设计时应该如何存储?
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的方式。