データベースの設計と SQL に関する知識はほとんどありません。プログラミングとデータベースを学習するための簡単な学生スコア マネージャーを作成しましたが、設計がひどいものでした。
データベース構造
私のデータベースには 3 つのテーブルがあります。
- 学生情報
- ログ
- 週
最初に話しましょうstudent_info
。このテーブル構造は次のようになります。
id student_name group the_score_for_1_week the_score_for_2_week
1 Adam 2 24 2
フィールドの数は不明です。
logs
獲物は乱雑です:
id date student_name score change week
1 01-01 Adam 2 2 1
2 01-02 Adam 1 -1 1
2 01-02 Adam 24 23 1
テーブルweek
には 1 つのフィールドしかありません。
week
2
プログラム
データベースの構造を示した後。私のプログラムがどのように機能するかを話します。
どのように見えますか?
プログラムには、2 つのグリッド、1 つのグラフ、3 つのボタンがあります。最初のグリッドは、生徒の名前とスコア用です。2 番目のグリッドはログ用で、スコアがどのように変化したかを確認できます。グラフは、スコアの変化を示すためのものでもあります。これが私の最初の設計図です。
ユーザーのマウスが最初のグラフで生徒の名前をクリックすると、2 番目のグラフにこの生徒のスコアのログが表示され、グラフにはこの生徒のスコアの折れ線グラフが表示されます。
プログラムは、異なる週の異なるスコアを保存できます。Last Week
そのため、 、Next Week
、 の3 つのボタンがありますNew Week
。最新の週のみ編集できます。
それはどのように機能しますか
プログラムが開始されると、 から最新の週が選択されますweek
。
SELECT week FROM week
次にstudent_name
、 、group
、 から最新の週student_info
を選択します。生徒の点数を加減することができます。
"SELECT student_name,the_score_for_%s_week,group FROM student_info" % (week)
スコアが変更された後、レコードがlogs
テーブルに挿入されます。
"INSERT INTO log(change,score,date,student_name,week) VALUES ("
"'%s', '%s', '%s', '%s', '%s')" % (
newScore - oldScore, newScore,
time.strftime("%m-%d", time.localtime()),
student, week))
新しい週が始まると、新しいフィールドthe_score_for_%d_week
が に挿入されます。テーブルstudent_info
も更新する必要があります。week
"ALTER TABLE student_info ADD the_score_for_%s_week,group INTEGER DEFAULT 0" % week
"UPDATE student_info SET the_score_for_%s_week,group=0" % week)
"UPDATE week SET week =%s" % week
ユーザーが生徒の名前をクリックすると、2 番目のグリッドに過去のスコアが表示されます。
"SELECT date,change FROM log WHERE the_score_for_%s_week=%s and student_name='%s'" % (week, student)
チャートは、スコアがどのように変化するかを示します。2 番目のグリッドとは異なり、グラフを描画するには +1 や -1 ではなく、フル スコアが必要です。
"SELECT score FROM log WHERE the_score_for_%s_week=%s and student_name='%s'" % (week, student))
ご覧のとおり、データベースの設計はひどいものです。StackOverFlowがコード レビュー Web サイトではないことは 知っています。しかし、私はあなたにもっと詳細を伝えたいだけです。データベースの構造を何度も改善しようとしましたが、それについてはわかりません。
最後に、この非常に長い質問を読んでくれてありがとう。