如何合并没有重复的表并维护外部引用?

时间:2014-06-28 19:58:22

标签: sql database oracle etl data-warehouse

我正在为医疗保健公司创建一个数据仓库。他们为不同的医院提供单独的数据库,其中包含患者表,他们的保险等,PK仅在一个医院DB中是唯一的。合并后,我应该创建一个Master Patient Table,一个Master Insurance Company表等,它将重复数据组合成一个记录(例如,通过比较患者的姓名和SSN字段)。

有关如何进行此合并的任何建议,并在新表中创建正确的FK引用? Patient表中的记录需要在Insurance表中正确引用保险公司。任何帮助或一般指示表示赞赏!

2 个答案:

答案 0 :(得分:0)

将第一家医院(H1)的数据加载到仓库中。然后,从第二家医院(H2)移动患者数据:

insert into P1.Patients( pid, ... )
select P2.pid, P2.this, P2.that, ...
from   H2.Patients P2
left join H1.Patients P1
    on P1.ssn = P2.ssn
where P1.pid is null;

现在您已经添加了P2患者表中尚未存在的P2患者,但保留了那些已存在的患者的P1患者ID。 (您可能必须处理碰撞。)然后将H2保险表与H2患者表一起加入以使SSN加入H1患者表以获得H1.PatientID(pid)。

insert into H1.Insurance( pid, ...)
select P1.pid, I2.this, I2.that,... -- To get H1's pid for H2's patients...
from   H2.Insurance I2    -- Join the 2nd hospital's insurance table
join   H2.Patients P2     -- ...with its patient table
    on P2.pid = I2.pid    -- ...based on its existing patient ID value.
join   H1.Patients P1     -- Now you can join with first hospitals patient table
    on P1.ssn = P2.ssn    -- ...using SSN from 2nd hospital's patient table
where  anything_else;

对其他表重复,使用P1.pid替换P2.pid的所有用法。

答案 1 :(得分:0)

另一个答案似乎非常低效。我没有进行如此多的连接,而是使用SELECT语句FROM H1.P P1和H2.P P2,其中P1.SSN == P2.SSN并将其插入H1。然后选择保险FK,担保人FK以及此结果上的其他任何内容,并将其加入此表。为保险表做类似的事情。然后选择保险ID与患者中的保险FK匹配的记录,并使用新的代理键更新它们。

虽然我希望有更多有经验的人接受这个问题。