2017-06-07 5 views
1

私はできるだけデータベースをきれいに保つためのベストプラクティスについて疑問に思っています。データベースはexpress.js/nodeによってアクセスされるpostgresqlです。それは私が働いている子供の雑用アプリのためのものであり、それは次のスキーマを持っている:行がデータベースに作成されたすべての個人、完成したタスクのためにキッズのためのデータベースデザインchoreスキーマ

CHILDREN 
    id 
    name 
    points 
    rate 
    created_at 
    updated_at 
    user_id 

TASKS 
    id 
    description 
    value 
    days (boolean array - eg. [0,0,0,0,0,0,0]) 
    periods (boolean array - eg. [0,0]) 
    created_at 
    updated_at 
    user_id 

FINISHED TASKS 
    id 
    task_id 
    child_id 
    completed (boolean) 
    created_at 
    updated_at 
    period (boolean) 
    day (int (0-6)) 

。 400人の子供だけが雑用をしているので、毎日約800行が毎日FINISHED TASKSテーブルに追加されています。

私は2つの質問があります。

  1. は、子供一人当たり一日のためにまたは類似のいずれかFINISHED TASKSを格納するより効率的な方法はありますか?
  2. スケールでは、1日に数万行になる可能性があります。これは、このようなアプリでは受け入れられますか?

答えて

2

中間ブリッジテーブルを介してタスクテーブルに関連する子テーブルを持つことは、これを行う一般的な方法です。大規模な病院アプリケーションでの私の経験では、テーブルに何百万もの行があり、パフォーマンスが低下し始めたら、アプリケーションは通常、「完了したタスク」を別のアーカイブテーブルにアーカイブします。 2つのテーブル、つまり「完了」が偽であるタスクを含む「アクティブなタスク」と呼ばれるものがあり、タスクが終了すると、その行はアーカイブされた「完了したタスク」テーブルに移動されます。

今後のアプリケーションのプルーフにどのくらいの労力を要しているかによって、これをもう一度見直さなくて済むようにすることができます。

関連する問題