SQL表性能问题(多对多)

时间:2013-12-25 09:10:13

标签: sql database performance

我想知道每个学生选择的课程 假设我们有两个表:学生课程


-----student-----
| ID | name | my_lessons | | 1 | John | 1;3;6 | | 2 | Jack | 4;5;6 | | . | . | . | | . | . | . | | n | . | . |

----lesson------
| lesson_ID | lesson_name | | 1 | English | | 2 | Math | | . | . | | . | . | | m | . |

所以SQL命令是:


$list = student's my_lessons
$result = mysql_query("SELECT * FROM `lesson` WHERE `lesson_ID` IN ($list)");

但是,如果学生/课程数量很大,其表现会很糟糕。 这个案例有更好的桌面设计吗?

1 个答案:

答案 0 :(得分:1)

你有多对多的关系(每个学生都可以上一些课,一些学生可以上课)

所以使用另一个表来链接它们。你有学生表

| student_ID | name |

和课程表

| lesson_ID | lesson_name |

和一个注册表(每行显示一名学生上课)

| student_ID | lesson_ID |

现在,您可以找到ID = x的学生的课程,如下所示:

Select lesson_name
from lesson,register
where lesson.lesson_id=register.lesson_id and student_id=x