Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Миграция данных со старой схемы на новую / 4 сообщений из 4, страница 1 из 1
30.01.2019, 09:03
    #39766847
java73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Миграция данных со старой схемы на новую
Добрый день.
Несколько лет назад была сделана на коленке ужасная по архитектуре БД, имеющая несколько таблиц с практически одинаковыми полями (так вышло, потому что таблицы добавляли разные люди, в разное время и т.д.). Теперь есть возможность обновить как приложение, использующее эту БД, так и саму архитектуру БД. Три таблицы с практически одинаковыми полями будут слиты в одну.
Однако для миграции данных существует следующая сложность. У всех таблиц было автоинкрементное поле ID целочисленное, поэтому во всех имеются одинаковые значения. При миграции в одну таблицу нужно будет заново генерировать уникальное ID поле. Однако с прежними таблицами есть множественные связи других таблиц.
Вопрос: как наиболее простым способом сделать объединение данных и обновить заново сгенерированные в новой таблице ID в связанных таблицах (которые тоже, кстати, будут объединяться).
Можно ли написать SQL запрос, который бы сначала скопировал все данные из первой, второй, третьей таблиц без поля ID, создавая его значение заново, а затем прошелся каким-то способом (есть foreach ?) по новой таблице и сопоставляя другое уникальное поле (есть, к счастью, такое) с полями в связанных таблицах, обновлять его значение?
...
Рейтинг: 0 / 0
30.01.2019, 10:18
    #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
30.01.2019, 10:22
    #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
30.01.2019, 10:29
    #39766888
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Миграция данных со старой схемы на новую
Ну каждый сам куец своего счастья...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Миграция данных со старой схемы на новую / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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