2017-09-25 7 views
0

私のアプリケーションで "課題"を追跡するのに役立つピボットテーブルを作成しようとしています。基本的に私はチャレンジとタスクの間の関係を作成するchallenge_taskピボットテーブルを持っています。チャレンジに参加しているユーザーがタスクを完了すると、そのユーザーの進捗を追跡できるようにすることができます。どのようにタスクを完了した複数のユーザーをチャレンジに格納する最良の方法はありますか?1つのdb列に複数の値を格納

私はピボットテーブルでuser_completedという名前のjsonという列を追加し、チャレンジのタスクを完了するすべてのユーザーにuser_idを保存すると考えていました。

のでchallenge_task

challenge_id | task_id | user_completed 

のようになります。これは良い方法ですか?それともこれに適した何かがありますか?

+3

「1デシベル列内の複数の値が」ほとんど常に悪い考えです。 – Uueerdo

+0

@Uueerdoチャレンジが2人しかない場合は、ピボットテーブルに 'user_a_completed'と' user_b_completed'カラムを追加し、ユーザが完了すると 'user_id'を追加してください。 – Packy

+4

毎回新しい行を作成してください。 1つの行に複数のユーザーIDを格納する必要はありません。 –

答えて

1

私はこのような何かデータベース構造をお勧めします:

challenge: challenge_id | other data 
task: task_id | other data 
user: user_id | other data 

challenge_task: challenge_task_id | challenge_id | task_id 
       | possibly more data (such as deadline for completion) 

challenge_task_users: challenge_task_id | user_id 
        | possibly more data (such as status: accepted, in progress, completed) 
0

インデックスを作成できないため、データのインデックスを作成する場合は、Jsonをおすすめしません。 私は、ユーザーとタスクの間にピボットテーブルを作成し、必要な関係を作成する必要があると思います。

0

複数の値を1つのデータベース列に挿入することはお勧めしません。


注:これは私の意見です。私はそれを使う方法を共有するだけです。

タスク設定を持つtasks_settingsというテーブル。

Example 1

私はいつもタイトル、説明を編集し、簡単に報いることができますので、私はこの方法が柔軟見つけます。ここにvalid_tillとvalid_forの2つのフィールドを追加することもできます。だから、一定の期間を過ぎると、それはスタッフや全員のような特別なランクのためだけに期限切れにすることができます。

別のテーブルと呼ばれるusers_tasks

Example 2

は、この1つは、ユーザーを制御します。彼らがタスクを完了したかどうか。これは、あなたが探しているものを達成することもできます。

id | challenge_id | task_id | username | user_completed 

私はこれがあなたを手伝ってくれることを願っています!

関連する問題