mysql 随笔

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

posted @ 2025-05-08 23:52  harrylearn66666  阅读(30)  评论(0)    收藏  举报