根据列服从约束将表中的数据行拆分成多个表
我有一个包含大约20列数据的源平面文件,大约有11K条记录。每个记录(行)包含如下信息:根据列服从约束将表中的数据行拆分成多个表
patientID PatietnSSN.PatientDOB PatientSex PatientName Patientaddress PatientPhone PatientWorkPhone PatientProvider PatientReferrer PatientPrimaryInsurance PatientInsurancePolicyID。
我的目标是将这些数据移到sql数据库。
我创建了一个数据库与以下数据模型
我知道想要做一个批量插入移动的所有记录但我不确定如何做到这一点,你可以看到有和必须受到限制才能确保参照完整性。我的方法应该是什么?我是否全部错了?到目前为止,我已经使用SSIS将数据导入到单个临时表中,现在我必须弄清楚如何将11k plus记录写入到它们所属的单个表中......所以临时表的记录1将创建1条记录跨越几乎所有的表格,减去可能存在诸如“提供者”和“推荐者”之类的1对多关系的那些关系,因为一个提供者将与许多患者相关联,但一个患者只能有一个提供者。
我希望我已经解释得很好。请帮忙!
由于问题是一般性问题,我会以通用的方式处理答案 - 试图至少让您提出正确的问题。
您的目标是将平面文件数据存入关系数据库。这是一个非常常见的操作,至少是ETL过程的一个子集。因此,您可能想通过阅读更多有关ETL的知识开始您的搜索。
我认为你的根本问题是双重的。首先,您需要插入大量数据。其次,你插入到关系数据库中。
从第二个问题开始;并非所有数据都可以每次插入。例如,您有一个与病人保持1:多关系的提供者表。这意味着您必须提问您的平板电脑中每个患者行的问题,以确定提供者是否存在或需要创建。此外,您拥有种子ID,这意味着在某些情况下,您必须维护创建顺序,以便您可以在下一个创建的条目中引用已创建条目的ID。这对您意味着什么,您的努力将比一组简单的SQL插入更复杂。你需要与努力相关的逻辑。有几种方法可以解决这个问题。
- 纯SQL/TSQL;它可以完成,但会很多工作,很难调试/排除故障
- 编写一个程序:这给你很大的灵活性,但意味着你将不得不知道如何编程和使用编程工具来处理数据库(如ORM)
- 使用自动ETL工具; some examples
- 使用SQL Server的平面文件导入功能
- 使用具有导入功能的IDE - 例如Toad,Datagrip,DBeaver等
这些方法中的每一个都需要您的研究和学习 - 本论坛无法教您如何使用它们。关于你想使用哪一个的决定在一定程度上取决于该过程应该如何实现自动化。
关于你的第一个问题 - 大量数据插入。 SQL有批量插入docs的功能,但您必须先调整数据。
个人(根据我的意见),我是一个.Net开发人员。但考虑到这个任务,我仍然会用Python编写它。学习曲线在Python中非常实用,它有许多用于处理文件和数据库的强大工具。 .Net和EF在开始使用python的时候需要知道的很多开销 - 但那只是我自己。
希望这可以帮助你开始。
史蒂夫你是老板先生哇谢谢埃德坦克给你!我已考虑到每个人的指导意见,并得出结论认为我不能为此解决一个简单的解决方案。更大的影响,因此完成这项地面工作任务是有道理的,这样我就可以利用我的努力为未来的项目。我将继续使用一个简单的.net Web应用程序来使用EF来处理数据模型并编写一个简单的导入程序来将数据拉入。我有一个关于如何完成此任务的概念,但是在此板的帮助下,我我一定会成功!感谢所有-乔伊
为了记录工具,我打算使用(我用的复杂性认同和学习曲线意见,但对微软产品的亲和力)
1)Azure的SQL数据库(数据存储) 2)的Visual Studio 2017年CE(IDE) 3)C#(郎) 4).NET MVC(项目型) 5)EF 6(ORM) 6)格雷斯(因为我只是个普通人:-)
考虑查看SQLServer中的存储过程/函数支持。您可能可以编写一些例如可以例如插入一条主要记录,返回该id,然后插入相关记录并返回该ID的引用。 –
除非你真的需要它,否则我会删除appt/providers引用 - 循环依赖会导致你额外的工作。另外,你会用什么工具来更新数据库?原始SQL或编程语言?如果建模正确,许多ORM将为您处理此问题。如果要求我这样做,我会用Python编写脚本,或者使用诸如expressor之类的ETL工具。 – SteveJ
@ed Orsi不会违反约束限制很像SSIS包倾向于,因为它不会做任何特定的顺序插入,所以我没有办法控制什么记录写第一秒等...? –