You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据库设计:如何让一个表字段关联另一张表的多条记录

用户收藏教授功能的数据库实现方案

首选方案:新增多对多关联表(符合关系型数据库设计规范)

用户和教授的收藏关系是典型的多对多关系,不需要在users表新增saved_professors字段,新增一张user_saved_professors关联表即可,表结构参考:

  • id:主键,选择INT/BIGINT自增类型即可
  • user_id:外键,关联users表主键,非空
  • professor_id:外键,关联professors表主键,非空
  • saved_at:可选扩展字段,DATETIME/TIMESTAMP类型,记录用户收藏的时间戳

该方案的核心优势:

  • 所有操作都可以用原生SQL实现:查询用户收藏的教授列表、判断用户是否收藏指定教授、统计教授的收藏量、删除单个收藏记录都不需要做额外的字符串处理
  • 支持扩展关联属性:后续如果要加收藏分组、收藏置顶这类需求,直接在关联表加字段即可,迭代成本极低
  • 数据一致性有保障:可以通过外键约束避免存储不存在的用户/教授ID,删除关联的主数据时可以级联清理收藏记录,不会产生脏数据
  • 性能表现优异:给user_id、professor_id加普通索引后,百万级数据量下的关联查询也不会有性能瓶颈

备选方案:单字段存储实现(仅适合特殊场景)

如果你的业务场景确实要求把收藏列表存在users表的单个字段里,不要用VARCHAR/TEXT存储拼接的ID字符串,可以根据你用的数据库类型选择更合适的格式:

  • 如果你用PostgreSQL:直接选择INT[]数组类型存储教授ID,PostgreSQL原生支持数组操作函数,还可以给数组字段建GIN索引提升查询性能
  • 如果你用MySQL 8.0.17及以上版本:选择JSON类型存储ID数组,支持原生JSON查询函数,还可以给数组元素创建多值索引,查询效率远高于字符串切割
  • 如果你用更低版本的MySQL:优先还是选关联表方案,退而求其次选JSON类型,也比分隔字符串的可维护性高很多

内容的提问来源于stack exchange,提问作者Jacob Hornbeck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:39:03