Соединение 2 столбцов первичного ключа с 1 столбцом внешнего ключа в одной таблице - PullRequest
2 голосов
/ 07 сентября 2011

У меня есть jobs таблица с projectmanagerid и projectdirectorid например,

jobs
----------------
pk jobid
pk projectmanagerid
pk projectdirectorid

Оба этих столбца идентификатора должны ссылаться на таблицу сотрудников, используя employeeid pk в качестве ссылки. Это хорошая практика или есть лучший способ?

employees
------------------
pk employeeid
   other stuff

Ответы [ 4 ]

4 голосов
/ 07 сентября 2011

Это нормально, если у вас есть только эти два типа: Менеджер и Директор. Но подумайте, нужно ли вам в будущем добавлять другой тип сотрудника, например, координатор. Если это возможно, то у вас есть отношение «многие ко многим» между jobs и employees, которое вы должны решить, используя промежуточную соединительную таблицу, возможно, добавив третью таблицу для описания роли сотрудника в работе ( Менеджер, директор, ...).

enter image description here

0 голосов
/ 07 сентября 2011

Существует практическое правило, согласно которому таблица моделирует сущность / класс или отношения между сущностями / классами, но не обе.Поэтому рассмотрите возможность создания двух таблиц взаимосвязей для моделирования двух взаимосвязей: менеджеров проектов и директоров проектов соответственно.Я не рекомендую подход Джо Стефанелли employee_role_id.Я думаю, вы обнаружите, что атрибуты для каждой роли (да, отношения действительно имеют атрибуты тоже) будут слишком разными, чтобы подход универсальной таблицы мог добавить ценность.

0 голосов
/ 07 сентября 2011

Кажется вполне разумным - и часто встречается во многих иерархиях - иметь два отношения к одной и той же таблице. Как и во всех внешних ключах, но, может быть, даже больше в этом случае, используйте осторожно каскадирование. Я предполагаю, что удаление менеджера или директора не должно приводить к удалению записи задания.

0 голосов
/ 07 сентября 2011

В этом нет ничего плохого, и это вполне приемлемо.Имена полей являются описательными и, следовательно, означают, что вам действительно нужно иметь два разных FK, указывающих на таблицу пользователей.если бы это было x и y, то это выглядело бы странно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...