Что вы хотите ответить на свой вопрос, это внешний ключ с каскадным обновлением, как указано в ответе от джиттера. Однако, как и большинство других соображений, вам не придется задавать этот вопрос, если вы вернетесь назад и проанализируете основную потребность в выполнении операций такого типа.
Хотя это работает, это означает, что первичный ключ на объектах вашей базы данных ненадежен с течением времени, а также означает, что базе данных, возможно, придется выполнить огромный объем работы, выполняя каскад (и он должен будет поддерживать больше блокирует выполнение такого обновления, что увеличивает вероятность блокировки).
Что касается надежности с течением времени, скажем, у вас есть склад, который поддерживает исторические сальдо по счету: AcctPK
, EffectiveDate
, Balance
, теперь у вас потенциально может быть большое количество строк для каскадного обновления если вы добавите это как еще одно каскадное отношение FK в вашу БД. Если хранилище данных находится в отдельной базе данных, вы не можете применить ссылочную целостность, поэтому каскад не происходит, и теперь у вас больше нет непрерывности учетной записи, которая была до изменения AcctPK
.
Предположим, вы экспортируете данные поставщику, который предоставляет услугу какой-либо информации для каждой строки. Теперь, когда поставщик возвращает результаты, вы не можете сопоставить некоторые строки, поскольку отправленный вами PK больше не существует в ваших данных.
В обоих этих случаях вы можете обойти эту проблему, сохраняя записи об изменениях PK с течением времени, но в конечном итоге все сводится к обходу (вероятно) неудачного выбора PK.
Я настоятельно рекомендую вам пересмотреть выбор первичного ключа, если он будет часто меняться. Одной из альтернатив будет использование суррогата IDENTITY
или автономного номера в качестве PK (вместо этого основывается отношение FK). Это никогда не потребует каскадного обновления, и другое поле, которое вы в настоящее время используете в качестве «естественного» первичного ключа, может быть изменено в обычном UPDATE
без необходимости делать каскад.