为每个学生创建一个表格。它被认为是一种不好的做法吗?

时间:2017-04-23 11:09:02

标签: mysql database

我遇到了一个路障,我需要为学生和教师列出所有当前的课程,我有2个表,其中一个叫做学生,第二个叫做课程。我正在考虑为学生创建一个名为课程的字段,然后用逗号分隔条目,这样我就可以使用WHERE IN子句,但为每个学生创建一个表格要容易得多。

2 个答案:

答案 0 :(得分:4)

由于您有多对多映射,请考虑使用包含course_idfetch列的链接表。

答案 1 :(得分:2)

  

我正在考虑为学生创建一个名为课程的字段,然后用逗号分隔条目

糟糕的主意,你肯定不是第一个拥有它的人。

  

为每个学生创建一个表格要容易得多

更糟糕的是,你肯定不是第一个拥有它的人。

不要创建需要您从无组织的blob中解析信息的数据库结构。并且肯定不会创建数据库结构,每次数据更改时都需要更改结构

您所描述的内容StudentCourse之间的关系称为多对多关系。要实现它,您只需要一个"链接表"两个实体之间。考虑这样的事情:

Student
----------
ID (PK)
Name

Course
----------
ID (PK)
Name

这两个实体的表达足够简单。现在你只需要第三个表来连接多对多关系:

StudentCourse
----------
ID (PK)
StudentID (FK)
CourseID (FK)

有几点需要注意:

  1. 表的名称不必遵循此约定,这只是一种常见的做法。你可以随便叫它。 Enrollment可能是一个很好的名字,因为它会发展成为自己的实体。
  2. 这不需要自己的ID (PK),其主键可以是两个外键的组合(因为它的每一对在该域中也应该是唯一的)
  3. 如果它拥有的数据多于关系,那么它可以迅速成长为自己的实体。例如,如果有关于学生在课程中注册的特定信息,该课程特定于两者的组合,但不是特定于任一实体本身。某种注册号,注册日期/时间等。此表将成为其他两个实体,并且不仅仅是一个结构链接表。