2015-01-14 3 views
0

Мой вопрос может быть продемонстрирован с использованием классической таблицы ссылок для сотрудников, где manager_id - это FK, связанный с employee_id (PK). Другая таблица - это «авторизации».Дизайн базы данных: many2many отношения для самостоятельной ссылки FK

Что делать, если авторизации относятся только к менеджерам, а не к нерезидентам? Предполагая, что я создаю таблицу соединений «авторизации менеджера», может ли эта таблица подключаться к employee.manager_id, хотя она не уникальна?

Или я должен разделять менеджеров на другую таблицу, даже если они имеют те же самые атрибуты, что и не-менеджеры?

+0

Не нужно разделять менеджера на другую таблицу. – Randy

+0

Какая должна быть связь между менеджерами и авторизациями? – EranG

ответ

0

Посмотрите на эту структуру Employees Structure. Он управляет сложной ситуацией (менеджер несет ответственность за один или несколько отделений), а записи - исторические (from_date, to_date).

Попытки изменить эту структуру следующим образом:

  • отделов становятся авторизации
  • dept_emp становится ассоциативной таблицей auth_emp
  • удалить dept_manager

FK всегда должен относиться к ПК так подключение auth_emp к сотруднику с помощью manager_id невозможно (подумайте о нулевых ссылках).

Решение о разделении или отсутствии сотрудников, являющихся менеджером другой таблицы, зависит от ваших требований (подумайте об этом: когда сотрудник становится менеджером? Сотрудник является менеджером, когда к нему обращается хотя бы один сотрудник?).

Если вы хотите, чтобы ограничение, зарегистрированное employee_id в auth_emp, ссылалось на менеджера, вы можете использовать триггер в таблице employee. Очевидно, что триггерная логика зависит от ваших требований.

+0

Предположим, что не-менеджер никогда не может стать менеджером (потому что мой случай отличается от сотрудников/менеджеров, и я привел пример только для простоты). Итак, вы предлагаете подключить employee.emp_id к auth_emp.emp_id, хотя есть много сотрудников, у которых нет полномочий? – EranG

+0

auth_emp.emp_id необходимо подключить к сотрудникам.emp_id. Неправильная стратегия подключения к employee.manager_id и в некоторых случаях запрещена. – Aris2World

Смежные вопросы