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

Altova MapForce 2020 Enterprise Edition

リレーショナル データベースは、その名前が示すように、テーブル間にリレーションシップを持ちます。フォルダー <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\Tutorial\ にある altova.mdb データベースを例にしてみると、複数のリレーションシップが存在することに気がつきます:

 

サンプルの会社 (テーブル 「Altova」 に対応する) 1つまたは複数のオフィスから構成されています(例えば、 1つは、東京に、もう1つは名古屋に存在するとします)。 データベース用語では、「Altova」 と 「Office」 テーブル間に1つ対複数の すなわち、 「Altova」テーブル内の各 「PrimaryKey」 レコードのために、  「Office」 テーブル内で複数の 「ForeignKey」 レコードが存在することができます。 「ForeignKey」 値が、 「Altova」 内の 「PrimaryKey」値と対応する 「Office」の箇所は、「Altova」 のオフィスとして考えされます。

各オフィスは、1つまたは複数の部署(例えば、「Marketing」、「IT」、「Development」) から構成されています。「Office」 と 「Department」 テーブル間に1つと複数のリレーションシップが存在します。

最後に、 各部署は、複数の社員から構成されています。ですから、 1つ対複数の リレーションシップは、「Department」 と 「Person」 テーブル間のリレーションシップです。

mf_db_relationships_01

altova.mdb データベース 内のテーブル リレーションシップ (Microsoft Access "リレーションシップ" ビュー)

データベース テーブル間のリレーションシップは、マッピングの目的にとって重要です。 MapForce は、データベースをマッピングに追加する際に、このようなデータベースリレーションシップの個々の変更を記録します。これにより、データをデータベースにマッピングする際、またはデータベースにデータをマッピングする際、データベースリレーションシップを保持することができます。この概念をより良く理解するために、( 挿入 | データベース メニューコマンドを使用して) altova.mdb データベースをマッピングに追加します。「ルート」 テーブルの下のテーブルを呼び出します:

mf_db_relationships_02

「ルート」 テーブル

「ルート」 テーブルを展開すると、ツリービュー内に存在する、すべての関連するテーブルが表示されます。例えば、Office テーブルを展開すると、関連したテーブルの階層が表示されます:

 

テーブルの前の左矢印 ( mf_ic_db_left_arrow ) は、このテーブルが子テーブルであることを表示しています。例えば、 Address は、 Office の子です。DepartmentOffice の子であり、また、 Address の兄弟テーブルであり、同じインデントのレベルに存在します。表示されているように、 マッピング上の リレーションシップは、上の 「リレーションシップ」 ダイアグラムに対応しています。

テーブルの前の右矢印 ( mf_ic_db_right_arrow )は、このテーブルが親テーブルであることを表示しています。例えば、 Altova は、Office の親です。  

mf_db_relationships_03

MapForce 内のテーブル リレーションシップ  (altova.mdb データベース)

テーブルの階層の表示は、 マッピングがデータベースから読み取る、またはデータベースへ書き込む際に既存のデータベースリレーションシップを保存する手助けをします。例えば、 Person テーブルから全てのレコードを取得し、 XML ファイルに各個人を部署にグループ別に入力するとします。具体的には、 XML ファイルは、この例で使用されている altova.mdb データベースのように、各個人を部署にリンクします:

mf_db_relationships_04

 

上記のように、 「Administration」 部署は、3人の社員、 「Marketing」 部署には、2人の社員、 「Engineering」 部署には6人の社員が所属しています。

 

この データベースからデータをマッピングする場合、各社員が正確な部署に割り当てられる場合、「ルート」 テーブルとして、 Department を使用することは重要で、 Department の子である Person テーブルからマップします :

mf_db_relationships_05

 

上のマッピングは、 <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\ フォルダー内の DB_Altova_Hierarchical.mfd ファイルに変更を加えたマッピングです。 マッピングをプレビューする際には、各個人の結果は、意図とされる振る舞いであるとおり、部署別にグループ化されます。 「Administration」 には、3人、 「Marketing」 には、2人、 「Engineering」 には6人、などの結果が得られます。

mf_db_relationships_06

 

若干修正の加えられた下のマッピングを確認してください。 DepartmentPerson の両方に接続が意図的に描かれているため両方が 「ルート」 テーブルとなっています。

mf_db_relationships_07

 

マッピングをプレビューすると、 (ソースの部署に関係なく) すべての 個人は、各ターゲット部署の下にグループ別に表示されています。これは意図とされた振る舞いではありません。つまり、つまり、 「Administration」 に21人の社員が存在し、「Marketing」 に21人の社員が存在し、「Engineering」 に21人の社員が存在するなどという結果を指します。

mf_db_relationships_08

 

第2番目の例では、 データベースリレーションシップは、接続の方法のため無視されています。

 

ですから、データベースリレーションシップを保持する場合、 リレーションシップを保持する子テーブルを含むことを、または同じ 「ルート」 テーブルから接続が描かれていることを確認してください。これは、ソースとターゲットデータベースと同じように作動します。リレーションシップを保持するデータベースマッピングの例に関しては: <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\ フォルダー内にあるDB_Altova_Hierarchical.mfdAltova_Hierarchical_DB.mfd ファイルを参照してください。 (次も参照してください: データを複数にリンクされているテーブルに挿入する)。

 

データベースリレーションシップを保持しない場合もあります。例えば、 altova.mdb データベースからの全てのデータを、 SQL/XML 仕様 (Structured Query Language (SQL) 仕様のパート 14 に準ずる)フラットな XML ファイルにエクスポートすると想定します。この種類のマッピングは、 <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\ フォルダ内の DB_Altova_SQLXML.mfd サンプルにより説明されています。マッピングの目的は、フラットな XML ファイルとしてデータベースデータを取得することです。 ターゲット SQL/XML スキーマは、 XMLSpyで 「変換 | DB 構造から XML スキーマを作成する」 メニューコマンドを使用して生成することができます。

mf_db_relationships_09

DB_Altova_SQLXML.mfd

上記のように、各データベーステーブルには、対応する要素がターゲット XML 内に存在します。マッピングの結果をプレビューすると、実際のデータベースの行は、ターゲット内の 「行」 要素に書き込まれていることが確認されます。

mf_db_relationships_10

 

XML 出力が示すように、XML 要素間には、階層は存在しません。 これはフラットな SQL/XML 構造です。複数の 「ルート」 テーブルからのデータが内部でマップされたために、データベースリレーションシップは、無視されます。

(C) 2019 Altova GmbH