テーブルの結合とリレートについて

ほとんどのデータベース設計ガイドラインでは、1 つの大きなテーブルに必要なフィールドをすべて含めるのでなく、特定のトピックに焦点を絞った複数のテーブルにデータベースを整理することを奨励しています。複数のテーブルを使用すると、1 つのテーブルに情報が 1 つだけ格納されるため、データベースでの情報の重複を避けることができます。現在のテーブルに格納されていない情報が必要な場合は、2 つのテーブルをリンクすることができます。

たとえば、組織内の他の部署からデータを取得したり、市販のデータを購入したり、またはインターネットからデータをダウンロードすることがあります。この情報を dBASE、INFO、またはジオデータベース テーブルなどのテーブルに格納すると、データを地理フィーチャに関連付けてマップ上に表示することができます。

ArcGIS では、キーと呼ばれる共通のフィールドを通じて、あるテーブル内のレコードを別のテーブル内のレコードに関連付けることができます。これらの関連付けは、マップ内で一時的にテーブルを結合またはリレートする、より永続的な関連性を維持するリレーションシップ クラスをジオデータベースで作成するなど、さまざまな方法で行うことができます。たとえば、土地区画の所有情報のテーブルと土地区画レイヤは土地区画 ID フィールドを共有するため、これら 2 つを関連付けることができます。

2 つのテーブルを結合する際には共通のフィールドに基づいて、1 つのテーブルの属性をもう 1 つのテーブルに付加します。テーブルのリレートも、共通フィールドに基づいて 2 つのテーブル間のリレーションシップを定義しますが、1 つのテーブルの属性をもう 1 つのテーブルの属性に付加するのではなく、必要に応じて関連データにアクセスできるようにします。

テーブル内の属性の結合

一般に、結合する両方のテーブルに存在するフィールドの値に基づいて、データ テーブルをレイヤに結合します。フィールドの名前は同じでなくてもかまいませんが、データ タイプは同じでなければなりません。つまり、数値どうし、文字列どうしを結合します。結合は、ArcMap のレイヤを右クリックしてアクセスする [結合] ダイアログ ボックス、または [テーブル結合(Add Join)] ツールを使用して実行できます。

たとえば、都道府県別の人口変化率を示すデータが手元にあり、この情報を基にして人口増加マップを生成したいとします。人口データがデータベース内のテーブルに格納されていて、レイヤと共通のフィールドが存在する限りデータを地理フィーチャに結合し、追加フィールドのいずれかを使用して、レイヤのフィーチャのシンボル表示、ラベル付け、検索、または解析を行うことができます。

1 対 1 または多対 1 のリレーションシップ

ArcMap 内でテーブルを結合する際には、レイヤの属性テーブルと結合する情報が含まれたテーブルとの間で、1 対 1 または多対 1 のリレーションシップを確立します。次の例は、各都道府県とその都道府県の人口変化データとの 1 対 1 のリレーションシップを示しています。つまり、都道府県ごとに人口変化データが 1 つずつあります。

結合された人口データに基づくフィーチャのシンボル表示

次に、多対 1 のリレーションシップの例を示します。各ポリゴンを土地利用タイプに従って分類するレイヤがあるとします。レイヤの属性テーブルは、土地利用コードを格納するだけです。各土地利用タイプの完全な説明は、別のテーブルに格納されています。これら 2 つのテーブルを結合すると、レイヤの属性テーブルにある複数のレコードが土地利用の説明テーブルにある同じレコードに結合されるため、多対 1 のリレーションシップが確立されます。マップの凡例を生成する際に、さらに説明テキストを使用することができます。

多対 1 のリレーションシップの例
注意注意:

1 対多のリレーションシップに対して結合を作成すると、結合結果のレイヤでは最初に一致した項目のみが結合されます。

(空間)位置によるデータの結合

マップのレイアウト間で共通の属性フィールドが共有されていない場合、その属性フィールドを結合するには空間結合を使用します。空間結合はレイヤ内のフィーチャの位置に基づいて、2 つのレイヤの属性を結合します。

空間結合は、ArcMap のレイヤを右クリックしてアクセスする [結合] ダイアログ ボックス、または [空間結合(Spatial Join)] ツールを使用して実行できます。

空間結合では、次のいずれかの情報を見つけることができます。

位置による結合(空間結合)は、対象のレイヤ間の空間的な関連性を使用して、1 つのレイヤから別のレイヤにフィールドを付加します。属性結合やリレーションシップ クラスの結合とは異なり、空間結合は静的であり、結果を新しい出力レイヤに保存します。

空間結合の実行には、次に説明する 3 種類の関連付けのいずれかを使用することができます。

