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

Рассмотрим этот случай, когда я пытаюсь смоделировать базу данных для компании:

  • Сущности: Сотрудники , Менеджеры, Отделы.
  • Сотрудникработает только в 1 Отделе, в то время как в Отделеможет работать много Сотрудников.
  • Менеджерможет управлять только 1 Отделоми аналогично Отделможет иметь только 1 Менеджер.
  • Менеджерконтролирует множество Сотрудников, но Сотрудникконтролируется только одним Менеджером.

Теперь у меня есть 2 способа смоделировать это:

Первое решение:

Я буду считать, что сущность Менеджернаследуется от сущности Сотрудник, учитывая, что я' будем хранить данные, которые уникальны для менеджеров (например, бонусы и статус).

First Solution

  • Поскольку отношение между Отделоми Сотрудникомравно 1:N, я положу Идентификатор отделав качестве внешнего ключа в таблице Сотрудникдля Работы связь.

  • Поскольку соотношение между Отделоми Менеджеромсоставляет 1:1, то я положу Идентификатор отделав качестве внешнего ключа в таблице Managerдля Manages связь.

Проблема. Как представить рекурсивное отношение между Менеджероми Сотрудником?


Второе решение:

Я буду считать, что сущность Менеджерне нужна, так как другие Сотрудникитакже могут иметь Бонуси Статус. (На самом деле я добавил эти 2 атрибута только для того, чтобы посмотреть, как это смоделировать в обоих случаях) Second solution

  • Поскольку отношение между Отделоми Сотрудникомравно 1:N, я положу Идентификатор отделав качестве внешнего ключа в таблице Сотрудникдля Работы связь.
  • Поскольку отношение между Сотрудникоми Менеджеромравно 1:N, я положу Идентификатор сотрудникав качестве внешнего ключа в таблице Employeeдля Supervises отношение и назовите его Manager Id.

Проблема: Как представить отношение между Менеджероми Отделом?


Вопросы:

  1. Есть ли очевидные ошибки в обоих проектах?
  2. Как решить каждую задачу в обоих случаях?
  3. Есть ли лучшее решение, чем эти два?
20
задан giannis christofakis 27 June 2014 в 06:40
поделиться