親テーブルを更新する際の子テーブルのためのオプション

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  データソースとターゲット > MapForce とデータベース > データをデータベースにマップする >

親テーブルを更新する際の子テーブルのためのオプション

マッピングは、「親」 テーブルであるテーブルを更新する際、  (つまり、テーブルに対して外部キー リレーションシップ持っている場合)、ソースデータとターゲットテーブル内で、どのように依存するレコードが扱われるかを構成することができます。例えば、altova.mdb データベース内の「Department」 テーブルを更新するとします。すべての個人 は、外部キーを使用して、 department に、リンクされています。「Person」 テーブルに対しても、(挿入、更新、または削除などの)アクションを取る必要があるかもしれません。 これを行うことは、データベースの整合性を保持し、マッピングエラーを回避する助けとなります。

 

このトピックは、親 「Department」 テーブルを更新した際に、 「Person」 テーブルに対して使用することのできるオプションについて説明しています。以下のサンプルファイルが使用されています:

 

altova-cmpy-extra.xml — データベースに挿入されるソースデータを含んでいます。
Altova_Hierarchical.xsd — 上記のインスタンスファイルを検証するために使用されるスキーマです。
altova.mdb — 更新されるターゲットデータベースです。

 

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

 

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

 

最初に、ソース XML スキーマとインスタンスとターゲットデータベースをマッピングに追加します (次を参照: 例: "altova.mdb" データベースをマッピングに追加する)「以下の条件で更新し、残りを挿入」 アクションと同じステップを踏んでください。 次に、以下に表示されるようにマッピングの接続を描きます:

 

mf_db_child_table_01

 

上記のように、 マッピングは、ターゲットデータベース内の 「Department」 テーブルを更新します。「Department」 テーブル は、「ルート」 テーブルとして選択されています。ルートテーブルに関する情報と、その重要性に関する詳細は、次を参照してください: データベースリレーションシップの処理。 子 「Person」 テーブルに対して取られるアクションは、このトピックの主題です。

 

次の テーブルは、多種の構成オプションと対応するマッピングの結果を表しています。これらのオプションは、親 「Department」 テーブル と 子 「Person」 テーブルのデータベース テーブル アクション ダイアログボックスから選択することができます。

 

構成 A

設定

マッピングの結果

mf_db_child_table_02

「Department」 テーブル

mf_db_child_table_03

「Person」 テーブル

ソース XML 内の PrimaryKey がデータベーステーブル内の PrimaryKey に対応する箇所で、Department レコードを更新します。
入力 XML ファイル内に対応するレコードを持たない (このようなキーはソースに存在しません)既存の Department レコードを更新しません。
データベース内で既存ではないすべての Person レコードを、入力 XML インスタンスから挿入します。
「以下の条件で更新する...」 条件を満たす Department レコードの子データ(Person レコード) を削除します。

 

構成 B

設定

マッピングの結果

mf_db_child_table_04

「Department」 テーブル

mf_db_child_table_03

「Person」 テーブル

SQL 実行エラーと共にマッピングは失敗します。理由は、マッピングが、新規のPerson レコードを既存のPerson レコードと同じ主キーを使用して挿入しようと試みたからです。 入力 XML からのレコードを、データベース内に既存のレコードに加えて追加する場合は、次を参照してください。

 

 

構成 C

設定

マッピングの結果

mf_db_child_table_04

「Department」 テーブル

mf_db_child_table_06

「Person」 テーブル

ソース XML 内の PrimaryKey がデータベーステーブル内の PrimaryKey に対応する箇所で、Department レコードを更新します。
入力 XML ファイル内に対応するレコードを持たない (このようなキーはソースに存在しません)既存の Department レコードを更新しません。
新規のPerson レコード (生成された主キーと共に) は、既存のもに加え、 Person テーブルに挿入されます。

 

 

構成 D

設定

マッピングの結果

mf_db_child_table_05

「Department」 テーブル

mf_db_child_table_03

「Person」 テーブル

ソース XML 内の PrimaryKey がデータベーステーブル内の PrimaryKey に対応する箇所で、Department レコードを更新します。
入力 XML ファイル内に対応するレコードを持たない (このようなキーはソースに存在しません)既存の Department レコードを更新しません。
オプション 入力子データを無視する が 親 Department テーブルのために有効化されているため、Person テーブルにレコードは挿入されません。

 

 

構成 E

設定

マッピングの結果

mf_db_child_table_02

「Department」 テーブル

mf_db_child_table_07

「Person」 テーブル

ソース XML 内の PrimaryKey がデータベーステーブル内の PrimaryKey に対応する箇所で、Department レコードを更新します。
入力 XML ファイル内に対応するレコードを持たない (このようなキーはソースに存在しません)既存の Department レコードを更新しません。
ソース XML 内に対応する、 PrimaryKey  をもつ Department にリンクされているレコードを全て削除します。理由は、親 Department テーブルのために 「子テーブル内のデータの削除」 オプションが有効化されているからです。
「以下の条件で更新する...」 条件を満たさなかった部署にリンクされているPerson レコードは、データベースに残されます。
Person テーブル内のレコードは更新されていません。

 

 

構成 F

設定

マッピングの結果

mf_db_child_table_02

「Department」 テーブル

mf_db_child_table_08

「Person」 テーブル

ソース XML 内の PrimaryKey がデータベーステーブル内の PrimaryKey に対応する箇所で、Department レコードを更新します。
入力 XML ファイル内に対応するレコードを持たない (このようなキーはソースに存在しません)既存の Department レコードを更新しません。
ソース XML 内に対応する、 PrimaryKey  をもつ Department にリンクされているレコードを全て削除します。この理由は、「子テーブル内のデータの削除」 オプションは、 親 Department テーブルのために有効化されているからです。
「以下の条件で更新する...」 条件を満たさなかったDepartment にリンクされている Person レコードは、データベースに残されます。

 

 

構成 G

設定

マッピングの結果

mf_db_child_table_04

「Department」 テーブル

mf_db_child_table_08

「Person」 テーブル

ソース XML 内の PrimaryKey がデータベーステーブル内の PrimaryKey に対応する箇所で、Department レコードを更新します。
入力 XML ファイル内に対応するレコードを持たない (このようなキーはソースに存在しません)既存の Department レコードを更新しません。
次の2つの条件を満たす、すべての Person レコード を削除します:

 

a.対応する ソース XML 内に対応する PrimaryKey が存在する Department にリンクされている Person レコード。
b.対応する ソース XML 内に対応する PrimaryKey が存在する Person レコード

(C) 2019 Altova GmbH