我有这个问题:
我有一个“学校”数据库,需要使用Subject表引用Teachers表。
教师将指导多个科目。这就是问题所在。
教师表:
等
主题表:
我总是在外键上使用1个值。例如:
SELECT * FROM Teachers WHERE id_Subject = 1
但现在我真的不知道自己要做什么。
答案 0 :(得分:0)
你说“教师会指导不止一个主题。”据我所知,老师可以指导多个科目。那么,教师拥有id_Subject
是错误的,因为这意味着教师只能教一门科目。
如果您使主题包含id_Teacher
,则每个主题将引用教师,因此可以使多个主题具有相同的教师。这就像说一位老师会教授多个科目一样。
另一方面,如果你不仅需要一个教授多个科目的教师,而且还需要一个由多个教师教授的科目(多对多的关系),那么显然,你不能放{{1在主题中,因为这迫使一个主题仅由一位教师教授。在这种情况下,您的教师行既不能拥有id_Subject,也不能让您的主题行拥有id_Teacher。相反,你需要一个额外的表,比如说“TeachersSubjects”,其中每一行都有id_Teacher
和id_Subject
,基本上列出了教师和科目的所有可能组合。
答案 1 :(得分:0)
我认为这是多对多关系,教师可以有多个科目,科目可以有多个教师,你需要额外的表格。
答案 2 :(得分:0)
我认为你想要描述的内容被称为“多对多”的关系。它需要一个中间表来连接实体表,在许多情况下,中间表本身就成了一个商业实体。
考虑例如:
Teachers
----------
ID
Name
etc.
Subjects
----------
ID
Name
etc.
TeacherSubjects
----------
ID
TeacherID (FK to Teachers)
SubjectID (FK to Subjects)
Teachers
和Subjects
之间的关系本身就成了潜在存储数据的地方。考虑主题领域(学校),TeacherSubjects
表听起来好像是Classes
表等待发生。您可以在哪里放置有关类的给定实例的信息,该类是具有教师和主题的业务实体。