2016-11-04 3 views
0

У меня есть сайт с очень старой и плохо спроектированной базой данных (MySQL). Я создаю новую версию веб-сайта, и я определил другую базу данных (MySQL), которая, конечно, лучше спроектирована (normalized ea)Скопировать базу данных в другую базу данных с другой структурой

Теперь у меня возникла проблема переноса данных старой базы данных в новую базу данных , Я не могу использовать mysqldump как макет таблиц и ссылок e.a. совершенно разные, хотя некоторые атрибуты одинаковы.

Так что мой вопрос - вот что такое лучшие практики для такого рода работ. Например.

Таблица Customer с атрибутами name, street, something unimportant к новым Customer таблицы с атрибутами name, street, something new and important

насчет таблицы с внешними ключами E.A. ?

Сердечные приветы

Jens Бейсе

+1

Если вы не были достаточно осторожны, чтобы начать с текущей структуры и хранить инструкции 'ALTER TABLE', вам нужно будет скопировать пользовательский сценарий переноса данных. Никакой стандартный сторонний инструмент не сделает это за вас. –

ответ

1

Там не очень хорошо описываемый метод сделать это - это больше ручного задания, определяющие, как преобразовать данные. Форма ETL (Extract, Transform и Load) как бы.

Начните с ваших базовых таблиц и напишите некоторые инструкции вставки, чтобы получить основные данные там, преобразованные, как применимо. Затем перейдите на «следующий уровень» связанных данных и повторите, пока вся ваша информация не будет скопирована.

Обратите внимание, что часто, когда новая, идеальная схема не может быть полностью реализована (со всеми ограничениями и т. Д.) С устаревшей базой данных, так как некоторые части информации могут отсутствовать. В этих случаях вам необходимо либо: a) генерировать данные по мере необходимости во время загрузки, либо b) отключать ограничения, чтобы вы могли загружать устаревшие данные, пока такие данные не будут очищены настолько, чтобы обеспечить их соблюдение.

В целом, это очень характерный для всех типов сценарий, который обычно обрабатывается вручную в большинстве случаев. Насколько мне известно, во всяком случае.

Наконец, прошло некоторое время с тех пор, как я работал с MySQL, но большинство движков базы данных допускают двухпользовательское наименование, поэтому вы можете получить доступ к двум отдельным базам данных (на одном сервере) из одного сценария, поэтому ваши заявления вставки могут в конечном итоге, как это:

INSERT INTO newdb.newtable (thisfield, thatfield) 
SELECT thisfield, thatfield FROM olddb.oldtable; 

(с применимым преобразованием применяется, конечно)

1

Start из старого сценария SQL и вручную удалить все несущественные столбцы, которые не существуют в новой структуре БД:

INSERT INTO customers ('name','surname','age') VALUES ('john','brown', 27); 

стать

INSERT INTO customers ('name','surname') VALUES ('john','brown'); 

Присвоить значение по умолчанию для новых столбцов для вставки в новой БД и удалить это значение по умолчанию после выполнения вставки скрипта, если это необходимо.

Используйте некоторые редакторы, скопируйте/замените сгенерированный скрипт, чтобы сделать его простым. Или скопируйте старые таблицы во временные таблицы и выберите из них необходимые поля для вставки данных в новые таблицы.

INSERT INTO customer (
    SELECT 'name','surname' FROM customers_old 
) 

Автоматизированный подход в данном случае трудно найти, так как DB структуры сделаны вами и ручной подход лучше здесь, на мой взгляд.

+0

Имеет ли MySQL 'INSERT INTO thisdb.thistable (fields) SELECT поля FROM thatdb.thattable' синтаксис? (прошло много лет с тех пор, как я его использовал) – jleach

0

Возможно, вы, возможно, напишите программу на выбранном вами языке для перемещения данных из 1 DB (таблицы) в другие, только требуемые данные столбца для перемещения. вы можете найти много примеров для них на веб-сайте

Для обработки сценария внешнего ключа вы можете перемещать данные из столбца, которые из-за необходимости нормализации необходимо перенести в какую-либо другую таблицу, вы можете справиться с этим с помощью самой программы как программы будет работать над каждой записью строки, поэтому вы можете перемещать каждую запись в строке в любую нужную таблицу (или поддерживать временный лист excel, где каждый лист представляет таблицу и добавлять данные к этому преимуществу по мере необходимости), затем добавлять данные в вашу недавно созданную схему таблицы из этого excel, импортировав ее.

Смежные вопросы