Php 相对MySQL数据库
我有一个MySQL数据库表,其构建如下。 班级下面的数字表示班级的“级别”,如高、中、低,0表示不参加该班Php 相对MySQL数据库,php,mysql,database,Php,Mysql,Database,我有一个MySQL数据库表,其构建如下。 班级下面的数字表示班级的“级别”,如高、中、低,0表示不参加该班 我需要建立另一个表来保存每节课的家庭作业,但我有点不知道如何建立这个表,特别是指出行的确切列必须是什么,因为每节课都没有特定的内容来表示它。一个适当规范化的结构会有一个单独的课程表,给每个学生一个id,另一个表格通过包含学生id、课程id和级别将学生放入课程 CREATE TABLE students ( id INT NOT NULL PRIMARY KEY AUTO_INCREME
我需要建立另一个表来保存每节课的家庭作业,但我有点不知道如何建立这个表,特别是指出行的确切列必须是什么,因为每节课都没有特定的内容来表示它。一个适当规范化的结构会有一个单独的课程表,给每个学生一个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)
);
一个适当规范化的结构将有一个单独的课程表,为每个课程提供一个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)
);
您需要将结构规范化为
用户
、类
和家庭作业
。然后你可以有一个users\u classes
关系表和一个users\u homotation
表。用户、类和家庭作业都是表?如果你真的不想规范结构,你可以总是有一个users\u homotation
表,其中包含列hw\u id
,username
,和subject
。不过这太糟糕了。您需要将结构规范化为用户
,类
,以及家庭作业
。然后你可以有一个users\u classes
关系表和一个users\u homotation
表。用户、类和家庭作业都是表?如果你真的不想规范结构,你可以总是有一个users\u homotation
表,其中包含列hw\u id
,username
,和subject
。那太恶心了。表格“让学生完成作业”到底是做什么的?“我看不出它是如何定义某件事是否完成的。”亚历克斯·卡斯特罗把你需要的东西都放进去了。基本上,我这里的框架只有一个文本列来显示学生作业的内容(就像提交的作业存储在数据库中一样)。如果您希望跟踪的是作业是否/何时提交,只需使用submitted\u time
timestamp列即可。当学生交作业时,会添加行并设置时间戳。如果学生没有行,则表示作业未完成。谢谢!我还想知道这些级别是如何定义的?这里的数据库似乎只是为级别存储了一个数字。@AlexCastro我只是将其作为一个数字,就像您在示例中所做的一样,我没有添加关系表来定义这些数字。你可以这样做,或者只是在一个varchar列中存储“高、中、低”而不是那个数字。表“让学生完成作业”到底是做什么的?“我看不出它是如何定义某件事是否完成的。”亚历克斯·卡斯特罗把你需要的东西都放进去了。基本上,我这里的框架只有一个文本列来显示学生作业的内容(就像提交的作业存储在数据库中一样)。如果您希望跟踪的是作业是否/何时提交,只需使用submitted\u time
timestamp列即可。当学生交作业时,会添加行并设置时间戳。如果学生没有行,则表示作业未完成。谢谢!我还想知道这些级别是如何定义的?这里的数据库似乎只是为级别存储了一个数字。@AlexCastro我只是将其作为一个数字,就像您在示例中所做的一样,我没有添加关系表来定义这些数字。您可以这样做,或者只在varchar列中存储“high、middle、low”而不是该数字。