Рассмотрим этот случай, когда я пытаюсь смоделировать базу данных для компании:
- Объекты:
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
?
Вопросы:
- Есть ли очевидные ошибки в обоих конструкциях?
- Как решить каждую проблему в обоих случаях?
- Есть ли лучшее решение, чем эти два?