0

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

像这样的东西:

讲师 - 课程 - “1,2”

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

课程 - 1 - “生物”

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

4

3 回答 3

4

实地课程代表讲师或学生所学课程的逗号分隔列表

包含 a 的字段csv list违反了第一范式 (1NF),并且存在各种问题,包括性能问题。将此字段分解为单独的连接表{StudentID, CourseID}是您应该做的。

于 2012-05-14T16:47:48.030 回答
4

创建两个新表:

student_courses(int student_id, int course_id)
lecturer_courses(int lecturer_id, int course_id)

现在,您可以为学生正在学习的每门课程和讲师正在教授的每门课程创建单独的行,假设您希望跟踪课程的交付与学习课程分开。然后,当您想要进行与课程相关的分析时,您可以使用课程 ID 针对这些表编写查询。

于 2012-05-14T16:53:32.857 回答
2

不要存储像“1,2,3”这样的文本,而是存储几行:

  • 在名为“students”的表中,每个学生对应 1 行
  • 名为“课程”的表中的每门课程都有 1 行

然后创建另一个名为“student_in_course”的表,每个组合都有 1 行。

然后对“lecturer_in_course”做同样的事情。

于 2012-05-14T16:48:41.503 回答