我有这个问题:倍数外键1列
我有一个“学校”数据库,需要引用与主题表的教师表。
老师会指导多个科目。这是问题。
教师表:
- id_Teacher < - PK
- id_Subject
- id_Course
- 名
- 姓
- 解决
等
主题表:
- id_Subject < - PK
- 名
我ALW ays在外键上使用了1个值。例如:
SELECT * FROM Teachers WHERE id_Subject = 1
但现在我不知道我必须做什么。
我有这个问题:倍数外键1列
我有一个“学校”数据库,需要引用与主题表的教师表。
老师会指导多个科目。这是问题。
教师表:
等
主题表:
我ALW ays在外键上使用了1个值。例如:
SELECT * FROM Teachers WHERE id_Subject = 1
但现在我不知道我必须做什么。
我想你想描述的是所谓的“多对多”关系。它需要一个中间表来连接实体表,在许多情况下,中间表本身就是一个商业实体。
考虑例如:
Teachers
----------
ID
Name
etc.
Subjects
----------
ID
Name
etc.
TeacherSubjects
----------
ID
TeacherID (FK to Teachers)
SubjectID (FK to Subjects)
Teachers
的和Subjects
本身之间的关系变得潜在存储数据的地方。考虑到学科领域(学校),TeacherSubjects
表听起来像可能是Classes
表等待发生。您可以在哪里放置关于某个班级的实例的信息,该班级是具有教师和主题的商业实体。
你说“教师将指导多个科目。”从这我明白,老师可以指导多个科目。然后,老师有一个id_Subject
是错误的,因为那意味着老师只能教一个科目。
如果您让主题包含id_Teacher
,那么每个主题都会引用一位教师,因此可以让多个主题具有相同的教师。这与说单一位老师会教授多个科目相同。
另一方面,如果您不仅需要一位教师教授多个科目,还需要多位教师教授一个科目(多对多的关系),那么很清楚,您不能将id_Teacher
主题,因为这会迫使一个主题由一位老师教授。在这种情况下,您的教师行既不能有id_Subject,也不能有您的主题行有id_Teacher。相反,你需要一个额外的表,比如说“TeachersSubjects”,其中每行将有一个id_Subject
和一个id_Teacher
,基本上列出了所有可能的教师和科目组合。
我认为这是多对多的关系,教师可以有多个科目,而科目可以有多个教师,您需要额外的表格。
老师可以有很多科目。一个学科可以有很多老师吗? – David
首先你需要一个关系表“老师指导主题”指示类别(teacher_id,subject_id) – Serg
你可以尝试IN子句... select * from teacher where id_subject in(select id_subject from SubjectTable)。 – Missy