このサイトをビューするために JavaScript を有効化してください。

Altova MapForce 2020 Enterprise Edition

データベース テーブルは、 「親」 テーブルである可能性があります。つまり、このテーブルはデータベース内の他のテーブルに外部キー リレーションシップ.を使用して参照されている可能性があります。このような場合、マッピングに親テーブルだけでなく、依存する子テーブルにもレコードを挿入するように構成することができます。例えば、新規の"company" レコードをデータベーステーブルに挿入する場合、レコードをこの会社に関連したオフィス、オフィスの部署、社員などのためにも挿入することができます。

 

この例は、データベースリレーションシップを保持しつつ、複数のテーブルにデータを挿入する方法について説明しています。この例は前の例であるデータをテーブルに挿入するを若干高度にしたバージョンです:

 

Altova_Hierarchical.mfd — 実際のマッピングファイルです。

Altova_Hierarchical.xml — データベースに挿入されるソースデータを含んでいます。

Altova_Hierarchical.xsd — 上記のインスタンスファイルを検証するために使用されるスキーマです。

AltovaTarget.mdb — 更新されるターゲットデータベースです。

 

全てのファイルは <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\ フォルダー内にあります。 下の説明では、簡素化のために、これらのファイルへの完全なパスは省略されています。

 

この例のマッピングは、サンプルデータベースファイルを変更します。元のデータベースをバックアップし、下記のステップを開始する前に、新規のコピーを起動することが奨励されます。することが奨励されます。バックアップを作成することにより、元の例が上書きされず、下記と同じ結果を得ることができます。詳細に関しては、次を参照してください:データベースを変更するマッピングの実行

 

マッピングの目的は、 ソースからのデータ XML ファイルを持つターゲットデータベース (AltovaTarget.mdb) 内のデータを置き換えることです。XML ファイル構成は、データベース内の テーブルの階層構造 に大体対応します。これは、以下のように構成されている組織図です: 一番上の要素は、2つのオフィスと含む会社で、各オフィスには部署が存在し、各部署には社員が存在します。同じ階層は、 「Altova」 テーブルが会社に対応する AltovaTarget.mdb 内にも存在します。このテーブルは、外部キー リレーションシップを介して、「Office」 テーブル内のレコードにリンクされています。同様に、 「Office」 は、 「Department」 にリンクされており、「Department」 は、 「Person」 にリンクされています。AltovaTarget.mdb データベースのリレーションシップの図を確認するには、 Access のリレーションシップビューでファイルを開きます(次も参照してください: データベースリレーションシップの扱い)。

 

ステップ 1: ソース XML コンポーネントを挿入する

「挿入」メニューから、「XML スキーマ/ファイル」をクリックして、Altova_Hierarchical.xsd を参照します。インスタンスファイルを与えるように問われると、Altova_Hierarchical.xml を参照してください。

 

 

ステップ 2: ターゲットデータベースを挿入する

「挿入」メニューから、「データベース」をクリックして、 AltovaTarget.mdb に接続するためにウィザードのステップを行ってください。 データベースへの接続方法は、 altova.mdb への接続方法と同じです。 (次を参照してください: 例: "altova.mdb" データベースをマッピングに追加する)。

 

ステップ 3: 接続を描く

下に表示されるとおりマッピングの接続を描きます。主キーと外部キーがマップされていないことに注意してください。下に表示されるように素早く生成されます。

mf_db_insert_multiple_01

メモ:希望しない接続が自動的に子孫アイテムに作成される場合は、「一致する子を自動的に接続する」が有効化されています。 この場合、最後の アクションを元に戻すには、 メニューオプション 「編集 | 元に戻す」 を選択します。自動接続オプションを無効化するには、「接続 | 一致する子を自動的に接続する」を選択します。

 

ステップ 4: 挿入アクションを構成する

1.ターゲットコンポーネント上で、 「Altova」 テーブルの横の アクション: 挿入 ( tbl-act-icon ) ボタンをクリックし、下に示されるとおり、主キー max() + 1 設定を構成します。この設定に関しては、前の例で更に詳しく説明されています。次を参照してください:データをテーブルに挿入する

 

mf_db_insert_multiple_02

 

また、「全てのレコードの削除」 オプションが有効化されていることに注意してください。これは、この例で希望される振る舞いどおり、新規のレコードが挿入される前に、テーブルからの既存のレコード全てをクリアします。このオプションを無効化すると、 (新規の主キーを持つ) 新規のレコードは、既存のレコードに加え、マッピングを実行する都度、既存のレコードに加え、データベースに追加されます。

 

この例のスコープのために、 「子テーブルから全てのレコードの削除」 オプションも有効化されています。このオプションにより、「Altova」 テーブルからレコードが削除されるだけではなく、外部キー リレーションシップを使用して 「Altova」 テーブルにリンクされているすべてのテーブル内のレコードも削除します。子テーブルに子が存在する場合、はこれらの子テーブルも削除され、依存関係ツリー 内の最後のテーブルまで削除されます。ルート 「Altova」 テーブルからレコードを削除することは、データベースの整合性の違反であり、 マッピングの実行は、失敗します。

 

データベース テーブル アクション ダイアログボックスで使用することのできる他のオプションに関しての詳細は、次を参照してください:データベーステーブルアクション設定

 

2.ダイアログボックスを閉じるために「OK」をクリックします。マッピングエリアで、ボタンの外観が mf_db_ic_delete_action_insert に変更されたことに注意してください。これは、 "Delete" ステートメントが「挿入」 アクションの前に実行されることが構成されていることを示します。

3.「Office」 テーブル の横の tbl-act-icon ボタン をクリックし、主キーの max() + 1 設定を構成します。

mf_db_insert_multiple_03

4.「Office」から降順し、各テーブルのためにステップ 3 を行います。具体的には、 「Address」、 「Department」、 および 「Person」です。 これらすべてのテーブルがルート 「Altova」 テーブルの直接の子孫であることを確認してください。 「ルート」 テーブルの詳細とその重要性に関しては、次を参照してください:データベースリレーションシップの扱い

 

 

ステップ 5: マッピングをプレビューし、データベースを更新する

 

マッピングをプレビューするために「出力」タブをクリックします。データベースに対して実行されるアクションを含む、 SQL スクリプトが生成されます。スクリプトは、まだ、データベースを変更していません。 これはまだプレビューです。

 

データベースに対してスクリプトを実行するには以下を行います:

 

「出力」 メニューから、「SQL-スクリプトの実行」をクリックします。

 

メモ:MapForce から直接 SQL スクリプトを実行することは、データベースを更新する方法のひとつです。次も参照してください: データベースを変更するマッピングの実行

 

結果を確認するには、Microsoft Access で 「Altova」 テーブルを開き、 「Altova」 テーブルから 「Person」 テーブルに、 XML ファイルからのリレーションシップがどのようにデータベースに伝達されているかを確認してください。

mf_db_insert_multiple_04

テーブルの整合性のリレーションシップを保持しつつ、複数の データベース テーブルへデータを挿入するマッピングの作成が完了しました。

(C) 2019 Altova GmbH