我一直在通过链接服务器连接逐段处理从AS400到旧版本的数据迁移,而我一直在努力寻找将一切结构成或多或少体面的最佳方法。我将多个表合并到视图中以获取所需的数据,然后从该视图中创建表。
我有一些表,其中包含有关不同方的信息,例如律师,专员,索赔人(身份证,姓名,联系方式等)。这些表还包含对应方的地址。
我想做的是只有一个地址表并在那里收集所有地址,但是我很难跟上引用完整性,因为每个表都有超过150万条记录。
实现该目标的正确方法是什么?
某些表格中的列示例:
声明(ID,ClaimNo,名字/姓氏,电话,电子邮件,街道,城市,州,邮编)
律师(AttCode,名字/姓氏,FirmId,电话,电子邮件,街道,城市,州,邮编)
保险公司(InsCode,姓名,保单编号,电话,电子邮件,街道,城市,州,邮编)等
答案 0 :(得分:0)
好吧,这似乎并不难:
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
,您可能需要格外小心,但这应该可以为您带来一般的想法。