2017-09-09 122 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什麼索引? –