2012-03-30 37 views
1

我有一個與學生打交道的數據庫。所以我有桌子學生和課程。現在每個學生都可以去他/她想要的班級。我將如何在MySQL數據庫模式中對此進行建模?MySQL設計一對多?

學生表:

student_id 
student_name 
student_age 
... 

課程表:

class_id 
class_name 
class_profesor 
... 

基本上我不知道如何設計一個表,其中一個學生可以註冊他或她自己儘可能多的參加爲s /他要?

我應該爲此另做一張桌子嗎?
這是一個一對多的關係嗎?

回答

3

你需要一個多一對多或映射表,例如:

class_student 
------------- 
class_id 
student_id 

此表的主鍵應該是:(class_id, student_id)
上創建索引:
        (class_id, student_id),並且
        (student_id, class_id)
this other SO question and answers處取得更多細節。


一旦你得到了設置,您可以查詢參保給定類:

SELECT c.class_name, s.student_name, ... 
FROM class_student cs 
     LEFT JOIN class c ON c.class_id = cs.class_id 
     LEFT JOIN student s ON s.student_id = cs.student_id 
WHERE cs.class_id = '<some_class_id_here>' 
0

您可以再維護一個'Goes_to'表,它將只存儲student_id和class_id。這將規範化您的數據,以及您可以根據您的要求編寫不同類型的查詢。

0

同意伯尼,這是一個多對多的關係。除了伯尼解釋的之外,您還可以在'class_student'表中添加額外的字段,例如學生在該班上的平均成績,或者他沒有去過那個班的次數。