Если бы это был я, я бы просто добавил P_ID и O_ID к Сотрудникам. Та же позиция может быть заполнена несколькими сотрудниками, и в данном офисе может быть несколько сотрудников, но маловероятно (без использования технологии клонирования), чтобы один и тот же Employee нужно было реплицировать несколько раз - таким образом, просто добавьте P_ID и O_ID в Сотрудник, и я думаю, что тебе хорошо. Конечно, вам понадобятся ограничения внешнего ключа от Employee to Position (P_ID) и Office (O_ID).
EDIT: После некоторого размышления и напоминания о том, что у меня были рабочие места, где я заполнял несколько позиций (хотя и в том же месте), я полагаю, что возможно, что один человек может заполнить несколько позиций, которые могут находиться в разных местах ,
Если вы действительно настроены на наличие таблицы соединений между сотрудниками, позициями и офисами - ОК, создайте таблицу EmployeePositionOffice (или что-то в этом роде), которая содержит три столбца E_ID, P_ID и O_ID. Первичный ключ должен быть (E_ID, P_ID, O_ID), и каждое поле должно быть привязано к внешней привязке к соответствующей базовой таблице.
EDIT: Не уверен в синтаксисе SQL Server, но в Oracle первым будет что-то вроде:
ALTER TABLE EMPLOYEES
ADD (P_ID NUMBER REFERENCES POSITIONS(P_ID),
O_ID NUMBER REFERENCES OFFICES(O_ID));
в то время как второй будет что-то вроде
CREATE TABLE EMPLOYEES_POSISTIONS_OFFICES
(E_ID NUMBER REFERENCES EMPLOYEES(E_ID),
P_ID NUMBER REFERENCES POSITIONS(P_ID),
O_ID NUMBER REFERENCES OFFICES(O_ID),
PRIMARY KEY (E_ID, P_ID, O_ID));
Делите и наслаждайтесь.
Какой двигатель базы данных вы используете? MS SQL Server? Oracle? MySql? .... –