用户关注表的设计
二、基础表结构设计
CREATE TABLE user_follow (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',follower_id BIGINT UNSIGNED NOT NULL COMMENT '粉丝ID(关注者)',followee_id BIGINT UNSIGNED NOT NULL COMMENT '被关注者ID',create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '关注时间',update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',UNIQUE KEY uk_follower_followee (follower_id, followee_id),KEY idx_followee (followee_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户关注表';
✅ 三、字段说明
字段名 | 类型 | 含义说明 |
---|---|---|
id | BIGINT UNSIGNED | 主键,唯一标识每一条关注记录 |
follower_id | BIGINT UNSIGNED | 关注者 ID(粉丝) |
followee_id | BIGINT UNSIGNED | 被关注者 ID |
create_time | DATETIME | 关注时间,默认当前时间 |
update_time | DATETIME | 最后更新时间,自动更新 |
✅ 四、索引设计说明
-
联合唯一索引
uk_follower_followee
- 防止重复关注:一个用户不能多次关注同一个用户。
- 用于快速查询某用户是否已关注他人。
-
单列索引
idx_followee
- 用于加速查询某个用户的粉丝列表(按
followee_id
查询)。
- 用于加速查询某个用户的粉丝列表(按
📌 如果你经常需要查“用户 A 关注了哪些人”,也可以添加一个
idx_follower(follower_id)
索引。
自连接查询互相关注
- 可通过两次查询或自连接判断是否互粉:
SELECT a.follower_id, b.follower_id IS NOT NULL AS is_mutual
FROM user_follow a
LEFT JOIN user_follow b
ON a.follower_id = b.followee_id AND a.followee_id = b.follower_id
WHERE a.follower_id = 1001;
✅ 七、可选扩展字段(视业务而定)
字段名 | 类型 | 含义说明 |
---|---|---|
remark | VARCHAR | 给关注对象添加备注名 |
group_id | INT | 所属关注分组 ID(如“好友”、“同事”) |
is_blocked | TINYINT | 是否拉黑(屏蔽通知) |
notification_on | TINYINT | 是否接收该用户的动态推送 |