0

我有一個包含大約20列數據的源平面文件,大約有11K條記錄。每個記錄(行)包含如下信息:根據列服從約束將表中的數據行拆分成多個表

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

我的目標是將這些數據移到sql數據庫。

我創建了一個數據庫與以下數據模型

我知道想要做一個批量插入移動的所有記錄但我不確定如何做到這一點,你可以看到有和必須受到限制才能確保參照完整性。我的方法應該是什麼?我是否全部錯了?到目前爲止,我已經使用SSIS將數據導入到單個臨時表中,現在我必須弄清楚如何將11k plus記錄寫入到它們所屬的單個表中......所以臨時表的記錄1將創建1條記錄跨越幾乎所有的表格,減去可能存在諸如「提供者」和「推薦者」之類的1對多關係的那些關係,因爲一個提供者將與許多患者相關聯,但一個患者只能有一個提供者。

我希望我已經解釋得很好。請幫忙!

+0

考慮查看SQLServer中的存儲過程/函數支持。您可能可以編寫一些例如可以例如插入一條主要記錄,返回該id,然後插入相關記錄並返回該ID的引用。 –

+0

除非你真的需要它,否則我會刪除appt/providers引用 - 循環依賴會導致你額外的工作。另外,你會用什麼工具來更新數據庫?原始SQL或編程語言?如果建模正確,許多ORM將爲您處理此問題。如果要求我這樣做,我會用Python編寫腳本,或者使用諸如expressor之類的ETL工具。 – SteveJ

+0

@ed Orsi不會違反約束限制很像SSIS包傾向於,因爲它不會做任何特定的順序插入,所以我沒有辦法控制什麼記錄寫第一秒等...? –

回答

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的時候需要知道的很多開銷 - 但那只是我自己。

希望這可以幫助你開始。

0

史蒂夫你是老闆先生哇謝謝埃德坦克給你!我已考慮到每個人的指導意見,並得出結論認爲我不能爲此解決一個簡單的解決方案。更大的影響,因此完成這項地面工作任務是有道理的,這樣我就可以利用我的努力爲未來的項目。我將繼續使用一個簡單的.net Web應用程序來使用EF來處理數據模型並編寫一個簡單的導入程序來將數據拉入。我有一個關於如何完成此任務的概念,但是在此板的幫助下,我我一定會成功!感謝所有-喬伊

爲了記錄工具,我打算使用(我用的複雜性認同和學習曲線意見,但對微軟產品的親和力)

1)Azure的SQL數據庫(數據存儲) 2)的Visual Studio 2017年CE(IDE) 3)C#(郎) 4).NET MVC(項目型) 5)EF 6(ORM) 6)格雷斯(因爲我只是個普通人:-)