社交应用中常有 关注/粉丝/互关:
这类关系:是多对多关系,数据库表结构该是怎么设计的呢?
问:
这块业务功能怎么实现,有sf小伙伴能提下实现思路的没? 谢过 ^_^
关注表
字段 | 类型 | 备注 |
---|---|---|
user_id | int | 用户id |
follow_id | int | 关注id |
create_at | int | 创建时间 |
粉丝表
字段 | 类型 | 备注 |
---|---|---|
user_id | int | 用户id |
fans_id | int | 粉丝id |
create_at | int | 创建时间 |
一般这么处理表
###fans_relationship
Column | Type | Comment |
---|---|---|
id | int | 可有可无 |
uid | int | pk,用户id |
fans\_uid | int | pk,粉丝id |
status | int | 状态:0 取消关注,1 正在关注, 2 相互关注 |
用户A关注用户B,首先查询之前是否已经取消的记录,判断是需要插入数据还是修改之前的数据,还需要判断用户B是否关注了用户A
- 是 : 本记录 status = 2,同时修改
用户B关注用户A
记录的status=2 - 否 : 本记录 status = 1
- 是 : 本记录 status = 2,同时修改
用户A取消关注用户B,直接改状态就ok了,同样需要判断用户B是否关注了用户A
- 是 : 本记录 status = 0 ,同时修改
用户B关注用户A
的记录status=1 - 否 : 本记录 status = 0
- 是 : 本记录 status = 0 ,同时修改
- 查询
-- 查询uid=1的用户粉丝列表及是否互粉
select fans_uid, status from fans_relationship where uid = 1 and status > 0
-- 查询uid=1的用户关注了谁及是否互粉
select uid, status from fans_relationship where fans_uid = 1 and status > 0
###up,up,up
###数据库怎么设计这一块楼上已经说了, 说说个人经验,实现这个功能.
碰到这种业务,一般采用 Redis 来实现的:
使用redis实现互粉功能
这个可以参考一下