Я работаю над довольно большой миграцией базы данных в новый дизайн базы данных. Существующая структура имела несколько таблиц для тех же данных, которые были представлены для разных магазинов.MySQL ID Rolling
Например:
`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 |
----------------------------------------
Эта картина повторяется в течение нескольких компонентов (клиентов, поставщиков, назначения ...).
Я делаю сценарий (PHP), чтобы делать ETL в операторы INSERT. Он должен поддерживать общее количество новых идентификаторов билетов при преобразовании данных. После заявления INSERT, творю оператор UPDATE, чтобы изменить соответствующие идентификаторы в других таблицах (например, изменение customer
поля в таблице tickets
раз я заново пронумеровали customers
таблицу.
Я боюсь запуска обновления (после всех вставок) и с его делает вид каскада, где она изменяет customer
1 в 54, а затем, когда он достигает customer
54, изменяя, что в 243, и так далее.
Как я могу правильно ли фиксировать идентификаторы? Таблица билетов является единственной, в которой сохранен старый идентификатор, так как я фактически буду использовать это как многостолбцовый auto_increment (каждый магазин должен иметь свой собственный инкрементный идентификатор билета для целей показа). сложность заключается в том, что существует так много таблиц, которые ссылаются друг на друга, так что это значительно усложняет обновление любых идентификаторов в скрипте.
Есть ли какой-нибудь лучший подход к этому, или каким-либо образом предотвратить переключение UPDATE из каскада? Я почти думаю, что что-то вроде запуска id
с действительно большим числом (должно быть по крайней мере 100k из-за количества записей), а затем после того, как все будет сказано и сделано, я мог бы уменьшить все идентификаторы по этому значению.
Попробуйте другой подход; дать каждому магазину номер, и каждый «тип вещи» (билет, клиент и т. д.) другой идентификатор. Таким образом, у вас есть шаблон 21xxxxxx (магазин 2, тип: 1, который является клиентом), а затем 22xxxxxx (магазин 2, тип: 2, который является билетом). –
Хм, это звучит немного сложнее, чем необходимо. В моем случае я просто увеличивал/уменьшал все свои константы.Я не боюсь, что идентификаторы клиентов смешиваются с идентификаторами билетов и т. Д., Это было скорее предотвращение повторения итераций запросов UPDATE от перезаписывания ранее записанных записей UPDATE, что привело к постоянному изменению идентификаторов. В моем примере выше, если я повторил клиентов 0-50, я бы изменил клиента с 0 по 25 (новый идентификатор), но тогда мой цикл достиг 25 и изменит его, чтобы сказать новый идентификатор 49 и так далее. Используя большое количество, я гарантирую, что мой цикл никогда не догоняет новые идентификаторы. – Demonslay335