2016-08-23 79 views
0

我有這個問題:倍數外鍵1列

我有一個「學校」數據庫,需要引用與主題表的教師表。

老師會指導多個科目。這是問題。

教師表:

  • id_Teacher < - PK
  • id_Subject
  • id_Course
  • 解決

主題表:

  • id_Subject < - PK

我ALW ays在外鍵上使用了1個值。例如:

SELECT * FROM Teachers WHERE id_Subject = 1 

但現在我不知道我必須做什麼。

+1

老師可以有很多科目。一個學科可以有很多老師嗎? – David

+0

首先你需要一個關係表「老師指導主題」指示類別(teacher_id,subject_id) – Serg

+0

你可以嘗試IN子句... select * from teacher where id_subject in(select id_subject from SubjectTable)。 – Missy

回答

0

我想你想描述的是所謂的「多對多」關係。它需要一箇中間表來連接實體表,在許多情況下,中間表本身就是一個商業實體。

考慮例如:

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

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

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

Teachers的和Subjects本身之間的關係變得潛在存儲數據的地方。考慮到學科領域(學校),TeacherSubjects表聽起來像可能是Classes表等待發生。您可以在哪裏放置關於某個班級的實例的信息,該班級是具有教師和主題的商業實體。

0

你說「教師將指導多個科目。」從這我明白,老師可以指導多個科目。然後,老師有一個id_Subject是錯誤的,因爲那意味着老師只能教一個科目。

如果您讓主題包含id_Teacher,那麼每個主題都會引用一位教師,因此可以讓多個主題具有相同的教師。這與說單一位老師會教授多個科目相同。

另一方面,如果您不僅需要一位教師教授多個科目,還需要多位教師教授一個科目(多對多的關係),那麼很清楚,您不能將id_Teacher主題,因爲這會迫使一個主題由一位老師教授。在這種情況下,您的教師行既不能有id_Subject,也不能有您的主題行有id_Teacher。相反,你需要一個額外的表,比如說「TeachersSubjects」,其中每行將有一個id_Subject和一個id_Teacher,基本上列出了所有可能的教師和科目組合。

0

我認爲這是多對多的關係,教師可以有多個科目,而科目可以有多個教師,您需要額外的表格。