如何在SQL中设计支持Users与Brands四类互关场景的关注关系Schema
多主体互关场景的数据库表结构调整方案
核心思路是在原有关注表基础上新增主体类型标识字段,无需修改现有的Users、Brands业务表结构,即可覆盖所有4种互关场景。
调整后的关注表字段设计
follow_id:自增主键,作为关注关系的唯一标识follower_type:关注者主体类型,枚举值可选user/brand,标记当前关注发起方是用户还是品牌;如果数据库对枚举类型支持度低,可替换为tinyint类型,约定1=用户、2=品牌,查询性能更优follower_id:关注者的主键ID,和follower_type配合关联对应业务表:类型为user时对应用户表user_id,类型为brand时对应品牌表brand_idfollowed_type:被关注者主体类型,取值规则和follower_type一致followed_id:被关注者的主键ID,和followed_type配合关联对应业务表created_at:关注时间,可选字段,用于关注列表排序、时效性查询等场景
可选优化:加唯一索引避免重复关注
可以创建联合唯一索引防止同一主体重复关注同一个对象:
UNIQUE KEY uniq_follow_relation (follower_type, follower_id, followed_type, followed_id)
常见场景查询示例
- 查询用户ID=1001的所有关注列表
SELECT followed_type, followed_id, created_at FROM follows WHERE follower_type = 'user' AND follower_id = 1001;
- 查询品牌ID=2001的所有粉丝列表
SELECT follower_type, follower_id, created_at FROM follows WHERE followed_type = 'brand' AND followed_id = 2001;
- 判断用户1001是否关注了品牌2001
SELECT 1 FROM follows WHERE follower_type = 'user' AND follower_id = 1001 AND followed_type = 'brand' AND followed_id = 2001 LIMIT 1;
原有用户互关数据兼容方案
旧关注表的存量数据可以直接迁移:
- 原
er_id(关注者ID)对应新表follower_id,follower_type固定填user - 原
ed_id(被关注者ID)对应新表followed_id,followed_type固定填user
原有只涉及用户互关的查询逻辑只需要新增类型过滤条件即可正常运行,不需要修改核心业务流程。
内容的提问来源于stack exchange,提问作者Ebdulmomen1
相关产品推荐
相关产品推荐

