Управление сотрудниками, работающими в нескольких отделах: методы и примеры кода

“Рассмотрим следующую реляционную схему. Сотрудник может работать более чем в одном отделе;”

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

Метод 1: связь «один-ко-многим» с использованием соединительной таблицы

Одним из распространенных подходов к решению этого сценария является использование соединительной таблицы. Соединительная таблица действует как промежуточное звено между таблицами сотрудников и отделов, позволяя представить связь «многие-ко-многим» как две связи «один-ко-многим».

Вот пример того, как будет выглядеть схема:

Employee Table:
+----+-----------+
| ID | Name      |
+----+-----------+
| 1  | John Doe  |
| 2  | Jane Smith|
+----+-----------+
Department Table:
+----+--------------+
| ID | Department   |
+----+--------------+
| 1  | Sales        |
| 2  | Marketing    |
| 3  | Engineering  |
+----+--------------+
Employee_Department Table:
+----+-------------+------------+
| ID | Employee_ID | Department_ID |
+----+-------------+------------+
| 1  | 1           | 1            |
| 2  | 1           | 3            |
| 3  | 2           | 2            |
| 4  | 2           | 3            |
+----+-------------+------------+

Используя эту соединительную таблицу, сотрудник может быть связан с несколькими отделами, а в отделе может быть несколько сотрудников.

Метод 2: массив или столбец JSON

Другой подход — использовать массив или столбец JSON для хранения нескольких идентификаторов отделов непосредственно в таблице сотрудников. Этот метод подходит, когда количество отделов, в которых может работать сотрудник, относительно невелико и не меняется часто.

Вот пример использования столбца массива:

Employee Table:
+----+-----------+------------------+
| ID | Name      | Departments      |
+----+-----------+------------------+
| 1  | John Doe  | [1, 3]           |
| 2  | Jane Smith| [2, 3]           |
+----+-----------+------------------+
Department Table:
+----+--------------+
| ID | Department   |
+----+--------------+
| 1  | Sales        |
| 2  | Marketing    |
| 3  | Engineering  |
+----+--------------+

В этом примере в столбце «Отделы» таблицы сотрудников хранится массив идентификаторов отделов, с которыми связан сотрудник.

Метод 3: значения, разделенные запятыми (CSV)

Простой метод — использовать столбец значений, разделенных запятыми (CSV), для хранения идентификаторов отделов в виде строки в таблице сотрудников. Этот метод прост, но может потребовать дополнительного анализа при запросе данных.

Вот пример использования столбца CSV:

Employee Table:
+----+-----------+------------------+
| ID | Name      | Departments      |
+----+-----------+------------------+
| 1  | John Doe  | 1,3              |
| 2  | Jane Smith| 2,3              |
+----+-----------+------------------+
Department Table:
+----+--------------+
| ID | Department   |
+----+--------------+
| 1  | Sales        |
| 2  | Marketing    |
| 3  | Engineering  |
+----+--------------+

В этом примере в столбце «Отделы» таблицы сотрудников хранятся идентификаторы отделов в виде строки, разделенной запятыми.

Метод 4: отдельная таблица для каждого сотрудника

При таком подходе вы можете создать отдельную таблицу для каждого сотрудника для хранения связанных с ним отделов. Каждая таблица будет иметь отношение один ко многим с таблицей отдела.

Вот пример с отдельными таблицами для двух сотрудников:

Employee_1 Table:
+----+-------------+
| ID | Department  |
+----+-------------+
| 1  | Sales       |
| 2  | Engineering |
+----+-------------+
Employee_2 Table:
+----+-------------+
| ID | Department  |
+----+-------------+
| 1  | Marketing   |
| 2  | Engineering |
+----+-------------+
Department Table:
+----+--------------+
| ID | Department   |
+----+--------------+
| 1  | Sales        |
| 2  | Marketing    |
| 3  | Engineering  |
+----+--------------+

У каждого сотрудника своя таблица, а таблица отдела остается неизменной.