Проблема в том, что если работа перемещается из одного агентства в другое (как вы говорите, если Jobs.agencyid должен был быть обновлен ...), то соответствующие записи в JobAgent теряют смысл: эти агенты не могут быть прикрепленным к работе, которой больше нет в их агентстве, поэтому записи JobAgent, связывающие их с заданиями, должны быть удалены ...
Один из способов обеспечить это - добавить поле JobAgent.agencyid и сделать его внешним ключом для Jobs.agencyid , с ON UPDATE RESTRICT для принудительного (ручного) удаления соответствующих записей JobAgent до изменения Jobs.agencyid.
Редактировать : другая проблема, которую я на самом деле не рассматривал, заключается в том, что когда вы впервые связываете задание с агентом (т.е. создаете новую запись JobAgent), вы должны убедиться, что они оба принадлежат то же самое агентство ... для этого, я думаю, решение OMG работает лучше всего - я рад отложить лучший ответ.
OMG также поднимает вопрос о том, как обрабатывать обновления: вы можете либо
Измените поле Jobs.agencyid и удалите (вручную) все связанные записи JobAgent: в этом случае старые агенты больше не работают над этим заданием, и вы можете назначить кого-то из нового агентства для работы над ним.
Измените поле Jobs.agencyid и также измените все связанные записи JobAgent (т. Е. Все эти агенты перемещаются с заданием в новое агентство) - но это очень грязно потому что эти агенты также будут связаны с другими заданиями, которые все еще находятся в исходном агентстве.
Как предлагает OMG, создайте новую запись Jobs и пометьте старую как несуществующую (для последующего удаления).
Как указано выше, но сохраняйте запись о несуществующей работе, чтобы сохранить историческую информацию.
Выбор 3 или 4 зависит в некоторой степени от того, для чего предназначена ваша система: хотите ли вы просто поддерживать текущее состояние "кто имеет какие работы"? или вам нужно вести какую-то историю, например, если к работе приложены учетные записи ... эта информация должна оставаться связанной с исходным агентством (но это все выходит за рамки вашего исходного вопроса).