我正在尝试创建一个数据库来存储每个家庭作业的学生成绩,我希望能够存储成绩以及学生获得特定成绩的次数,例如学生获得了A+ 30次
,每个学生,以及学生获得了多少成绩。以及一个成绩的分值是多少,例如 A 值 4.3
。
所以我想知道构建 MySQL 数据库的最佳方法是什么,我需要添加什么,需要删除什么,以及如何存储像 4.3
这样的数字。
到目前为止我的数据库
CREATE TABLE grades (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
grade INT UNSIGNED NOT NULL,
student_work_id INT UNSIGNED NOT NULL,
student_id INT UNSIGNED NOT NULL,
date_created DATETIME NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE work (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
student_id INT UNSIGNED NOT NULL,
title TEXT NOT NULL,
content LONGTEXT NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS student (
id int(8) NOT NULL auto_increment,
student varchar(20) NOT NULL,
PRIMARY KEY (`id`)
)
输出示例。
student | grade | count
1 A 10
1 C 2
1 F 4
2 B 20
2 B- 3
2 C+ 10
student | grade | points
1 A 4.3
2 B+ 3.3
3 B- 2.7
4 D+ 1.3
student | total grades
1 90
2 80
3 100
4 1
最佳答案
我认为学生-年级-作业模式就可以了。您应该通过查询来计算学生的成绩数,而不是在数据库中维护该信息。 在概念层面(不是严格的 mysql),我会做这样的事情。
table student (
id int (primary key)
varchar name
... // other student attributes (e.g. phone number)
)
table grade (
id int (primary key)
name varchar // e.g. "A+", "B-", etc.
float points // grade value in points
)
table assignment (
id int (primary key)
name varchar // assignment name
student_id int (foreign key) // student that completed the particular assignment
grade_id int (foreign key) // grade achieved in particular assignment
... // other assignment attributes (e.g. due date)
)
关于MySQL评级数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2024988/