Как собрать адреса из разных таблиц в один без нарушения ссылочной целостности SQL Server - PullRequest
0 голосов
/ 18 мая 2019

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

У меня есть таблицы, в которых есть информация о различных сторонах, таких как адвокат, комиссар, заявитель (ID, имена, контактные данные и т. д.).Эти таблицы также содержат адреса соответствующей стороны.

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

Как правильно достичь этого?

Примеры столбцов в некоторых таблицах:

  • Заявитель (Id, ClaimNo, First / LastName, Телефон, электронная почта, улица, город, штат, почтовый индекс)

  • Адвокат (AttCode, First / LastName, FirmId, Телефон, электронная почта, улица, город, штат, почтовый индекс)

  • Страховщик (InsCode, Имя, PolicyNo, Телефон, электронная почта, улица, город, штат, почтовый индекс) и т. Д.

1 Ответ

0 голосов
/ 18 мая 2019

Ну, это не сложно:

create table addresses (
    address_id int identity(1, 1) primary key,
    street varchar(255),
    city varchar(255),
    state varchar(255),
    zip varchar(10)
);

(Выше приведены адреса США.)

insert into addresses (address)
    select street, city, state, zip 
    from claimant
    union  -- on purpose to remove duplicates
    select street, city, state, zip 
    from attorney
    union  -- on purpose to remove duplicates
    select street, city, state, zip 
    from insurer;

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

insert into new_insurers ( . . ., addressid)
    select . . ., a.addressid
    from insurer i left join
         addresses a
         on i.street = a.street and
            i.city = a.city and
            i.state = a.state and
            i.zip = a.zip;

Возможно, вам придется проявить дополнительную осторожность, если какое-либо значение равно NULL, но это должно дать вам общее представление.

...