結合ダイアログ ボックスでは、ポイント、ポリゴン、ラインの各組み合わせに対して、これらの関連付けのうち最もよく使用されるものだけを利用することができます。ただし、VBA を使用する場合は、任意の関連付けに基づいて、ポイント、ライン、またはポリゴンの各フィーチャ レイヤを任意の組み合わせで結合することが可能です。

テーブルのリレート

テーブルの結合とは異なり、テーブルのリレートは、2 つのテーブル間のリレーションシップを定義するだけです。結合の場合とは異なり、関連データがレイヤの属性テーブルに付加されることはありません。レイヤの属性を操作する際に、関連データにアクセスできます。

たとえば、建物を選択する場合、その建物のテナントをすべて検出することができます。同様に、テナントを選択すると、そのテナントが属する建物(複数のショッピング センターのチェーン店、つまり多対多のリレーションシップの場合は、複数の建物)を検出することができます。ただし、このようなデータで結合を実行すると、各建物に属する最初のテナントだけが検出され、その他のテナントは無視されます。

ArcMap で定義されるリレートは、ジオデータベースで定義される単純なリレーションシップ クラスと基本的に同じですが、ジオデータベースではなくマップとともに保存されます。

データがジオデータベースに格納され、リレーションシップ クラスが定義されている場合は、ArcMap でリレートを確立しなくても、それらを直接使用することができます。リレーションシップ クラスは、リレーションシップ クラスに属するレイヤをマップに追加すると、自動的に利用できるようになります。多対多のリレーションシップは、データをジオデータベースに格納する際に個別に定義されることに注意してください。一般に、ジオデータベースで定義されたリレーションシップ クラスがある場合は、ArcMap で新しいリレーションシップ クラスを作成せずに、それらを使用してください。

リレーションシップ クラスの作成方法

ジオデータベース内のリレーションシップ クラス

リレーションシップ クラスは、ジオデータベース内のフィーチャとレコードの関連付けに関する情報を格納し、データの整合性を維持するのに役立ちます。

リレーションシップ クラスを使用する利点についての詳細

結合とリレート

データを結合するかリレートするかを選択する際には、次の原則に従います。

リレーションシップ クラス、結合、リレートのどれを使用するかの判断についての詳細

結合とリレートの保存

結合やリレートが含まれたマップを保存すると、ArcMap はリンクされたデータ自体ではなく、2 つの属性テーブルのリンク方法の定義を保存します。次回マップを開いたときに、ArcMap がデータベースからテーブルを読み取り、(結合かリレートかに関係なく)テーブル間のリレーションシップを再確立します。このため、マップを最後に表示した後にソース テーブルに行われた変更はすべて、マップに自動的に追加され、反映されます。

結合は、ArcMap ドキュメントまたはレイヤ ファイルに格納することができます。何らかの時点でデータを移動する場合は、ArcMap ドキュメントを相対パスで保存してください。データを移動する場合は、ドキュメントを開いた後にテーブルやレイヤを修復することが可能ですが、ターゲット テーブルと結合テーブルが同じディレクトリまたはワークスペースに存在しない場合、結合は修復されません。ドキュメントを相対パスで保存すると、データの移動先を基準にドキュメントが移動されていれば、テーブルおよびレイヤは結合とともに自動的に復元されます。

レイヤをエクスポートするだけで、結合データを持つレイヤの永続的なディスク コピーを作成することができます。レイヤをエクスポートするには、コンテンツ ウィンドウでレイヤを右クリックし、[データ] → [データのエクスポート] をクリックします。これにより、結合フィールドを含めすべての属性を持つ新しいフィーチャクラスが作成されます。

結合、リレート、およびリレーションシップ クラスの同時使用

データが結合とリレートの両方に関与する場合は、結合とリレートが作成される順序が重要になります。リレートを持つレイヤまたはテーブルにデータを結合すると、リレートが削除されます。結合されたレイヤまたはテーブルをリレートすると、結合を削除したときにリレートも削除されます。原則として、結合を作成した後にリレートを追加することが推奨されます。

テーブル A を結合し、テーブル B とレイヤ C をリレートする場合は、3 つの方法のうちの 2 つがうまくいきます。次に、それぞれのケースについて説明します。

結合テーブルに含まれているリレートは、結合による影響を受けません。ただし、これらのリレートにターゲット テーブルまたはレイヤからアクセスすることはできません。

リレーションシップ クラスが結合または結合解除の結果として削除されることはありません。リレーションシップ クラスはデータが結合またはリレートに関与しているかどうかに関係なく使用することができます。

関連項目


7/10/2012