結合とリレートの概要

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

結合およびリレート情報は、レイヤーのプロパティに格納されます。 この情報にアクセスするには、レイヤーをダブルクリックして [レイヤー プロパティ] を開き、[結合] または [リレート] を選択します。

テーブル内の属性の結合

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

一般に、結合する両方のテーブルに存在するフィールドの値に基づいて、データ テーブルをレイヤーに結合します。 フィールドの名前は同じでなくてもかまいませんが、データ タイプは同じでなければなりません。つまり、数値同士、文字列同士を結合します。 [テーブルの結合 (Add Join)] ジオプロセシング ツールを使用して結合を実行できます。 属性を結合すると、結合したフィールドは既存のテーブルに動的に追加されます。 エイリアス、表示設定、数値形式などのフィールド プロパティは、結合が追加または削除された場合も維持されます。

データが構成されている方法によっては、データをレイヤーに結合する前に、テーブル内のデータのサマリー処理が必要なことがあります。 テーブルを集計すると、サマリー統計情報を持つ新しい静的テーブルが作成されます。 このとき、総数、平均値、合計、最小値、最大値を含め、さまざまなサマリー統計を作成することができます。 たとえば、市区町村ではなく、都道府県別の人口マップを作成したいが、人口情報が市区町村ごとに構成されているとします。 市区町村データを都道府県別にまとめ (この例では、各都道府県の人口の総数を算出し)、新たに作成された出力テーブルを都道府県レイヤーに結合することで、都道府県別の人口マップを作成することができます。

1 対多または多対多のリレーションシップが存在するデータを使用する場合は、リレートまたはリレーションシップ クラスを使用して、データセット間のリレーションシップを確立します。 ただし、このような状況で結合を作成することも可能です。 このような場合に結合を作成すると、データ ソースに応じて、ツールと他のレイヤー固有設定の動作に違いが生じます。 同じジオデータベースのデータを使用して結合を作成する場合は、すべての一致するレコードが返されます。 データベース以外のデータ (シェープファイルや dBASE テーブルなど) を使用して結合を作成する場合は、最初に一致したレコードのみが返されます。

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

マップのレイヤー間で共通の属性フィールドが共有されていない場合、その属性フィールドを結合するには、[空間結合 (Spatial Join)] ジオプロセシング ツールを使用します。空間結合はレイヤー内のフィーチャの位置に基づいて、2 つのレイヤーの属性を結合します。

空間結合では、以下のような一般的なワークフローを実行できます。

位置による結合 (空間結合) は、対象のレイヤー間の空間的な関連性を使用して、1 つのレイヤーから別のレイヤーにフィールドを付加します。 関連付けタイプに応じて、一致したフィーチャからターゲット フィーチャに、属性または数値属性の集約 (最小値、最大値、平均値など) を追加することができます。

空間結合は、属性による結合、リレート、リレーションシップ クラスとは異なり、デフォルトでは静的であり、結果を新しい出力レイヤーに保存する必要があります。 スクリプトまたはモデル内で [空間結合 (Spatial Join)] ツールを使用する場合、出力を作成する代わりにインメモリ ワークスペースを使用することによって、パフォーマンスを改善できます。 インメモリ ワークスペースに書き込むには、たとえば「in_memory/outputFeature」のように、ツールの出力パスにワークスペースと出力の名前を含めます。

テーブル結合の解除

結合を削除するには、[テーブル結合] メニュー アイテムにアクセスする前述の方法のいずれかを使用して、[テーブル結合の解除] ツールを開きます。 このメニューは、開いている属性テーブル、コンテンツ ウィンドウで選択したレイヤーまたはスタンドアロン テーブルの [データ] タブ、または [テーブルの結合とリレート] ショートカット メニューで使用できます。

[テーブル結合] メニューからすべての結合を解除することもできます。 すべての結合を解除すると元に戻すことができないため、このコマンドは、実行を確認するメッセージを表示します。

テーブル間の属性のリレート

リレートを使用して、データ内の特定の情報を検出できます。 たとえば、建物を選択する場合、その建物のテナントをすべて検出することができます。 同様に、テナントを選択すると、そのテナントが属する建物 (複数のショッピング センターのチェーン店、つまり多対多のリレーションシップの場合は、複数の建物) を検出することができます。 1 対多、または多対多のリレーションシップがあるデータを使用する場合は、リレートかリレーションシップ クラスが推奨されます。

テーブルの結合とは異なり、テーブルのリレートは、2 つのテーブル間のリレーションシップを定義します。 結合の場合とは異なり、関連データがレイヤーの属性テーブルに付加されることはありません。 代わりに、レイヤーまたはテーブル内で選択したフィーチャまたはレコードを介して、関連データにアクセスできます。 [リレートの追加 (Add Relate)] ジオプロセシング ツールを使用してリレートを作成できます。

マップ内のレイヤーまたはテーブルに追加されたリレートは、ジオデータベースで定義された単純なリレーションシップ クラスと基本的に同じです。ただし、リレートは、ジオデータベースではなくマップに保存されます。 リレーションシップ クラスは、ジオデータベース内のフィーチャとレコードの関連付けに関する情報を格納し、データの整合性を維持するのに役立ちます。 リレーションシップ クラスを作成するには、[リレーションシップ クラスの作成 (Create Relationship Class)] ツールを使用するか、[カタログ] ウィンドウでジオデータベースを右クリックして [新規] をポイントし、[リレーションシップ] をクリックします。

ジオデータベース内のフィーチャクラスがすでにリレーションシップ クラスに属している場合、リレートをテーブルに作成する必要はありません。 リレートはすでに使用可能になっており、関連データの表示に使用できるリストが [リレート データ] メニューに表示されます。 多対多のリレーションシップは、データをジオデータベースに格納する際に個別に定義されることに注意してください。

リレートの削除

リレートを削除するには、[リレート] メニュー アイテムにアクセスする前述の方法のいずれかを使用して、[リレートの解除] ツールを開きます。 このメニューは、開いている属性テーブル、コンテンツ ウィンドウで選択したレイヤーまたはスタンドアロン テーブルの [データ] タブ、または [テーブルの結合とリレート] ショートカット メニューで使用できます。

[リレート] メニューからすべてのリレートを削除することもできます。 すべてのリレートを解除すると元に戻すことができないため、このコマンドは、実行を確認するメッセージを表示します。

関連トピック