MySQL多对多的关系结构(一个可以有很多b' s但b也可以有很多a' s)

时间:2014-10-26 17:16:06

标签: php mysql database relational-database

寻找最好的解决方法。

基本上它是一个让工人看到他们一天有什么工作的设置 许多工人可以拥有相同的工作,每个工人可以有多个工作,每个工作可以有多个工人,但不一定是相同的“一堆”工作。

例:
工人可以有工作1和2和
工人b可以有工作1和3.

在数据库中连接此关系的最佳或典型示例是什么?

我的用户表有我可以参考的ID和用户名,但是我试图摆脱存储在数据库中的某种列表,到目前为止这是我唯一的想法,worker a有工作(1,2,9)。 / p>

2 个答案:

答案 0 :(得分:0)

处理多对多关系的标准方法是有一个额外的表。

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

答案 1 :(得分:0)

实现这一目标的常用方法是使用一个额外的表来保存工人和工作之间的关系。假设此表名为workers_jobs将具有(至少)列worker_id和job_id。如果id为15的worker具有id为1,3,5的作业,那么你将创建三行

   worker_id | job_id
        15   |    1
        15   |    3
        15   |    5

对于反向关系,如果id为2的作业属于具有ids 2,5,6,8的工人,则您的workers_jobs表将

    worker_id | job_id
          2   |    2
          5   |    2
          6   |    2
          8   |    2

存储逗号分隔值不是一个好主意,并提供了一个很好的解释here