私はこの小さな登録システムに取り組んでいますが、システムに学生を登録したい場合、年/レベルの値が増加するだけであるという問題があります。グレード 3 の double 値。進行のパターンをどのように行うことができるか、およびデータベースがどのように見えるかについての助けをいただければ幸いです。ありがとう。
質問する
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)
これで、この構造を使用して、生徒を適切に識別するためのテーブルができました。必要に応じて、ここで主キーを使用して多くのことを実行できます(他のテーブルにリンクし、後で必要なことに気付いていない機能を追加します)。データは正規化されています)。学生が何に登録されているかを定義するきちんとしたテーブルがあります-学生にリンクされています。そして最後に、主題情報を保持するもう1つの簡潔なテーブルがあります。
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 に答える