【问题标题】:Assigned multiple users to a 'task'将多个用户分配给“任务”
【发布时间】:2014-11-29 09:57:53
【问题描述】:

好的,我正在为我的公司创建一个任务管理器。一个用户可以将一个任务分配给多个其他用户。所以我有两种实现方式。

这是我的选项一的任务表(至少是本次讨论中重要的列):

----------------------------------------------
|   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,然后我可以 groupBy 'task_id'。这是他们目前构建它的方式,但由于某种原因,感觉它可能会在未来把我搞砸(不是那个选项不会给我同样的感觉)。所以我的问题是你们推荐哪种方式,或者是否有其他更好的方式可以做到这一点?

【问题讨论】:

  • 选项 2 是正确的方法。 SQL 并非旨在将事物列表放入逗号分隔的字符串中。它旨在将事物列表放入表格中。
  • @GordonLinoff 谢谢
  • 选项 3:为Tasks 使用单独的表,为TaskAssignees 使用单独的表,其中第二个表将充当TasksUsers 表之间的枢轴。
  • @tereško 这就是我最终做的事情

标签: php mysql laravel database-schema


【解决方案1】:

选项 2 是更好的解决方案,因为您可以实际使用表格。你可以例如用

创建另一个表Tasks
Task_id    |  Task_name   |  Budget  | ...

或带有assigned_toassigned_from 的用户ID 的表。如果您使用第二个选项,所有这些表都可以连接在一起。

顺便说一句,这是正确的normalization form

【讨论】:

  • 与 user_task 数据透视表建立多对多类型关系怎么样?
【解决方案2】:

如果任务总是由同一个人分配/由同一个人分配,您可以使用选项 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多