1 列的多个外键

Multiples foreign key for 1 column

我有这个问题:

我有一个 "school" 数据库,需要引用主题 table 的教师 table。

老师会教授不止一门学科。这就是问题所在。

老师们table:

等等

主题 table:

我总是在外键上使用 1 个值。例如:

SELECT * FROM Teachers WHERE id_Subject = 1

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

你说"Teachers will instruct more than one subject."由此我了解到一个老师可能会教授多个科目。那么,一个老师有一个id_Subject是错误的,因为那意味着一个老师只能教一门学科。

如果您让科目包含 id_Teacher,那么每个科目都会指代一位老师,因此可以让多个科目拥有同一位老师。这等于说一个老师会教多个科目。

另一方面,如果您不仅需要一位老师教授多门学科,而且还需要多位老师教授一门学科(多对多关系),那么很明显,您不能将 id_Teacher 在科目中,因为这会强制一个科目只能由一位老师教授。在这种情况下,您的教师行不能有 id_Subject,您的主题行也不能有 id_Teacher。相反,您将需要一个额外的 table,比如 "TeachersSubjects",其中每一行都有一个 id_Subject 和一个 id_Teacher,基本上列出所有可能的教师和科目组合。

我认为是多对多的关系,teacher可以有多个subject,subject可以有多个teacher,需要额外的table.

我认为您要描述的是一种 "many to many" 关系。它需要一个中介 table 来连接实体 table,在许多情况下,中介 table 本身就成为一个商业实体。

考虑例如:

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

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

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

TeachersSubjects 本身之间的关系成为潜在存储数据的地方。考虑学科领域(一所学校),TeacherSubjects table 听起来像是 Classes table 等待发生。您可以在哪里放置有关 class 的给定实例的信息,这是一个具有教师和主题的业务实体。