我正在为医疗保健公司创建一个数据仓库。他们为不同的医院提供单独的数据库,其中包含患者表,他们的保险等,PK仅在一个医院DB中是唯一的。合并后,我应该创建一个Master Patient Table,一个Master Insurance Company表等,它将重复数据组合成一个记录(例如,通过比较患者的姓名和SSN字段)。
有关如何进行此合并的任何建议,并在新表中创建正确的FK引用? Patient表中的记录需要在Insurance表中正确引用保险公司。任何帮助或一般指示表示赞赏!
答案 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匹配的记录,并使用新的代理键更新它们。
虽然我希望有更多有经验的人接受这个问题。