2012-03-30 17 views
1

私は学生を扱うデータベースを持っています。だから私はテーブルの学生とクラスがあります。今、すべての生徒は、必要な数のクラスに行くことができます。私はこれをMySQLデータベーススキーマでどのようにモデル化しますか?MySQLのデザインは1対多ですか?

学生テーブル:

student_id 
student_name 
student_age 
... 

クラステーブル:

class_id 
class_name 
class_profesor 
... 

基本的に私は一人の学生は、Sのように多くのクラスのためにhim-自身を登録することができ、テーブルを設計する方法がわかりません彼は望んでいる?

このために別のテーブルを作成する必要がありますか?
これは1対多の関係ですか?

答えて

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

student_idとclass_idのみを格納する 'Goes_to'テーブルを1つ以上保持することができます。これにより、データを正規化し、必要に応じてさまざまな種類のクエリを記述することができます。

0

、これは多くの関係に多くのです。バーニーが説明したことに加えて、例えば、そのクラスの学生の平均グレードや、彼がそのクラスに行っていない回数など、「class_student」テーブルに余分なフィールドを追加することができます。

関連する問題