数据库如何表达M:N关系结合python结合SQLAlchemy
在数据库中,M:N(多对多)关系通常通过**中间表(关联表、桥接表)**来实现。
1. 关系型数据库的标准做法
假设有两个实体:学生(Student)和课程(Course),一个学生可以选多门课,一门课也可以有多个学生。
表结构设计
Student(学生表):student_id(主键),nameCourse(课程表):course_id(主键),titleStudent_Course(中间表):student_id,course_id
中间表(关联表)
Student_Course 表的每一行都表示一个学生和一门课程的关联。
| student_id | course_id |
|---|---|
| 1 | 101 |
| 1 | 102 |
| 2 | 101 |
student_id外键关联Studentcourse_id外键关联Course- 通常
student_id + course_id作为联合主键
SQL 示例
CREATE TABLE Student ( student_id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE Course ( course_id INT PRIMARY KEY, title VARCHAR(50) ); CREATE TABLE Student_Course ( student_id INT, course_id INT, PRIMARY KEY (student_id, course_id), FOREIGN KEY (student_id) REFERENCES Student(student_id), FOREIGN KEY (course_id) REFERENCES Course(course_id) );
2. 查询多对多关系
查询某学生选了哪些课:
SELECT c.title FROM Course c JOIN Student_Course sc ON c.course_id = sc.course_id WHERE sc.student_id = 1;
查询某门课有哪些学生:
SELECT s.name FROM Student s JOIN Student_Course sc ON s.student_id = sc.student_id WHERE sc.course_id = 101;
3. 总结
- 多对多关系不能直接用外键实现,必须用中间表。
- 中间表的每一行就是一次“配对”。
- 这种设计适用于所有关系型数据库(MySQL、PostgreSQL、SQL Server、Oracle 等)。
漫思
浙公网安备 33010602011771号