Как связать одного сотрудника с несколькими услугами, которые она может предложить, используя PostgreSQL? - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь понять, как я могу связать 1 строку персонала со всеми услугами, которые может предложить персонал. - Персонал может предложить несколько услуг. - Услуги назначаются нескольким сотрудникам.

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

Как я могу назначить пример: -staff1 предоставляет: service1, service3. и -staff 2 предоставляет: service2, service3.

Как я могу сделать это в хорошей архитектуре?

большое спасибо за ваше время и помощь, это очень ценится!

enter image description here

1 Ответ

0 голосов
/ 21 апреля 2020

Вам нужны отношения «многие ко многим» между таблицами staff и service. Вот как это делается.

Создайте так называемую таблицу join . Он будет иметь такую ​​структуру.

CREATE TABLE staff_service (
  service_id INT NOT NULL,
  staff_id INT NOT NULL,
  PRIMARY KEY (service_id, staff_id),
  UNIQUE INDEX staff_service (staff_id, service_id)
);

Если в этой таблице есть строка, это означает, что сотрудник оказывает эту услугу. Поэтому, когда сотрудник начинает предлагать услугу, ВСТАВЬТЕ строку в таблицу. Когда сотрудник прекращает предлагать услугу, УДАЛИТЕ строку.

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

Это канонический способ использования СУБД на основе SQL для обработки отношений «многие ко многим».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...