正在寻找解决此问题的最佳方法。
基本上,这是一个设置,让工人们看看他们一天有什么工作
许多工人可以有相同的工作,每个工人可以有多份工作,每个工作可以有多个工人,但不一定是同一组工作。
示例:
工人a可能有工作1和2,并且
工人b可以具有作业1和作业3。
在数据库中连接这种关系的最佳示例或典型示例是什么?
我的用户表有我可以引用的id和用户名,但我正试图摆脱数据库中存储的某种列表,到目前为止,这是我唯一的想法,工人a有工作(1,2,9)。
实现这一点的常用方法是使用一个额外的表,该表保存工人和作业之间的关系。假设这个表名为workers_jobs,那么它将(至少)有worker_id和job_id列。如果一个id为15的工人有id为1,3,5的作业,那么你将创建三行
worker_id | job_id
15 | 1
15 | 3
15 | 5
对于反向关系,如果id为2的作业属于id为2、5、6、8的workers_jobs表将为
worker_id | job_id
2 | 2
5 | 2
6 | 2
8 | 2
存储逗号分隔的值不是一个好主意,这里提供了一个很好的解释
处理多对多关系的标准方法是拥有一个额外的表。
workers_jobs:
| id | worker_id | job_id |
-----------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 2 | 3 |
通过这种方式,您可以从worker_jobs表中选择特定工人的所有作业,以及特定作业的所有工人。
例如:
SELECT * FROM workers
INNER JOIN workers_jobs ON workers.id = workers_jobs.worker_id
INNER JOIN jobs ON on workers_jobs.job_id = jobs.id