2014-10-04 63 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