我正在研究这个小招生系统,我有一个问题,如果我想在我的系统中招收学生,那么年/lvl 的值应该只会增加,例如,一旦注册,Grade1 将是 2 年级,不会减少到预科或双倍值到 3 级。到目前为止,我的数据输入完全是插入 varchars。希望能对我如何进行进度模式以及我的数据库的外观提供任何帮助。谢谢。
问问题
81 次
1 回答
1
我不建议您在真正指数字的地方使用 varchars。它让一些事情变得非常容易。
mysql> create table studentLevels(id int(3) primary key auto_increment, name varchar(100));
Query OK, 0 rows affected (0.02 sec)
mysql> desc studentLevels;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(3) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> create table studentEnrolled (studentID int(3),subjectID int(3), grade int(3));
Query OK, 0 rows affected (0.00 sec)
mysql> desc studentEnrolled;
+-----------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------+------+-----+---------+-------+
| studentID | int(3) | YES | | NULL | |
| subjectID | int(3) | YES | | NULL | |
| grade | int(3) | YES | | NULL | |
+-----------+--------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> create table subjects (id int(3), subGrade int(3));
Query OK, 0 rows affected (0.05 sec)
mysql> desc subjects;
+----------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------+------+-----+---------+-------+
| id | int(3) | YES | | NULL | |
| subGrade | int(3) | YES | | NULL | |
+----------+--------+------+-----+---------+-------+
2 rows in set (0.00 sec)
现在,使用这种结构,您有一个表格可以很好地识别您的学生,您可以根据需要在此处使用主键做很多事情(将其链接到其他表格,添加您现在不知道的功能 - 并且数据已标准化)。您有一个整洁的表格,定义了学生注册的内容 - 链接回学生。最后,您还有另一个包含主题信息的简洁表格。
查看grade
用于查看学生所在位置的列,您可以使用以下选项之一:
当学生完成课程时,您可以像这样更新成绩:
update
studentEnrolled a,
subjects b
set
a.grade=b.subGrade
where
a.subjectID=b.id
and a.studentID=:ID
以上将使用您应用程序中的绑定参数,代码将简单地将学生成绩更新为刚刚通过的科目。
如果您希望学生能够返回并学习成绩较低的课程,但不希望他们的“成绩”下降,您可以轻松地将上面的内容修改为:
update
studentEnrolled a,
subjects b
set
a.grade=b.subGrade
where
a.subjectID=b.id
and a.grade<subGrade
and a.studentID=:ID
更新现在只会修改学生获得“成绩”的记录。
于 2012-09-02T01:51:52.553 回答