Рассмотрим случай, когда я пытаюсь моделировать базу данных для компании:Проектирование базы данных для рекурсивного отношения
- Entities:
Employees
,Managers
,Departments
. Employee
работает только в 1Department
, аDepartment
может иметь многоEmployees
, работающих в нем.- A
Manager
может управлять только 1Department
и аналогичным образомDepartment
может иметь только 1Manager
. - A
Manager
контролирует многиеEmployees
, ноEmployee
контролирует только одинManager
.
Теперь у меня есть 2 способа модели это:
Первое решение:
Я считаю, что 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
?
Вопросы:
- Есть ли какие-либо очевидные ошибки в области дизайна, как они?
- Как решить каждую проблему в обоих случаях?
- Есть ли лучшее решение, чем эти два?
+1 для усилий с диаграммами – Bohemian
+1 для иллюстративного ответа :) Но вы уверены, что эта часть правильная? «Поскольку EMPLOYEE_NO должен быть глобально уникальным, он не может оставаться в составном ключе вместе с DEPARTMENT_ID» _? Возможно, вы имели в виду 'EMPLOYEE_ID'? и что именно вы подразумеваете под _ «Если отделы должны соответствовать« _? – Songo
@ Сонго Я сделал опечатку (это должен быть ID не НЕТ), исправлено, спасибо! –