2016-08-23 81 views
0

我有这个问题:倍数外键1列

我有一个“学校”数据库,需要引用与主题表的教师表。

老师会指导多个科目。这是问题。

教师表:

  • id_Teacher < - PK
  • id_Subject
  • id_Course
  • 解决

主题表:

  • id_Subject < - PK

我ALW ays在外键上使用了1个值。例如:

SELECT * FROM Teachers WHERE id_Subject = 1 

但现在我不知道我必须做什么。

+1

老师可以有很多科目。一个学科可以有很多老师吗? – David

+0

首先你需要一个关系表“老师指导主题”指示类别(teacher_id,subject_id) – Serg

+0

你可以尝试IN子句... select * from teacher where id_subject in(select id_subject from SubjectTable)。 – Missy

回答

0

我想你想描述的是所谓的“多对多”关系。它需要一个中间表来连接实体表,在许多情况下,中间表本身就是一个商业实体。

考虑例如:

Teachers 
---------- 
ID 
Name 
etc. 

Subjects 
---------- 
ID 
Name 
etc. 

TeacherSubjects 
---------- 
ID 
TeacherID (FK to Teachers) 
SubjectID (FK to Subjects) 

Teachers的和Subjects本身之间的关系变得潜在存储数据的地方。考虑到学科领域(学校),TeacherSubjects表听起来像可能是Classes表等待发生。您可以在哪里放置关于某个班级的实例的信息,该班级是具有教师和主题的商业实体。

0

你说“教师将指导多个科目。”从这我明白,老师可以指导多个科目。然后,老师有一个id_Subject是错误的,因为那意味着老师只能教一个科目。

如果您让主题包含id_Teacher,那么每个主题都会引用一位教师,因此可以让多个主题具有相同的教师。这与说单一位老师会教授多个科目相同。

另一方面,如果您不仅需要一位教师教授多个科目,还需要多位教师教授一个科目(多对多的关系),那么很清楚,您不能将id_Teacher主题,因为这会迫使一个主题由一位老师教授。在这种情况下,您的教师行既不能有id_Subject,也不能有您的主题行有id_Teacher。相反,你需要一个额外的表,比如说“TeachersSubjects”,其中每行将有一个id_Subject和一个id_Teacher,基本上列出了所有可能的教师和科目组合。

0

我认为这是多对多的关系,教师可以有多个科目,而科目可以有多个教师,您需要额外的表格。