mysql 关注 表设计_mysql - 新浪微博中的关注功能是如何设计表结构的?

问 题

新浪微博中,假如a关注了200个用户,300个用户关注了a,点解的时候会看到所有关注a或者a关注的用户,这种表结构是如何实现的?

解决方案

个人简单猜测,如有雷同,纯属巧合!有错误请指正!

user_relation - 用户关系表

user_id - 用户ID

follower_id - 被关注者用户ID

relation_type - 关系类型,1=关注 2=粉丝

业务逻辑处理

1 用户A关注了用户B

插入两条记录

insert user_relation(user_id,follower_id,relation_type) values(a_id,b_id,1);//增加一个关注的人

insert user_relation(user_id,follower_id,relation_type) values(b_id,a_id,2);//增加一个粉丝

2 查用户A关注的所有用户

select * from user_relation where user_id=a_id and relation_type=1

3 查用户A有多少粉丝

select * from user_relation where user_id=a_id and relation_type=2

4,5等等逻辑以此类推。。。。

设计理由

考虑到扩展性,数据量大了必定分库分表,一般按user_id取模等等算法拆分,所以没办法用follower_id查询出所有关注我的人(粉丝)。

当然如果不要扩展性或数据很小,那两个字段正着查所有我关注的人,反着查所有的关注我的人(粉丝)

992918a26da18f46479e2b9a26bece7f.png

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值