【发布时间】: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使用单独的表,其中第二个表将充当Tasks和Users表之间的枢轴。 -
@tereško 这就是我最终做的事情
标签: php mysql laravel database-schema