2016-04-09 12 views
0

これで、ユーザーがタスクを完了するたびにユーザーを追跡する小さなWebアプリケーションを作成しています。そして私は自分のデータベースをレイアウトする最良の方法を特定するのに苦労しています。MYSQLデータベースのユーザーのためのタスクの進捗状況を追跡するベストプラクティス

最初に物事を説明するいくつかのルールとロジック。色で識別される多くのタスクがあります。欲求、赤、青、黄色などです。各作業には1〜40の多数の演習があります。緑1、緑2、緑3など。すべての演習は難易度があります。私はすべてのタスク/練習のために各ユーザーの進行状況を完了としてマークすることによって追跡したいと思います。つまり、完成したものすべてを数えることができ、完了したパーセンテージをタスクに与えることができます。

現在、私のDBのテーブルは次のようになります。各タスク(色が)taskinfo例えば 'greentaskinfo'(色)と呼ばれるテーブルがあり

+----------------------------+ 
| colorid difficulty active | 
| 1    H  Y | 
| 2    H  y | 
| 3    L  Y | 
| 4    L  y | 
+----------------------------+ 

そして、これまでカラー/タスクのためにそこにありますプログレステーブルeg greenprogressinfoこれにより、各ユーザーの進行状況が保存されます。

+-------------------------------------+ 
| progressid userid colorid complete | 
| 1    1  1  Y  | 
| 2    1  2  Y  | 
| 3    1  3  N  | 
| 4    1  4  N  | 
| 5    2  1  N  | 
| 6    2  2  Y  | 
| 7    2  3  N  | 
| 8    2  4  Y  | 
+-------------------------------------+ 

それから私は完了しているどのように多く数えるどこユーザーID = xと完全= Yと総数から割合としてそれをうまくすることができます。

しかし、これは、ユーザー登録時に9個のタスクテーブルに対して40個のエントリを自動的に作成する必要があることを意味します。非常に効率的ではないようです。おそらく私が見るよりも多くの問題があります。どんな専門家からのアドバイスでも、それをよりうまく設定する方法は分かります。

+0

進捗表をあらかじめ入力する必要があるのはなぜですか?タスクが開始されたときにcomplete = Nの行を挿入し、完了時にcomplete = Yを設定することができます。行が存在しないということは、決して始まったことはない –

+0

プラスなぜ9つのタスクテーブルが必要ですか?ただひとつ持っていて、その色の欄があります。 – Shadow

答えて

0

あなたが示す表は、あなたの言葉の必要条件とはあまり一致しません。ここでは、タスクや演習について話します。この区別を反映したデザインは、次のようになります。ユーザーは(その瞬間の前ではなく)運動を完了したときはいつでも

​​

、UserActionレコードを作成します。だから、あなたはまた、例えば、より詳細な進捗情報を取得することができ、クエリ

select * 
from Exercise e 
where task_id = givenTaskId 
and not exists (
    select * 
    from User_Action a 
    where a.user_id = givenUser 
    and a.exercise_id = e.id 
) 

その方法によって、ユーザーがタスクのすべての演習を完了したかどうかを尋ねることができますタスクの完了した演習の数を数えます。

関連する問題