我有一個MySQL數據庫表,它內置如下。 類別下方的數字表示該類別的「級別」,例如高,中或低,0表示不在該類別。相對MySQL數據庫
我需要建立另一個表來保存每個類的作業分配,但是我對於如何構建該表有點遺憾,特別是表示行的確切列必須是什麼,因爲每個類沒有特定的東西表示它。
我有一個MySQL數據庫表,它內置如下。 類別下方的數字表示該類別的「級別」,例如高,中或低,0表示不在該類別。相對MySQL數據庫
我需要建立另一個表來保存每個類的作業分配,但是我對於如何構建該表有點遺憾,特別是表示行的確切列必須是什麼,因爲每個類沒有特定的東西表示它。
一個適當規範化的結構將有一個單獨的課程表,每個表都有一個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)
);
表格「爲學生完成作業」做什麼?我不能完全看到它是如何定義的,如果一件事情完成了。 – 2012-08-07 19:32:29
@AlexCastro把你需要的東西放在那裏。基本上我在那裏的骨架只有一個TEXT列,用於學生作業的內容(就像提交的作業存儲在數據庫中一樣)。如果你想跟蹤的是如果/當提交任務時,只需使用'submitted_time'時間戳列。當學生轉入任務時,會添加行並設置時間戳。如果學生沒有排隊,則不會完成任務。 – 2012-08-07 19:36:02
謝謝!我還想知道如何定義這些級別?這裏的數據庫似乎只是爲這些關卡存儲一個數字。 – 2012-08-07 20:33:36
您需要規範化結構到'用戶','類'和'作業'。然後你可以有一個'users_classes'關係表和一個'users_homework'表。 – Interrobang 2012-08-07 01:18:20
用戶,班級和作業是表格嗎? – 2012-08-07 01:25:34
如果你真的不想規範化結構,你總是可以有一個'users_homework'表,列hw_id','username'和'subject'。儘管如此,這是毛病。 – Dougal 2012-08-07 01:33:33