Рассмотрим этот случай, когда я пытаюсь смоделировать базу данных для компании:
- Объекты:
Employees,Managers,Departments. -
Employeeработает только в 1Department, тогда какDepartmentможет иметь многоEmployees, работающих в нем. - A
Managerможет управлять только 1Department, и аналогично aDepartmentможет иметь только 1Manager. - A
Managerконтролирует многиеEmployees, ноEmployeeконтролируется только однимManager.
Теперь у меня есть два способа моделирования этого:
Первое решение:
Я буду считать, что объект Manager наследуется от объекта Employee, считая, что я сохраню данные, которые уникальны для Менеджеров (например, Бонус и Статус).

-
Поскольку отношение между
DepartmentиEmployeeравно1:N, тогда я поставлюDepartment Idв качестве внешнего ключа в таблицеEmployeeдляWorksотношение. -
Так как отношение между
DepartmentиManagerравно1:1, тогда я поставлюDepartment Idв качестве внешнего ключа в таблицеManagerдляManagesотношение.
Проблема: как я могу представить рекурсивное отношение между Manager и Employee?
Второе решение:
Я буду считать, что объект Manager не нужен, поскольку другой Employees может также иметь Bonus и Status. (На самом деле я добавил эти 2 атрибута, чтобы посмотреть, как их моделировать в обоих случаях)

- Так как отношение между
DepartmentиEmployeeравно1:N, тогда я поставлюDepartment Idв качестве внешнего ключа в таблицеEmployeeдляWorksотношение. - Так как отношение между
EmployeeиManagerравно1:N, тогда я поставлюEmployee Idв качестве внешнего ключа в таблицеEmployeeдляSupervisesи назовите егоManager Id.
Проблема: как я могу представить связь между Manager и Department?
Вопросы:
- Есть ли очевидные ошибки в обоих конструкциях?
- Как решить каждую проблему в обоих случаях?
- Есть ли лучшее решение, чем эти два?



