Ключ с миграцией состоит в том, чтобы сделать несколько вещей:
Во-первых, не делайте ничего без текущей резервной копии.
Во-вторых, если ключи будут меняться, вам нужно как минимум временно временно сохранить старое и новое в новой структуре (постоянно, если поле ключа открыто для пользователей, поскольку они могут искать его, чтобы получить старые записи).
Далее вам необходимо иметь полное представление об отношениях с дочерними таблицами. Если вы измените ключевое поле, все связанные таблицы также должны измениться. Здесь пригодится хранение как старого, так и нового ключа. Если вы забудете изменить любой из них, данные больше не будут правильными и будут бесполезными. Так что это важный шаг.
Выберите несколько тестовых случаев с особенно сложными данными, указав один или несколько тестовых случаев для каждой связанной таблицы. Сохраните существующие значения в рабочих таблицах.
Чтобы начать миграцию, вы вставляете в новую таблицу, используя выбор из старой таблицы. В зависимости от количества записей может потребоваться циклическое выполнение пакетов (не одной записи за раз) для повышения производительности. Если новый ключ является идентификатором, вы просто помещаете значение старого ключа в его поле и позволяете базе данных создавать новые ключи.
Затем сделайте то же самое со связанными таблицами. Затем используйте значение старого ключа в таблице, чтобы обновить поля внешнего ключа следующим образом:
Update t2
set fkfield = newkey
from table2 t2
join table1 t1 on t1.oldkey = t2.fkfield
Проверьте свою миграцию, запустив контрольные примеры и сравнив данные с тем, что вы хранили до миграции. Крайне важно тщательно протестировать данные миграции, или вы не можете быть уверены, что данные соответствуют старой структуре. Миграция - очень сложное действие; это платит, чтобы не торопиться и делать это очень методично и тщательно.