数据库如何表达M:N关系结合python结合SQLAlchemy

在数据库中,M:N(多对多)关系通常通过**中间表(关联表、桥接表)**来实现。

1. 关系型数据库的标准做法

假设有两个实体:学生(Student)和课程(Course),一个学生可以选多门课,一门课也可以有多个学生。

表结构设计

  • Student(学生表):student_id(主键),name
  • Course(课程表):course_id(主键),title
  • Student_Course(中间表):student_idcourse_id

中间表(关联表)

Student_Course 表的每一行都表示一个学生和一门课程的关联。

student_idcourse_id
1 101
1 102
2 101
  • student_id 外键关联 Student
  • course_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 等)。

 

posted on 2026-03-23 21:09  漫思  阅读(33)  评论(0)    收藏  举报

导航