1 列的多个外键
Multiples foreign key for 1 column
我有这个问题:
我有一个 "school" 数据库,需要引用主题 table 的教师 table。
老师会教授不止一门学科。这就是问题所在。
老师们table:
- id_Teacher <- PK
- id_Subject
- id_Course
- 名字
- 姓氏
- 地址
等等
主题 table:
- id_Subject <- PK
- 名字
我总是在外键上使用 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)
Teachers
和 Subjects
本身之间的关系成为潜在存储数据的地方。考虑学科领域(一所学校),TeacherSubjects
table 听起来像是 Classes
table 等待发生。您可以在哪里放置有关 class 的给定实例的信息,这是一个具有教师和主题的业务实体。
我有这个问题:
我有一个 "school" 数据库,需要引用主题 table 的教师 table。
老师会教授不止一门学科。这就是问题所在。
老师们table:
- id_Teacher <- PK
- id_Subject
- id_Course
- 名字
- 姓氏
- 地址
等等
主题 table:
- id_Subject <- PK
- 名字
我总是在外键上使用 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)
Teachers
和 Subjects
本身之间的关系成为潜在存储数据的地方。考虑学科领域(一所学校),TeacherSubjects
table 听起来像是 Classes
table 等待发生。您可以在哪里放置有关 class 的给定实例的信息,这是一个具有教师和主题的业务实体。