2017-04-23 45 views
1

我已經碰到了一個路障,我需要列出所有當前課程的學生和教師,我有2個表中的一個叫做學生,第二個叫做課程。我正在考慮爲學生創建一個名爲課程的領域,然後用逗號分隔條目,以便我可以使用WHERE IN子句,但爲每個學生創建一個表格要容易得多。爲每個學生創建一張桌子。它被認爲是一種不好的做法?

+0

是的。 「m到m」是你搜索的流行詞:D –

+0

做一個「參加」表,將學生加入課程 – Blag

+0

你爲什麼要用逗號分隔數據庫中的東西?使用更多列... – Piglet

回答

2

我想創造學生稱爲課程字段,然後用逗號

壞主意分離的條目,而你肯定不是第一個擁有它。

創建每個學生的表更容易

更糟糕的想法,你肯定不是第一個擁有它。

不要創建數據庫結構,要求您從解散的Blob中解析信息。並且絕對是不會創建數據庫結構,每次數據更改時都會要求您更改結構

你所描述的,StudentCourse之間的關係稱爲多對多關係。要實現它,你需要的只是兩個實體之間的「鏈接表」。考慮這樣的事情:

Student 
---------- 
ID (PK) 
Name 

Course 
---------- 
ID (PK) 
Name 

足夠簡單的表示這兩個實體。現在,所有你需要的是第三個表將它們連接在一個多一對多的關係:

StudentCourse 
---------- 
ID (PK) 
StudentID (FK) 
CourseID (FK) 

有幾件事情需要注意:

  1. 表的名稱並沒有跟隨這個慣例,這只是一個普遍的做法。你可以稱它爲任何你喜歡的。隨着它成長爲自己的實體,它可能是一個很好的名字。
  2. 這不是需要它自己的ID (PK),它的主鍵可能是兩個外鍵的組合(因爲它們的每一對在這個域中也應該是唯一的)。
  3. 如果它擁有更多的數據而不僅僅是關係,它可以快速成長爲自己的實體。例如,如果在一門課程中有關於學生註冊的具體信息,這些信息是特定於這兩者的組合的,但並非特定於任一實體本身。某種類型的註冊號碼,註冊日期/時間等。該表格將成爲它自己的實體以及其他兩個實體,不僅僅是一個結構鏈接表。
+0

感謝您的幫助 –

4

由於您有多對多映射,請考慮使用鏈接表,其中包含student_idcourse_id列。

+0

感謝您的幫助 –

相關問題