Mysql 小数据库性能之谜

Mysql 小数据库性能之谜,mysql,performance,database-design,Mysql,Performance,Database Design,我对数据库不是很有经验,但我有一个小问题。我试图创建一个数据库来存储学生和讲师正在学习的课程,所以我创建了三个表。在讲师和学生表中,现场课程表示讲师或学生所修课程的逗号分隔列表 大概是这样的: 讲师-课程-“1,2” 学生-课程-“1,2,3” 课程-1-“生物” 然而,问题是,当我想根据学生的课程显示学生列表时,我必须搜索所有学生和课程,然后再次搜索以检查csv列表是否包含指定的课程(这似乎有点多余)。有没有其他方法可以实现这个目标,比如通过关联/引用索引之类的?谢谢 现场课程代表讲师或学生所

我对数据库不是很有经验,但我有一个小问题。我试图创建一个数据库来存储学生和讲师正在学习的课程,所以我创建了三个表。在讲师和学生表中,现场课程表示讲师或学生所修课程的逗号分隔列表

大概是这样的:

讲师-课程-“1,2”

学生-课程-“1,2,3”

课程-1-“生物”

然而,问题是,当我想根据学生的课程显示学生列表时,我必须搜索所有学生和课程,然后再次搜索以检查csv列表是否包含指定的课程(这似乎有点多余)。有没有其他方法可以实现这个目标,比如通过关联/引用索引之类的?谢谢

现场课程代表讲师或学生所修课程的逗号分隔列表


包含
csv列表的字段
正在中断,并且存在各种问题,包括性能问题。将此字段拆分为一个单独的连接表
{StudentID,CourseID}

与其存储类似“1,2,3”的文本,不如存储几行:

  • 在名为“students”的表中,每个学生有一行
  • 在名为“课程”的表中,每门课程1行
然后创建另一个名为“student_in_course”的表,每个组合有一行

然后对“讲师课程”执行相同操作。

创建两个新表:

student_courses(int student_id, int course_id)
lecturer_courses(int lecturer_id, int course_id)
现在,您可以为学生正在学习的每门课程和讲师正在教授的每门课程创建单独的行,假设您希望跟踪课程的交付情况,而不是单独学习课程。然后,当您想要进行课程相关分析时,可以使用课程id对这些表编写查询