3

私はこの小さな登録システムに取り組んでいますが、システムに学生を登録したい場合、年/レベルの値が増加するだけであるという問題があります。グレード 3 の double 値。進行のパターンをどのように行うことができるか、およびデータベースがどのように見えるかについての助けをいただければ幸いです。ありがとう。

4

1 に答える 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 に答える