我有這個問題:倍數外鍵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