Два внешних ключа, ссылающихся на один и тот же первичный ключ

Можно ли иметь два внешних ключа в одной таблице, ссылающихся на один первичный ключ другой таблицы?

EmployeeID является первичным ключом в таблице employee и дважды отображается в таблице для расписания.

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

В поле таблицы темных таблиц «TimsheetFor» будет иметь employeeID этого человека, который работал над проектами, а поле «EnteredBy» или «FilledBy» будет иметь employeeid того человека, который заполнил этот расписание.

Какой из следующих вариантов правильный?

ПРИМЕЧАНИЕ. В таблицах показаны только те поля, которые связаны с этим вопросом.

введите описание изображения здесь

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

Я уверен, что вариант 2 будет работать, но вы по существу должны иметь отношение 1 к 1 между TIMESHEET_TABLE и TIMESHEET_FILLED_BY , что делает две таблицы ненужными и более трудными для поддержания.

Фактически, если оба ENTERED_BY и TIMESHEET_FOR требуются в парах, использование опции 1 имеет гораздо больший смысл, потому что это автоматически применяется базой данных и внешними ключами.

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

Вариант 1 – идеальное решение. Вы можете определить ограничение внешнего ключа следующим образом:

Ограничение 1-го внешнего ключа для столбца Timesheet_For

 ALTER TABLE TIMESHEETTABLE ADD CONSTRAINT fk_TimesheetTable_EmployeeTable FOREIGN KEY (TIMESHEET_FOR) REFERENCES EMPLOYEETABLE(EMPLOYEE_ID) 

Второе ограничение внешнего ключа для столбца Entered_By

 ALTER TABLE TIMESHEETTABLE ADD CONSTRAINT fk_TimesheetTable_EmployeeTable_1 FOREIGN KEY (ENTERED_BY) REFERENCES EMPLOYEETABLE(EMPLOYEE_ID)