多对多桥表CourseSubjects添加group id的存储方案咨询
方案选择建议
两种方案各有适用场景,你可以根据自身业务需求直接选择:
方案1:直接将group_id字段添加到CourseSubjects桥表
适用场景:
- 仅需要为单条
course_id+subject_id的关联关系打group分类标签,不存在多条关联共用同一个group信息的需求 - 不需要存储group相关的额外属性(比如分组名称、创建时间、分组描述、分组负责人等)
- 没有后续针对group维度做功能扩展的计划
优势:
- 表结构最简单,无冗余设计
- 查询时不需要做多表关联,直接读取桥表即可拿到group id,性能最优
方案2:单独新建分组表存储group信息,桥表仅存关联的group_id外键
你需要额外新增一张分组表,结构参考:
CourseSubjectGroup { id: int # 对应桥表的group_id外键 group_name: string create_time: datetime # 其他你需要的group相关属性 }
适用场景:
- 存在多条
CourseSubjects关联记录对应同一个分组的情况,且分组的属性可能会统一修改(比如修改分组名称,单独建表只需要更新1次分组表记录,不需要批量更新桥表) - 需要存储group本身的各类附属信息
- 后续可能会有针对group的功能扩展,比如给分组绑定权限、设置分组生效规则等
优势:
- 符合数据库三范式设计,无数据冗余,更新group属性成本极低
- 扩展性极强,后续加group相关的字段只需要改分组表,不需要动桥表结构
最终决策建议:如果当前没有存储group附属信息的需求,也没有明确的扩展计划,优先选方案1,不要做过度设计。如果有上面提到的扩展需求,直接选方案2即可。
内容的提问来源于stack exchange,提问作者Rohin1212
相关产品推荐
相关产品推荐

