MySQL структура отношений многие ко многим (a может иметь много b, но b также может иметь много a)

Ищете лучший способ пойти по этому поводу.

В основном это настройка для рабочих, чтобы увидеть, какие у них рабочие места на день.
У многих работников может быть одна и та же работа, и для каждого работника возможно несколько работ, каждая работа может иметь несколько работников, но не обязательно одну и ту же «кучу» работ.

Пример:
работник может иметь работу 1 и 2 и
работник б мог иметь работу 1 и 3.

Что является лучшим или типичным примером подключения этого отношения в базе данных?

В моей таблице пользователей есть идентификаторы и имена пользователей, на которые я могу сослаться, но я пытаюсь уйти от какого-то списка, хранящегося в базе данных, что до сих пор является моей единственной идеей, у работника a есть задания (1,2,9).

0

Решение

Распространенным способом достижения этого является использование дополнительной таблицы, которая содержит отношения между работниками и рабочими местами. Предположим, эта таблица с именем worker_jobs будет иметь (как минимум) столбцы worker_id и job_id. Если у работника с идентификатором 15 есть задания с идентификаторами 1,3,5, то вы создадите три строки

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

Для обратного отношения, если задание с идентификатором 2 принадлежит работникам с идентификаторами 2,5,6,8, ваша таблица worker_jobs будет

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

Хранение значений, разделенных запятыми, не очень хорошая идея, и предоставляется отличное объяснение. Вот

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
0

По вопросам рекламы [email protected]