キーはいくつかのことを行うことです: まず、現在のバックアップなしでは何もしません。 第2に、キーが変更される場合は、少なくとも一時的に新しい構造体にoldとnewの両方を格納する必要があります(古いレコードを取得するためにキーフィールドがユーザーに公開されている場合は、
次に、子テーブルへの関係を完全に理解する必要があります。キーフィールドを変更すると、関連するすべてのテーブルも同様に変更する必要があります。これは古いキーと新しいキーの両方を保存しておくと便利です。それらのいずれかを変更することを忘れた場合、データはもはや正しくなくなり、役に立たなくなります。これは重要なステップです。
特に複雑なデータのテストケースを選んで、関連する各テーブルに1つ以上のテストケースを含めるようにしてください。既存の値を作業表に保管します。
移行を開始するには、古いテーブルのselectを使用して新しいテーブルに挿入します。レコードの量によっては、パフォーマンスを向上させるために、一度に1レコードではなく、バッチをループすることができます。新しいキーがIDの場合は、古いキーの値をそのフィールドに置き、データベースに新しいキーを作成させるだけです。
次に、関連する表と同じ操作を行います。その後のようなもので、外部キーフィールドを更新するために、テーブル内の古いキー値を使用します。
Update t2
set fkfield = newkey
from table2 t2
join table1 t1 on t1.oldkey = t2.fkfield
テストケースを実行すると、あなたは、移行前から保存されたものとのデータを比較することで、あなたの移行をテストします。移行データを徹底的にテストすることは非常に重要ですが、データが古い構造と一貫しているかどうかを確認することはできません。移行は非常に複雑な動作です。それはあなたの時間を費やして、非常に体系的かつ徹底的にそれを支払うことを支払う。
私は実際には、新しいテーブルにoldIdを残す方が古いテーブルにnewIdを持つ方が望ましいと考えています。 – ninesided