我有两个表:students
和courses
,假设每个学生可以参加多个课程,并且每个课程可以有多个学生。
[Table Students] [Table Courses]
id(PK) id(PK)
name name
age duration
etc... etc...
我想要做的是将两个表关联到另一个表中,例如studying
,我将在其中存储每个学生所做的课程。像这样:
[Table studying]
idStudent
idCourse
我推断的内容
我认为idStudent
和idCourse
应该是外键,因为它分别存储在students
和courses
中的信息具有唯一的主键并且尊重一致性的数据库。没有学生和课程的信息,或者没有其中一个信息,它就不存在关系。
我也知道有些表有两个主键,允许表中的主键可以存在多个重复值,但不能同时存在两个主键。
我的问题
idStudent
,idCourse
)。必须是主键还是外键?studying
是否应该有另一个带有ID的列?P.S:我不需要sql语句,我只是需要帮助来澄清我的困惑。
提前致谢!
答案 0 :(得分:0)
如果您愿意,可以将它们作为学习桌上的主键。但这是不必要的,因为关系(学习表的作用)是多对多,这种表不需要主键。你需要知道,当你把它们变成pk(一对学生ID和课程id)时,这意味着theee可能只有一对,这相当于约束唯一 - 学生只能选择一门课程。在将来你可能想添加到这个表start_date,这种pk可能是一个问题,你需要修改它们。
答案 1 :(得分:0)
您的扣除是正确的。 实际上,你应该有一个由(idStudent,idCourse)列组成的复合主键,因为这个元组是表中行的标识符,你不需要额外的ID列(当然,你也可以采用这种方法添加作为主键的其他ID列,但如果一个学生只能分配一个课程,则不需要它一次)
为了尊重完整性,两列(单独)应该是外键 - idStudent应该引用Students表的id列,idCourse应该引用Courses表的id列。