2014-10-26 3 views
0

Ищете лучший способ обойти это.MySQL для многих отношений структура (может иметь много b, но b может также иметь много а)

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

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

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

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

ответ

0

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

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

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

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

Сохранение значений, разделенных запятыми не является хорошей идеей и отличным объяснение предоставляется here

+0

Спасибо, видя, как она делает так, мой вопрос был избежать дубликатов строк данных для получения информации задания и теперь я вижу, как отдельный стол, как вы это делаете, и он y хранит малые ints. – rezand

+0

Добро пожаловать. – geoandri

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 
Смежные вопросы