2014-10-08 3 views
0

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

Я обновляю DDL для этой базы данных и создал сценарий обновления (для DDL).
Но какой я лучший способ перенести данные?

Вся таблица, в которой используется старый ключ varchar, теперь имеет недействительный внешний ключ для этой новой сущности. Как инициализировать это новое поле. Является ли это шагом после обновления DDL (возможно ли это для не-нуль-полей?)? Или это нужно сделать , а - миграция DDL (и как)?

Пример:

Table NewEntity 
+ Key (autogenerated) 
+ SomeInfo 
+ OldKeyThatWasJustAVarchar 

Table Existing_1 
- Key (autogenerated) 
- SomeInfo_1 
- SomeInfo_n 
- OldKeyThatWasJustAVarchar ('logical' Reference) 
+ NewForeignKeyToNewTable 

Table Existing_2 
- Key (autogenerated) 
- ExampleFieldAnalogOtherTables 
- OldKeyThatWasJustAVarchar ('logical' Reference) 
+ NewForeignKeyToNewTable 

Содержание всех OldKeyThatWasJustAVarchar являются UNICE, так что простой SQL предложит мне необходимый идентификатор NewEntity:

SELECT Key FROM NewEntity nw, Existing_n existing 
    WHERE nw.OldKeyThatWasJustAVarChar = existing.OldKeyThatWasJustAVarChar; 

ответ

1

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

Если вы хотите придерживаться своей концепции ID, но не забудьте иметь уникальное ограничение на естественный ключ (OldKeyThatWasJustAVarchar, который есть). Что касается процесса: вы можете просто создать новую таблицу и столбцы NewForeignKeyToNewTable в существующих таблицах. Сделайте эти столбцы нулевыми. Создайте внешние ключи. Затем заполните новую таблицу, затем заполните столбцы NewForeignKeyToNewTable. Затем сделайте ваши новые столбцы не обнуляемыми. Вот и все.

+0

Мне нужно создать новое, потому что старые varchars не являются «родовыми». Хорошо, просто использование «не null» позже было простым намеком. Это было так просто. Много деревьев здесь ... ;-) thx – Sammy