关系数据库-如何设计SQL多对多关系

问题描述 投票:0回答:1

在关系数据库中进行多对多关联的正确方法是什么(我认为是)?

考虑诸如(我正在使用

sqllite
来玩):

# Store details about each teacher...
CREATE TABLE IF NOT EXISTS teacher (
    id integer PRIMARY KEY,
    ...
);

# Store details about each student...
CREATE TABLE IF NOT EXISTS student (
    id integer PRIMARY KEY,
    FOREIGN KEY (mentor_id) REFERENCES teacher (id)
    ...
);

# Store details about each available lesson...
CREATE_TABLE_IF_NOT_EXISTS lesson (
    id integer PRIMARY KEY,
    ...
);

# A lesson session is a record of a lesson having occurred (i.e. to track attendance)
CREATE TABLE IF NOT EXISTS lesson_session (
    id integer PRIMARY KEY,
    starttime DATETIME,
    endtime DATETIME,
    ...
    FOREIGN KEY (teacher_id) REFERENCES teacher (id)
);

如何在不复制大量数据的情况下将“许多”学生添加到单个

lesson_session
?我假设这是多对多关系,因为:

  • 许多学生可以参加单节课。
  • 一个学生可以参加多节课程。
sql database sqlite database-design
1个回答
1
投票

您可以有一个中间表来代表参加一堂课的学生。

student_id | lession_session_id
--------------------------------
0          | 22
1          | 22
0          | 15
0          | 35

例如,学生 0 参加了第 22、15、35 节课。 学生 1 需要 22 人。第 22 节有学生 0 和 1。

您可以稍后在相关查询时进行联接以获取学生/课程的姓名。

© www.soinside.com 2019 - 2024. All rights reserved.