БД Перенос данных - PullRequest
       14

БД Перенос данных

0 голосов
/ 14 августа 2010

У меня есть таблица базы данных с именем A, и теперь я создал новую таблицу с именем B и создал несколько столбцов A в таблице B.

Например: предположим, что следующие столбцы в таблицах

ТаблицаA // Уже существует

Id, Country Age Firstname, Middlename, Lastname

Таблица B // Новая таблица, которую я создаю

Id Firstname Middlename Lastname

Теперь таблица A будет выглядеть как

TableA // новая таблица A после модификации

Id, Country, Age, Name

В этом случае она будет сопоставлена ​​с таблицей B ..

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 августа 2010

Обслуживание существующих отчетов будет зависеть от инструментов, используемых для написания / генерации этих отчетов.В целом:

  1. Идентифицируйте существующие отчеты, в которых использовалась таблица A. (Возможно, путем поиска файлов с именем таблицы A внутри них - однако, если таблица A имеет имя [например, имя пользователя]который обычно используется в других местах системы, это может вернуть много ложных срабатываний.)
  2. Укажите, в каком из этих отчетов использовались столбцы, которые были удалены из таблицы A.
  3. Изменить существующиеотчеты возвращают перемещенные столбцы из таблицы B вместо таблицы A.

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

2 голосов
/ 14 августа 2010

Обновление

Я забыл рассмотреть вопрос об отчетности, поднятый ОП (Спасибо Марк Баннистер ). Вот пример того, как бороться с отчетностью.

В начале (до переноса данных) в отчете для создания имени, страны и возраста пользователей использовался следующий SQL (более или менее):

-- This query orders users by their Lastname
SELECT Lastname, Firstname, Age, Country FROM tableA order by Lastname;

Связанные с именем поля больше не присутствуют в tableA после переноса данных. Нам нужно выполнить соединение с tableB, чтобы получить информацию. Запрос теперь изменяется на:

SELECT b.Lastname, b.Firstname, a.Country, a.Age FROM tableA a, tableB b
WHERE a.name = b.id ORDER BY b.Lastname;  

Я не знаю, как именно вы генерируете свой отчет, но это суть изменений, которые вы должны будете сделать, чтобы ваши отчеты снова заработали.

Оригинальный ответ

Рассмотрим ситуацию, когда у вас был только один стол (table A). Пара строк в таблице будет выглядеть так:

# Picture 1
# Table A
------------------------------------------------------
Id | Country | Age | Firstname | Middlename | Lastname
1  | US      | 45  | John      | Fuller     | Doe
2  | UK      | 32  | Jane      | Margaret   | Smith

После добавления второй таблицы (table B) поля, связанные с именами, перемещаются с table A на table B. Table A будет иметь внешний ключ, указывающий на table B, соответствующий каждой строке.

# Picture 2
# Table A
------------------------------------------------------
Id | Country | Age | Name
1  | US      | 45  | 10
2  | UK      | 32  | 11

# Table B
------------------------------------------------------
Id | Firstname | Middlename | Lastname
10 | John      | Fuller     | Doe
11 | Jane      | Margaret   | Smit

Это финальная картинка. Суть в том, что данные не будут перемещаться из table A в table B сами по себе. Увы, для этого требуется вмешательство человека. Если бы я был упомянутым человеком, я бы следовал инструкциям ниже:

  1. Создать table B со столбцами Id, Firstname, Middlename и Lastname. Теперь у вас есть две таблицы A и B. A имеет все существующие данные, B пусто.
  2. Добавить внешний ключ к table A. Этот FK будет называться name и будет ссылаться на поле id table B.
  3. Для каждой строки в table A создайте новую строку в table B, используя поля Firstname, Middlename и Lastname, взятые из table A.
  4. После копирования каждой строки обновите поле name table A, указав id недавно созданной строки в table B.

База данных теперь выглядит так:

# Table A
-------------------------------------------------------------
Id | Country | Age | Firstname | Middlename | Lastname | Name
1  | US      | 45  | John      | Fuller     | Doe      | 10
2  | UK      | 32  | Jane      | Margaret   | Smith    | 11

# Table B
------------------------------------------------------
Id | Firstname | Middlename | Lastname
10 | John      | Fuller     | Doe
11 | Jane      | Margaret   | Smith
  1. Теперь вам больше не нужны столбцы Firstname, Middlename и Lastname в table A, чтобы их можно было отбросить.
  2. вуаля, вы выполнили миграцию данных!

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

...