2017-09-25 153 views
0

我試圖創建一個數據透視表來幫助跟蹤我的應用程序中的「挑戰」。基本上我有一個challenge_task數據透視表,創建一個挑戰和任務之間的關係。當處於挑戰狀態的用戶完成我想要分辨的任務時,我可以跟蹤用戶的進度。存儲多個用戶完成挑戰任務的最佳方式是什麼?將多個值存儲在一個數據庫列中

我在數據透視表中考慮添加一個名爲user_completedjson列來處理這個問題,併爲每個完成挑戰任務的用戶存儲user_id

所以challenge_task會是什麼樣子

challenge_id | task_id | user_completed 

這是一個好辦法嗎?還是有什麼更適合這一點?

+3

「在一個數據庫列多個值」幾乎總是一個壞主意。 – Uueerdo

+0

@Uueerdo如果一個挑戰只有兩個用戶,那麼我應該像數據透視表上的'user_a_completed'和'user_b_completed'列一樣,並在用戶完成時添加'user_id' – Packy

+4

只需每次創建一個新行。無需將多個用戶標識存儲在一行中。 –

回答

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,如果你想索引你的數據,因爲Json不能被索引。 我認爲你應該在用戶和任務之間建立一個數據透視表,並創建必要的關係。

0

我不推薦你在一個數據庫列中插入多個值。


注意:這是我的意見。只是分享我使用它的方式。

一個名爲tasks_settings的表,它具有任務設置。

Example 1

,我覺得這種方式靈活,因爲我隨時都可以修改標題,描述和容易獎勵。我也可以在這裏添加2個字段valid_till和valid_for。因此,您可以在一段時間後過期,並且僅限於員工或所有用戶等特殊職位。

另一臺名爲users_tasks

Example 2

這一個控制用戶。他們是否完成了任務。這也可以實現你正在尋找的東西。

id | challenge_id | task_id | username | user_completed 

我希望這對你有幫助!

相關問題