La clave de la migración es hacer varias cosas: En primer lugar, no hacer nada sin una copia de seguridad actual. En segundo lugar, si las claves cambiarán, debe almacenar tanto la antigua como la nueva en la nueva estructura, al menos temporalmente (permanentemente si el campo de clave está expuesto a los usuarios porque pueden estar buscando por él para obtener registros antiguos).
A continuación, debe tener una comprensión profunda de las relaciones con las tablas secundarias. Si cambia el campo clave, todas las tablas relacionadas deben cambiar también. Aquí es donde tener tanto la clave vieja como la nueva guardadas es útil. Si olvida cambiar alguno de ellos, los datos ya no serán correctos y serán inútiles. Entonces este es un paso crítico.
Elija algunos casos de prueba de datos particularmente complejos, asegurándose de incluir uno o más casos de prueba para cada tabla relacionada. Almacene los valores existentes en las tablas de trabajo.
Para iniciar la migración, inserte en la nueva tabla usando una selección de la tabla anterior. Dependiendo de la cantidad de registros, es posible que desee recorrer lotes (no un registro a la vez) para mejorar el rendimiento. Si la nueva clave es una identidad, simplemente coloque el valor de la clave anterior en su campo y deje que la base de datos cree las nuevas claves.
Luego haga lo mismo con las tablas relacionadas. A continuación, utilice el antiguo valor de la clave en la tabla para actualizar los campos de clave externa con algo como:
prueba
Update t2
set fkfield = newkey
from table2 t2
join table1 t1 on t1.oldkey = t2.fkfield
la migración mediante la ejecución de los casos de prueba y comparar los datos con lo que se ha guardado desde antes de la migración. Es absolutamente crítico probar a fondo los datos de migración o no puede estar seguro de que los datos sean consistentes con la estructura anterior. La migración es una acción muy compleja; Vale la pena tomarse su tiempo y hacerlo de manera metódica y exhaustiva.
De hecho, creo que es preferible dejar el oldId en la nueva tabla para tener un newId en la tabla anterior, lo que hace que esto sea aún más fácil. – ninesided