0

私は約20列のデータと約11Kのレコードを持つソースフラットファイルを持っています。各レコード(行)は、分割テーブル列を複数のテーブルに分割する列に従う

patientID、PatietnSSN.PatientDOB、PatientSex、PatientName、Patientaddress、PatientPhone、PatientWorkPhone、PatientProvider、PatientReferrer、PatientPrimaryInsurance、PatientInsurancePolicyIDなどの情報を含んでいます。

私の目標は、このデータをSQLデータベースに移動することです。

私は私が知っているデータモデル

以下を使用してデータベースを作成している私はあなたが見ることができるように存在していることを行うには方法がわからないよしかし、すべてのレコードを移動するために一括挿入をしたいと参照整合性を保証するためには制約が必要です。私のアプローチは何ですか?私はこれについてすべて間違っているのですか?これまでSSISを使用してデータを単一のステージングテーブルにインポートしていましたが、11k plusレコードをそれぞれのテーブルに書き込む方法を理解する必要があります。ステージングテーブルのレコード1はレコードを1つ作成しますほとんどすべてのテーブルで、プロバイダとリファラのような1対多の関係が存在する場合は、1つのプロバイダが多くの患者にリンクされますが、1人の患者には1つのプロバイダしかない場合があります。

これを十分に説明していただければ幸いです。助けてください!

+0

を考えてみましょう人間だけ:-)だ原因SQLServerでストアドプロシージャ/関数のサポートを調べています。次のようないくつかの手順を作成できます。メインレコードを挿入してIDを返し、関連するレコードをその返されたIDへの参照とともに挿入します。 –

+0

本当に必要な場合を除いて、私はappt/providersのリファレンスを削除したいと思います - 循環依存が余分な仕事を引き起こします。また、どのツールを使用してDBを更新しますか?生のSQLまたはプログラミング言語?正しくモデル化されていれば、多くのORMがあなたのためにこれを処理します。これを私に依頼していたのですが、私はPythonでそれをスクリプト化したり、エクスプレッサーのようなETLツールを使ったりしていました。 – SteveJ

+0

@ed Orsiは、SSISパッケージがどんな特定の順序でも挿入されないので、これが制約に違反することはないでしょう。そうすれば、どのレコードが最初に書き込まれるかなどを制御する方法がありません。 –

答えて

0

質問が一般的なので、私は一般的なやり方で答えを出します。正しい質問をするようにします。

目的は、フラットファイルデータをリレーショナルデータベースに取得することです。これは非常に一般的な操作であり、少なくともETLプロセスのサブセットです。したがって、ETLの詳細を読むことで検索を開始することもできます。

あなたの基本的な問題は、私が見ているように、2つです。まず、大量のデータを挿入する必要があります。次に、リレーショナルデータベースに挿入します。

最初に2番目の問題から始めます。毎回、すべてのデータを挿入できるわけではありません。たとえば、患者との1:多くの関係を保持するプロバイダテーブルがあります。これは、プロバイダが存在するかどうか、または作成が必要かどうかについて、フラットテーブルの各患者行の質問をする必要があることを意味します。また、IDをシードしました。つまり、作成されたエントリのIDを参照できるように、作成順序を維持する必要がある場合があります。これが意味することは、SQLインサートの単純なセットよりも複雑になることです。努力に関連したロジックが必要です。これにはいくつかの方法があります。

  • Pure SQL/TSQL;達成することはできますが、多くの作業とデバッグ/トラブルシューティングが難しくなります
  • プログラムを書く:これは非常に柔軟性がありますが、プログラミングツールをプログラミングして使用する方法を知る必要があります。データベース(ORMなど)
  • 自動化されたETLツールを使用します。 some examples
  • SQL Serverのフラットファイルインポート機能を使用する
  • Toad、Datagrip、DBeaverなどのインポート機能を持つIDEを使用します。

これらのアプローチのそれぞれは、あなたの一部でいくつかの研究と学習を行います - このフォーラムでは、それらを使用する方法を教えることはできません。どのプロセスを使用するかは、プロセスの自動化の方法によって多少異なります。

あなたの最初の問題について - 大きなデータが挿入されました。 SQLには一括挿入用の機能がありますが、最初にデータの条件を設定する必要があります。

個人的に(私のコメントに従って)、私は.Net開発者です。しかし、このタスクを与えても、私はまだPythonでそれをスクリプト化します。学習曲線はPythonでは非常に親切で、ファイルやデータベースを扱うための素晴らしいツールがたくさんあります。 .NetとEFは、Pythonが始めるために知る必要があるものに関して、多くのオーバーヘッドを伴いますが、それは私だけです。

希望すると、この機能を使用すると便利です。

0

スティーブ・ユー・ラ・ボス・サー・ワウ・ウォーありがとう〜エド・タンクにも!私は全員の指導を考慮に入れて、このための簡単な解決策を取り除くことはできないと結論づけました。より大きな意味があるので、私の努力を利用できるようにこの基本的な作業を達成することが理にかなっています将来のプロジェクトのために。私は単純な.net Webアプリケーションを使用して、データモデルの世話をし、データを取り込むための簡単なインポート手順を書くためにEFを使用します。私はこれをどのように達成するかという考えを持っていますが、このボードの助けを借りて成功するのは確実だと思います!おかげで、すべての-ジョーイ

私は(私は複雑に同意し、カーブの意見を学ぶが、MS製品との親和性を持っている)

1)のAzure SQLデータベース(データストア) 2を使用する予定のレコードツール用) Visual Studioの2017 CE(IDE) 3)C#(ラング) 4).NET MVC(プロジェクトタイプ) 5)EF 6(ORM) 6)グレース(私は

関連する問題