Самый эффективный способ создать сотрудника с несколькими работодателями - PullRequest
0 голосов
/ 15 октября 2018
CREATE TABLE IF NOT EXISTS `default_schema`.`Employee` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `first_name` VARCHAR(200) NOT NULL,
  `_last_name` VARCHAR(200) NOT NULL,
  `employee_id` INT(11) NULL,
  `employer_id` INT(11) NOT NULL,
  PRIMARY KEY (`id`),

CREATE TABLE IF NOT EXISTS `default_schema`.`contractor` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `contractor_name` VARCHAR(200) NOT NULL,
  `contract_number` VARCHAR(20) NOT NULL,
  `contract_term` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`),

У «работника» может быть много разных работодателей («подрядчик»).Так что будет лучшим способом показать это в базе данных?Создайте несколько полей в «employee», например «Employer1», «Employer2» и т. Д. Или создайте третью таблицу для описания связи между сотрудником и работодателем

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

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

В качестве примера:

CREATE TABLE `employment` 
( employee_id   INT(11) NOT NULL  COMMENT 'PK, FK ref employee.id'
, contractor_id INT(11) NOT NULL  COMMENT 'PK, FK ref contractor.id'
, PRIMARY KEY (employee_id, contractor_id)
, UNIQUE KEY employment_UX2 (contractor_id, employee_id)
, CONSTRAINT FK_employment_contractor FOREIGN KEY contractor_id REFERENCES contractor(id) 
, CONSTRAINT FK_employment_employee   FOREIGN KEY employee_id   REFERENCES employee(id)
)

Чтобы представить отношение между «сотрудником» и «подрядчиком», мы вставляем строку в эту таблицу.

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

0 голосов
/ 15 октября 2018

Новые поля в таблице employee не будут масштабироваться.Вы должны заранее знать максимальное количество работодателей, которое может иметь сотрудник (и это гарантированно изменится).Лучше смоделировать это как несколько рядов для сотрудника, каждый из которых представляет своего работодателя.Лучше всего это сделать в третьей таблице, которую вы используете для объединения сотрудников и работодателей, поскольку у работодателя также может быть несколько сотрудников.

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