2014-10-04 110 views
1

好吧,我爲我的公司創建了一個任務管理器。用戶可以將任務分配給多個其他用戶。所以我有兩種實現方法。將多個用戶分配給「任務」

這是我的任務選項一個表(至少在這個討論是很重要的列):

---------------------------------------------- 
| id | assigned_to | assigned_from | 
--------------------------------------------- 
| 1 | 1,3,6  |  4   | 
-------------------------------------------- 
| 2 |  1,4  |  2   | 
--------------------------------------------- 

所以我在這裏非常簡單,只是逗號分配給這個特殊的任務

每個USER_ID分離

選項2:

---------------------------------------------------------- 
| id | task_id | assigned_to | assigned_from | 
------------------------------------------------------------ 
| 1 | 335901 |  1   |  4   | 
----------------------------------------------------------- 
| 2 | 335901 |  3   |  4   | 
----------------------------------------------------------- 
| 3 | 335901 |  6   |  4   | 
----------------------------------------------------------- 
| 4 | 564520 |  1   |  2   | 
----------------------------------------------------------- 
| 4 | 564520 |  4   |  2   | 
----------------------------------------------------------- 

因此,大家可以看到,而不是把assiged_to這裏是在這裏我只是創建一個任務ID是一個隨機數和日我可以通過'task_id'進行分組。這是我目前製作它的方式,但由於某種原因,它感覺將來可能會把我搞砸(不是那種選擇不會給我同樣的感覺)。所以我的問題是你們推薦哪種方式,或者是否有更好的方法可以做到這一點?

+0

選擇2是正確的道路要走。 SQL的目的不是將事物列表放入逗號分隔的字符串中。它旨在將事物清單放入表格中。 – 2014-10-04 16:18:47

+0

@GordonLinoff謝謝 – Rodrigo 2014-10-04 16:19:35

+0

選項3:爲TaskAssignees使用單獨的表格和用於TaskAssignees的單獨表格,其中第二個表格將作爲「Tasks」和「Users」表格之間的樞紐。 – 2014-10-05 10:38:19

回答

1

選項2是更好的解決方案,因爲您可以在表格中進行實際操作。你可以例如創建另一個表Tasks

Task_id | Task_name | Budget | ... 

或者與用戶ID的表assigned_toassigned_from。如果您使用第二個選項,所有這些表格可以連接在一起。

BTW它是正確的normalization form

+0

那麼與user_task數據透視表有多對多的關係呢? – Rodrigo 2014-10-04 18:50:13

+0

事實上,您在選項2中的表是用戶<->任務數據透視表... – Benvorth 2014-10-05 12:41:37

0

您可以使用選項2,並進一步規範,如果任務總是由/來自同一人分配。

Tasks表:

task_id | assigned_from 
1   | 4 
2   | 2 

Assignees表,則並不需要有assigned_from,因爲它總是爲task_id相同:

id | task_id | assigned_to 
1 | 1   | 1 
2 | 1   | 3 
3 | 1   | 6 
4 | 2   | 1 
5 | 2   | 4