2017-09-09 5 views
0

私は3つのテーブル用のデータベースを設計しようとしています:教師、コース、学生。
- 教師は多くの生徒を持つことができ、多くのコースを教えることができます。
- 生徒は多くの教師を持ち、多くのコースを勉強することができます。
- コースは多くの教師が教えることができ、多くの学生を登録できます。
どちらの生徒がどのコースを勉強しているのかを知りたいと思っています。3つの強力なエンティティセットのデータベース設計

+1

あなたが唯一のエンティティテーブルに外部キーを持っていることを、スイッチングテーブルを使用する場合があります... –

+0

@UsagiMiyamotoうん...私もそのアプトと思った...しかし、文句を言わないことがテーブルを意味することは、あまりにもなりますしたがって、クエリのパフォーマンスが低下する可能性があります。 –

+0

[多くのヒント:多くのマッピングテーブル_](http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table) –

答えて

1
CREATE TABLE student (
    id serial PRIMARY KEY, 
    name varchar(255) NOT NULL, 
    -- other columns, constraints, etc... 
); 
CREATE TABLE teacher (
    id serial PRIMARY KEY, 
    name varchar(255) NOT NULL, 
    -- other columns, constraints, etc... 
); 
CREATE TABLE course(
    id serial PRIMARY KEY, 
    name varchar(255) NOT NULL, 
    -- other columns, constraints, etc... 
); 
CREATE TABLE student_course (
    student_id integer NOT NULL REFERENCES student(id), 
    course_id integer NOT NULL REFERENCES course(id), 
); 
CREATE TABLE teacher_course (
    teacher_id integer NOT NULL REFERENCES teacher(id), 
    course_id integer NOT NULL REFERENCES course(id), 
); 

SELECT s.id, s.name, c.id, c.name, .id, t.name 
FROM student s 
    JOIN student_course sc ON s.id = sc.student_id 
    JOIN course c ON sc.course_id = c.id 
    JOIN teacher_course tc ON c.id = tc.course.id 
    JOIN teacher t ON tc.teacher_id = t.id 
+0

ありがとう、これを試してみます:) –

+0

インデックスはどこにありますか? –

+0

@RickJamesどのようなインデックスですか? –

関連する問題