Подтвердить что ты не робот

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

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

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

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

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

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

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

enter image description here

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

Вариант 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)