次のように構築されたMySQLデータベーステーブルがあります。
クラスの下の数字は、高、中、低などのクラスの「レベル」を示し、0はそのクラスに参加しません。
各クラスの宿題の割り当てを保存するために別のテーブルを作成する必要がありますが、各クラスには行がないため、そのテーブルを作成する方法、具体的には行の正確な列を示す方法について少し迷っています。それを示す特定の何か。
適切に正規化された構造には、コースごとにIDを与える個別のテーブルと、学生ID、コースID、およびレベルを含めることによって学生をコースに配置する別のテーブルがあります。
CREATE TABLE students (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(64) NOT NULL,
password VARCHAR(64),
email VARCHAR(...)
UNIQUE KEY (username)
);
CREATE TABLE courses (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(64) NOT NULL
);
/* If a record doesn't exist for a course and student,
the student isn't enrolled in that course. Otherwise,
the level is defined here */
CREATE TABLE enrollments (
id INT NOT NULL PRIMARY KEY,
student_id INT NOT NULL,
course_id INT NOT NULL,
level INT NOT NULL,
/* Each student may be enrolled only once per course */
UNIQUE KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students (id),
FOREIGN KEY (course_id) REFERENCES courses (id)
);
最後に、各コースで割り当てられた割り当てのテーブルを作成できます。
CREATE TABLE assignments (
id INT NOT NULL PRIMARY KEY,
course_id INT NOT NULL,
description TEXT
/*... other columns related to the assignment as necessary*/
);
また、学生が必要に応じて課題を完了するために:
CREATE TABLE student_assignments (
student_id INT NOT NULL,
assignment_id INT NOT NULL,
assignment_body TEXT, /* or whatever... */
/* Or to track when completed */
submitted_timestamp TIMESTAMP,
PRIMARY KEY (student_id, assignment_id),
FOREIGN KEY (assignment_id) REFERENCES assignments (id),
FOREIGN KEY (student_id) REFERENCES students (id)
);