4

新しい DB 設計で SQL Server データベースに移行したい MS Access データベースがあります。SQL Server DB を使用するアプリケーションの一部は既に作成されています。

移行手順を最も簡単に実行する方法を見つけるために周りを見回し、Microsoft の SQL Server Integration Services (SSIS) から始めました。ここで、正規化のためにテーブルを垂直に分割したいところまで来ました。

作った例はこんな感じ

MS Access テーブルパーソン

ID
Name
Street

SQL Server テーブルパーソン

id
name

SQL Server テーブルアドレス

id
person_id
street

SSIS を使用してこのタスクを最適に完了するにはどうすればよいですか? id 列は ID (自動インクリメント) 列であるため、古い ID を挿入することはできません。アドレス テーブルに正しい person_id 外部キーを配置するにはどうすればよいですか?

table2 の行が table1 に属し、table3 の行が table2 の行に属している 3 つのテーブルに分割する必要があるテーブルさえあるかもしれません。

SSIS はこれに適した手段ですか?

編集 これは 1 回限りの移行ですが、自動化された反復可能なプロセスが必要です。これは、運用データベースが頻繁に使用されており、開発環境で最新ではなく最新のデータを使用して移行に取り組んでいるためです。 . 移行の 1 回のテスト実行を計画し、顧客に動作を確認してもらいます。問題がなければ、実際の移行に進みます。

指定されたソリューションのほとんどには、多くの手動の手順が含まれているため、適切ではありません。

4

5 に答える 5

3

AccessテーブルをSQLServerに移行するには、Accessのアップサイジングウィザードではなく、SSMAを使用します。
あなたはあなたの処分でより多くのツールを手に入れるでしょう。

次に、SQLServer内からテーブルを1つずつ分割できます。
テーブルを自動的に分割するのに役立つツールがあるかどうかはわかりませんが、少なくとも見つけることはできませんでしたが、元のテーブルの使用方法によって必要な作業量は異なりますが、手動で行うのはそれほど難しくありません。そもそもVBAコードとフォームで。

サイドノート

正規化に関しては、やりすぎないでください。あなたの例はそれだけでしたが、顧客の住所を正規化する必要があるとは限りません(まれに?)。

人はいくつの住所を持つことができますか?
自宅の住所、会社の住所、配達先住所、請求先住所を数えると、おそらくこれまでで最も必要なものになります。
その場合は、それらを同じテーブルに保持することをお勧めします。そのデータを正規化すると、再結合するためにより多くの作業が必要になり、メリットはありません。
もちろん、正規化するのが理にかなっている場合もありますが、人々がその概念に乗り越えて(私もそれについて罪を犯しています)、その後、すべての分割に参加するためのより複雑なクエリを構築するのに苦労しているのを見てきましたデータにより、開発と保守が困難になり、プロセスでパフォーマンスが低下することがよくあります。

于 2009-03-14T02:29:55.180 に答える
1

Access は非常に使いやすいので、Access でテーブルを正規化し、そこから完成した構造をアップサイズしてみませんか?

于 2009-03-14T22:46:08.807 に答える
0

まだ言及されていない別のソリューションを見つけて、データフロータスクのすべての快適さとオプションを使用できるようにしました。

宛先データベースがローカルSQL Server にある場合は、OLE DB 宛先の代わりに SQL Server 宛先でデータフロー タスクを使用できます。SQL Server 宛先の場合、「アイデンティティを保持」オプションをマークできます。(ドイツ語版があるため、英語名が正しいかどうかはわかりません。) これで ID 列に書き込むことができます。

複数のテーブルからのレコードの結合を取るテーブルがいくつかあるため、どこでも古い主キーを使用できないことがわかりました。

列を含む一時的なマッピング テーブルを作成することからプロセスを開始します。

new_id (identity)
old_id (int)
old_tablename (string)

最初に、新しいスキーマの外部キーによって参照されるすべてのテーブルのすべての old_id を入力します。new_id 値は、SQL Server によって自動的に生成されます。

したがって、結合を使用して、必要に応じて old_id から new_id に変換できます。new_id 値を使用して、新しいテーブルの ID (主キー) 列に「ID を保持」オプションを入力し、結合によって外部キーのマッピング テーブルを簡単に検索できます。

于 2009-03-18T10:16:39.660 に答える
0

Jamie ThomsonSSIS Normalizerコンポーネントも参照してください。今日初めて知りました(実際に試したことはありません)。彼が投稿した例は、あなたの質問のものとよく似ています。

于 2009-04-27T23:44:25.743 に答える