如何将具有两个不同主键的两个表连接到另一个表中?

时间:2016-04-08 15:36:06

标签: mysql

我有两个表:studentscourses,假设每个学生可以参加多个课程,并且每个课程可以有多个学生。

[Table Students]             [Table Courses]
id(PK)                       id(PK)
name                         name
age                          duration
etc...                       etc...

我想要做的是将两个表关联到另一个表中,例如studying,我将在其中存储每个学生所做的课程。像这样:

[Table studying]
idStudent
idCourse

我推断的内容

我认为idStudentidCourse应该是外键,因为它分别存储在studentscourses中的信息具有唯一的主键并且尊重一致性的数据库。没有学生和课程的信息,或者没有其中一个信息,它就不存在关系。

我也知道有些表有两个主键,允许表中的主键可以存在多个重复值,但不能同时存在两个主键。

我的问题

  • 这些ID(idStudentidCourse)。必须是主键还是外键?
  • studying是否应该有另一个带有ID的列?
  • 我的演绎得好吗?

P.S:我不需要sql语句,我只是需要帮助来澄清我的困惑。

提前致谢!

2 个答案:

答案 0 :(得分:0)

如果您愿意,可以将它们作为学习桌上的主键。但这是不必要的,因为关系(学习表的作用)是多对多,这种表不需要主键。你需要知道,当你把它们变成pk(一对学生ID和课程id)时,这意味着theee可能只有一对,这相当于约束唯一 - 学生只能选择一门课程。在将来你可能想添加到这个表start_date,这种pk可能是一个问题,你需要修改它们。

答案 1 :(得分:0)

您的扣除是正确的。 实际上,你应该有一个由(idStudent,idCourse)列组成的复合主键,因为这个元组是表中行的标识符,你不需要额外的ID列(当然,你也可以采用这种方法添加作为主键的其他ID列,但如果一个学生只能分配一个课程,则不需要它一次)

为了尊重完整性,两列(单独)应该是外键 - idStudent应该引用Students表的id列,idCourse应该引用Courses表的id列。