Отношения сотрудников отдела в базе данных

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

Я разработал следующие объекты:

  • Employee (ID, Fname, Mname, Lname, Sex, Phone, Address, Date найма и т. Д.)
  • Department (ID, имя)

и так как отношение один-ко-многим (каждый сотрудник должен работать в - и только в одном - отделе, в то время как в каждом отделе много сотрудников), я добавил Department ID к атрибутам Employee. Но проблема в том, как представить MANAGE отношения (один-к-одному).

Допустимо ли разработать новое отношение, которое мы называем: Employee_manage_Department и его атрибуты (Employee ID , Department ID), где оба столбца являются частью первичного ключа ??

заранее спасибо


person Wadda7    schedule 18.08.2012    source источник
comment
oracle.com/technetwork/issue-archive/ 2011/11-ноя /   -  person Zeb    schedule 31.03.2015


Ответы (5)


Да, но поскольку роли Сотрудника в компании имеют ограниченное (жизненное) время, я бы добавил два новых столбца DateTime, DATE_FROM и DATE_TO, сделав DATE_FROM частью составного первичного ключа.

person Luis Quijada    schedule 18.08.2012

Поскольку отношение менеджер-отдел составляет 1: 1, вы можете просто добавить Manager ID в таблицу отделов, которая будет действовать как внешний ключ, ссылающийся на таблицу сотрудников:

введите описание изображения здесь

Это вводит циклическую зависимость, предотвращающую вставку новых данных, которую можно разрешить одним из следующих способов:

  • Отложите один из циклических FK (если СУБД поддерживает его).
  • Сделайте Manager ID NULL-совместимым. Возможно, вам все равно придется это сделать, если вам нужно поддержать концепцию отдела без менеджера.

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

введите описание изображения здесь


ПРИМЕЧАНИЕ. Отдельная таблица Employee_manage_Department подходит для моделирования отношения M: N.

person Branko Dimitrijevic    schedule 19.08.2012

Employee.department_id должен быть foreign_key в таблице Department и быть уникальным и не иметь значения NULL. Это удовлетворяет вашим ограничениям One Employee has one department и One department can have many employees

person Pratik Mandrekar    schedule 18.08.2012

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

person omoabobade    schedule 18.08.2012
comment
Да ..... omoabobade прав. Хотя связь с составным первичным ключом (emplyee ID, Department ID) действительна, но здесь она не требуется. - person sudip; 19.08.2012

Всегда ли руководитель отдела входит в число сотрудников этого отдела? Если да, то достаточно логического MnagerFlag в таблице Employee.

Вам нужно будет объявить ограничение или применить правило, которое не позволяет более чем одному сотруднику в депратации установить этот флаг.

person Walter Mitty    schedule 19.08.2012