比如某个人关注了20个人 在数据库中怎样设计这个表呢 每个用户都有一个关注表吗?这个表中存的都是这个用户的关注的对象 这样设计可以吗?
当然不能每个用户建一张表了,应该建一个关注表,每一项记录一个关注的关系 (关注者ID: 1 被关注者ID:2)。用到的时候联表查询就好了
主键,用户ID,关注的用户ID,关注时间
查询关注我的 SELECT * FROM t WHERE 关注的用户ID=我的用户ID 查询我关注的 SELECT * FROM t WHERE 用户ID=我的用户ID
这种数据更适合使用Redis来存储,当然为了可靠,数据最终还是要落地到数据库的。简单提供一个设计方案:
Redis
# 使用SET数组结构来存储关注的用户列表 SADD $user:follows $user1 $user2 $user3 ...
当然这只是一个思路,实际还要解决不少问题,比如:数据规模问题(如果到新浪微博这个量级,就不是简单一个Redis可以搞定的了)、用户关注关系是一个网关结构,所以实际实践起来还是比较复杂的,各种情况都要考量和测试
每个用户都设一个表应该不大行吧?或者用户设计一个字段,储存关注的用户的id?