mysql 随笔
1、多对多的表结构使用 关联表来实现
只有多对多关系需要关联表,一对多和多对一通过外键即可实现。
原因:
数据结构限制:如果直接在一个表中存储多对多关系(例如在学生表中存储多个课程ID),会导致以下问题:
数据冗余:同一学生选多门课程时,课程ID需要重复存储。
更新异常:修改课程信息时,需要同步修改多处数据。
删除异常:删除一门课程时,需要清理所有相关学生的记录。
无法满足范式要求:违反第一范式(1NF),因为字段中存储了多个值(如逗号分隔的列表)。
解决方案:
关联表的作用:将多对多关系拆分为两个一对多关系。
示例:学生(students)和课程(courses)的多对多关系,通过关联表 enrollments 实现。
结构:关联表包含两个外键(student_id 和 course_id),分别指向原表的主键。
实现效果:
每个学生与课程的组合对应一条关联表记录。
避免冗余,且能灵活扩展(例如添加选修时间、成绩等字段)。
2. 一对多关系(One-to-Many)不需要关联表
原因:
单向引用:一对多关系中,“多”的一方天然可以通过外键指向“一”的主键。
示例:部门(departments)和员工(employees)的关系,一个部门有多个员工,但一个员工只属于一个部门。
实现:在员工表中添加 department_id 字段作为外键,指向部门表的主键。

浙公网安备 33010602011771号