2012-03-12 6 views
0

私はK-12学校に勤務しています。私が開発した既存の評定システムは、VBAを使用するExcelに基づいています。任期が満了するたびに400以上のExcelワークブックを統合するのは常に悪夢です。夏休み中は、すべてのデータをデータベースに入れて管理しやすくしています。学校の採点システムのためのデータベース設計アドバイスが必要

私の問題はこれです:、評定表のような計算集約型のアプリケーションでは

それは、テーブルのフィールドに計算を格納するのに良いですか、それは生データのみを保存するだけで計算を行うに優れていますフロントエンド?

Excelの評定表システムが機能する方法は、このようなものです...

  • 教師はスコア/可能な限り最高のスコアの形で各学生の各評価のための各スコアを記録します。 (例えば、クイズ1 = 5/10、宿題1 = 20/25など
  • スコアはパーセンテージとして計算され、コンポーネントごとに要約されます。 「コンポーネント」とはクイズ、宿題などを意味しますので、「クイズの平均= 90%、宿題の平均= 80%など」
  • 異なる科目では、「Science = 50%クイズ+ 50%宿題、数学= 60%クイズ+ 40%宿題 "。
  • 次に、すべての科目の平均を取得することによって、各生徒の一般的な平均成績が計算されます。

上記のすべてはスプレッドシートで非常に簡単ですが、データベースに実装する方法はわかりません。

tbl_scores 
    id 
    student_id 
    term_id 
    subject_id 
    component_id 
    assessment_id 
    raw_score 
    highest_possible_score #not sure about this cause this can be implied from assessment_id 

各スコアエントリの計算(パーセントを格納するのに有用であろう、コンポーネントの平均:

瞬間のように、私はすべての評価は、次のように記録されているテーブルを持つようなものを考えています、被験者の平均値、一般的な平均値など)を使用し、ストアドプロシージャとトリガを使用して、新しいスコアが入ったときにそれらを更新します。

または、生のスコアを保存して、フロントエンドにのみすべてを計算する方が良いでしょうか?このオプションは、サブクエリのためにここでのSELECTクエリが本当に複雑になることを知っている最初のものよりも速いでしょうか?

ところで、私はこれにPostgreSQLを使うつもりです。

アドバイスを事前にいただきありがとうございます。

DashMug

+0

私のポストに加えて、私が考えているアイデアの1つは、ExcelをDBのフロントエンドとして引き続き使用することです。 Excelは毎回計算を行い、(多分)計算結果をDBに戻します。 – dashmug

答えて

1

400人の学生、つまりピーナッツ百万を処理するように設計されたRDBMSレコード。あなたはパフォーマンスについて心配する必要はありません。

PostgreSQLが単純なクエリで行うことができなかったというあなたの説明に何も見ていません。必要な情報のみを保存し、残りは計算します。また、でない場合highest_possible_scoreをテーブルtbl_scoresに追加すると、その情報がリンクテーブルassessmentに既に含まれています。それは良いよりも害を及ぼすでしょう。

クエリが遅すぎると後で確認する必要がある場合は、常にマテリアライズド・ビューを使用できます(問合せの出力を表に書き出し、ベース・データを変更した後にその表を再計算します)。

+0

実際には** 400のワークブック**ではなく400人の生徒**です。各ワークブックには、約40名の学生がいる1クラスの1科目につき1学年のスコア情報が含まれています。これにより、ワークシートごとに約48000個の個別スコアが合計されます。しかし、私はあなたの意見を持っています。ありがとう。もしExcelがそれを行うことができれば(たとえ風変わりではあるが)、RDBMSがそれを行えない理由はないはずである。 – dashmug

+0

@dashmug:クエリに問題が発生した場合は、いつでもここに戻ってくることができます。 :) –

+0

ありがとう。私はおそらく、私が作った最終的なスキーマやクエリに関する質問に関して新しい質問を投稿しているでしょう。私はここにリンクを追加して、人々は継続を見ることができます。再度、感謝します! – dashmug

0

非正規化は、レコードの合計金額により異なります。私は学校ではそれほど大きくないと思っています。データをクエリと統合する方が良いと思っています(いくつかの結合が表示される、より複雑になるでしょう)。

関連する問題