根据列服从约束将表行数据拆分为多个表

时间:2017-11-10 22:18:30

标签: sql-server ssis foreign-keys data-modeling referential-integrity

我有一个源平面文件,大约有20列数据,大约有11K记录。每条记录(行)都包含诸如

之类的信息

patientID,PatietnSSN.PatientDOB,PatientSex,PatientName,Patientaddress,PatientPhone,PatientWorkPhone,PatientProvider,PatientReferrer,PatientPrimaryInsurance,PatientInsurancePolicyID。

我的目标是将此数据移至sql数据库。

我使用以下数据模型创建了一个数据库

我知道想要进行批量插入以移动所有记录但是我不确定如何做到这一点,因为您可以看到存在并且必须是约束以确保参照完整性。我的方法应该是什么?我错了吗?到目前为止,我已经使用SSIS将数据导入到一个临时表中,现在我必须弄清楚如何将11k plus记录写入它们所属的各个表中......因此,登台表的记录1将创建1条记录在几乎所有的表格中减去可能存在1个到多个关系的那些表格,例如“提供者”和“推荐者”作为一个提供者将链接到许多患者,但是一个患者只能有一个提供者。

我希望我已经解释得这么好了。请帮忙!

2 个答案:

答案 0 :(得分:0)

由于问题是通用的,我也会以通用的方式处理答案 - 试图至少让你问正确的问题。

您的目标是将平面文件数据导入关系数据库。这是一种非常常见的操作,至少是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没有 - 但这只是我。

希望这有助于您入门。

答案 1 :(得分:0)

史蒂夫你是老板先生哇谢谢你 - 爱德坦克也给你了!我已经考虑了每个人的指导,并得出结论,我无法通过一个简单的解决方案来解决这个问题。因此有更大的意义所以以这样的方式完成这个基础工作任务是有意义的利用我的努力为未来的项目。我将继续使用一个简单的.net网络应用程序,使用EF来处理数据模型并编写一个简单的导入程序来提取数据。我有一个概念,我将如何实现这一点,但在这个板的帮助下我和#39;我一定要成功!谢谢所有Joey

对于我打算使用的记录工具(我同意复杂性和学习曲线意见,但对MS产品有亲和力)

1)Azure SQL数据库(数据存储) 2)Visual Studio 2017 CE(ide) 3)C#(郎) 4).net MVC(项目类型) 5)EF 6(orm) 6)恩典(因为我只是人类: - )