powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Миграция данных со старой схемы на новую
4 сообщений из 4, страница 1 из 1
Миграция данных со старой схемы на новую
    #39766847
java73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Несколько лет назад была сделана на коленке ужасная по архитектуре БД, имеющая несколько таблиц с практически одинаковыми полями (так вышло, потому что таблицы добавляли разные люди, в разное время и т.д.). Теперь есть возможность обновить как приложение, использующее эту БД, так и саму архитектуру БД. Три таблицы с практически одинаковыми полями будут слиты в одну.
Однако для миграции данных существует следующая сложность. У всех таблиц было автоинкрементное поле ID целочисленное, поэтому во всех имеются одинаковые значения. При миграции в одну таблицу нужно будет заново генерировать уникальное ID поле. Однако с прежними таблицами есть множественные связи других таблиц.
Вопрос: как наиболее простым способом сделать объединение данных и обновить заново сгенерированные в новой таблице ID в связанных таблицах (которые тоже, кстати, будут объединяться).
Можно ли написать SQL запрос, который бы сначала скопировал все данные из первой, второй, третьей таблиц без поля ID, создавая его значение заново, а затем прошелся каким-то способом (есть foreach ?) по новой таблице и сопоставляя другое уникальное поле (есть, к счастью, такое) с полями в связанных таблицах, обновлять его значение?
...
Рейтинг: 0 / 0
Миграция данных со старой схемы на новую
    #39766877
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
java73Можно ли написать SQL запрос, который бы сначала скопировал все данные из первой, второй, третьей таблиц без поля ID, создавая его значение заново, а затем прошелся каким-то способом (есть foreach ?) по новой таблице и сопоставляя другое уникальное поле (есть, к счастью, такое) с полями в связанных таблицах, обновлять его значение?Можно. Но геморройно...

java73как наиболее простым способом сделать объединение данных и обновить заново сгенерированные в новой таблице ID в связанных таблицах (которые тоже, кстати, будут объединяться).
Сначала убедиться, что ВСЕ связи поддержаны внешними ключами с атрибутом ON UPDATE CASCADE.
Обновить id во второй таблице значением t2.id+MAX(t1.id), затем обновить id в третьей таблице значением t3.id+MAX(t2.id). В результате дублирование id в таблицах устранено, и все референсные значения обновлены корректно. Можно сливать.
...
Рейтинг: 0 / 0
Миграция данных со старой схемы на новую
    #39766878
java73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начал делать немного по-другому. При копировании старой таблицы в новую, его ID копируется в новое полe oldID. Затем в строки, где есть связь, вставляется новый ID по сопоставлению oldID и ссылки на него. В общем как-то примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
# копирование данных таблицы физических лиц
insert into intelobjects20.entities (oldID,name,secondname,surname,birthdate,address,type)
select ID,Name,Otchestvo,Familia,Birthdate,Address,1 from investpatents.fizlica

#копирование данных таблицы юридических лиц
insert into intelobjects20.entities (oldID,type,name,ceoID,address,fullname,ogrn,inn,kpp,ceotype)
select ID,2,Shortname,(select ID from intelobjects20.entities where oldID=RukID),Address,Fullname,
   OGRN,INN,KPP,(select ID from intelobjects20.positions where position=Rukname)
   from investpatents.jurlica


После миграции, естественно, все поля oldID во всех таблицах подлежат уничтожению.
...
Рейтинг: 0 / 0
Миграция данных со старой схемы на новую
    #39766888
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну каждый сам куец своего счастья...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Миграция данных со старой схемы на новую
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]