2015-02-14 7 views

ответ

0

Хотя это совершенно нормально для этого, т. Е. Таблицы с прямыми внешними ключами друг к другу, если отношения означают разные вещи, стоит потратить время, подумав о том, что это значит.

С точки зрения фактически делают вставки, можно упорядочить свои вставки, так что:

  1. Сначала необходимо создать отдел,
  2. Затем вы создаете Employee в пределах конкретного отдела
  3. И затем вы изменяете Департамент, чтобы установить идентификатор менеджера, чтобы указать на конкретного сотрудника.

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

Существует много, чтобы думать о том, чтобы получить это право, однако, и стоит записывать (или рисовать - искать схемы ER), различные отношения между сущностями в вашей модели, чтобы убедиться, что они такие, как вы ожидал бы.

Department has a Department Manager 
Department Manager is an Employee 
Employee has a Department 

Это подразумевает три стола, один для Департамента, один для Департамента, один для Работника.

Таким образом, Департамент-менеджер является связующим звеном между Департаментом и Работником, который является нынешним Менеджером Департамента.

Если отдел сотрудников может меняться со временем, и вы должны иметь возможность отслеживать период, когда конкретный Сотрудник был конкретным Менеджером Департамента, тогда вы можете нормализовать и создать новую таблицу, скажем, EmployeeDepartment, который отслеживает взаимоотношения сотрудника, находящегося в конкретном Департаменте, вместо того, чтобы иметь идентификатор отдела непосредственно в записи сотрудника.

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

Примечание: Вы можете написать эти отношения по-разному, я выбрал конкретный способ, но альтернатива ниже в равной степени действительна. Речь идет о модели того, как ваши данные подходят друг к другу, и о взаимоотношениях между различными объектами в вашей модели.

A Department has Employees 
A Department has a Department Manager  
A Department Manager is an Employee 
+0

Что касается отношения корабля в пределах того же рабочего стола. (между идентификатором сотрудника и идентификатором руководителя) – user3057109

+0

Множественные варианты выбора. У вас может быть прямая связь, т. е. это вполне справедливо для того, чтобы таблица имела внешний ключ для себя, но это зависит. Поскольку наблюдатели меняются со временем, и вы можете отслеживать это, может иметь смысл иметь отдельную таблицу Supervisor, которая отслеживает отношения между Сотрудниками. Существует множество способов его моделирования, и они имеют последствия как для того, как код для управления им должен быть написан, так и как структура данных будет выглядеть. Это честно зависит от детального понимания требований, которые вам необходимо выполнить. –

Смежные вопросы