新しいデータベース設計へのかなり大規模なデータベースの移行に取り組んでいます。既存の構造には、異なるストアで表される同じデータの複数のテーブルがありました。
例えば:
`store1_tickets`
--------------------
| id | customer |
--------------------
| 1 | 29 |
--------------------
`store2_tickets`
--------------------
| id | customer |
--------------------
| 1 | 54 |
--------------------
現在、次のような表に統合しています。
`tickets`
----------------------------------------
| id | legacy_id | store | customer |
----------------------------------------
| 1 | 1 | 1 | 29 |
| 2 | 1 | 2 | 54 |
----------------------------------------
このパターンは、いくつかのコンポーネント (顧客、ベンダー、予定など) で繰り返されます。
ETL を INSERT ステートメントに変換する (PHP) スクリプトを作成しています。データを変換している間、新しいチケット ID の現在の合計を保持する必要があります。INSERT ステートメントの後、UPDATE ステートメントを作成して、他のテーブルの対応する ID を変更しています (テーブルの番号を付け直した後customer
に、テーブルのフィールドを変更するなど) 。tickets
customers
UPDATE を (すべての INSERT の後に) 実行して、customer
1 を 54 に変更し、54 に達したらそれcustomer
を 243 に変更するなど、一種のカスケードを実行させることを恐れています。
ID を正しく修正するにはどうすればよいですか? チケット テーブルは、実際には複数列の auto_increment として使用するため、従来の ID を保持する唯一のテーブルです (各ストアには、表示目的で独自のインクリメント チケット ID が必要です)。複雑なのは、相互に参照するテーブルが非常に多いため、スクリプト内で ID を完全に更新するのが非常に複雑になるためです。
これに対するより良いアプローチ、または更新のカスケードを防ぐ方法はありますか? 私はほとんどの場合id
、非常に高い数 (レコード数のために少なくとも 100k である必要があります) でオフを開始し、すべてが完了したら、すべての ID をその値だけ減らすことができます。