ジオデータベースのリレーションシップ クラスは、あるクラス (フィーチャクラスまたはテーブル) のオブジェクトと別のクラスのオブジェクトの間の関連付けを管理します。 リレーションシップの両端のオブジェクトとして、ジオメトリを持つフィーチャまたはテーブル内のレコードを指定できます。
たとえば、キャンプ場施設 (関連元テーブル) のフィーチャクラスとキャンプ地 (関連先テーブル) のフィーチャクラスは、共通の値が格納されている共通フィールドを互いに共有しており (関連元テーブルの FacilityID と関連先テーブルの ParentFacilityID)、そのフィールドのデータ タイプは同じ Long Integer なので、相互に関連付けることができます。 この例では、これらのレコードを関連付けることで、キャンプ場施設を 1 つ選択して、そのキャンプ場に関連付けられている複数のキャンプ地にアクセスできるようになります。
リレーションシップ クラスの利点
ジオデータベース内のリレーションシップ クラスによって、共通フィールド (キーとも呼ぶ) に基づいて 2 つのテーブル間の関係が確立されます。 この関係を用いて、参照整合性を確保したり、関連するレコード間をナビゲートしたりすることができます。 リレーションシップ クラスのいくつかの利点と高度な機能を以下に示します。
- 参照整合性 - リレーションシップ クラスによって参照整合性が確保されることで、テーブル間のリレーションシップが一貫した状態のままとなります。 つまり、関連元テーブル内のレコードが削除されると、関連先テーブル内のすべての関連レコードも削除されます。
- データの入力と編集の強化 - データを編集する際に、リレーションシップ クラスによって、関連テーブルを介して変更内容が正しく反映されます。 これにより、データの不整合やエラーを回避することができます。
- 高度なデータ分析 - データセット間でリレーションシップ クラスが確立されている場合、さらに複雑なクエリや分析を実行することができます。 たとえば、あるテーブル内の特定のフィーチャに関連付けられている、別のテーブル内のすべてのフィーチャを見つけることができます。
- 効率的なデータ管理 - リレーションシップ クラスによって関連データを効率的に管理できます。 データを複数のテーブルに複製する代わりに、1 つの場所にデータを格納し、他のテーブルからその場所へのリレーションシップを作成することができます。
- 基数 - 基数はアイテムやデータが互いにどのように関連するかを表します。 たとえば、都市の GIS データにおいて、建物と所有者の間には 1 対 1 の関係があります。 バス ルートと複数のバス停の間には 1 対多の関係があります。 買い物客と店舗の間には多対多の関係があります。 リレーションシップ クラスによって、このような関係を把握して複雑なデータを理解することが容易になります。
- リレーションシップ ルール - リレーションシップ クラスに制約を定義することで、データを編集する際に空間データの正確性と一貫性が確保されます。 たとえば、各建物を特定のパーセルに関連付ける必要があるというリレーションシップ ルールを作成できます。 物事を関連付ける際のルールを設定して (1 つの建物と 1 つのパーセル、1 つのバス ルートと複数のバス停、複数の買い物客と複数の店舗の間など)、ジオデータベース内のデータを正確で信頼性の高い状態に維持することで、データ整合性を確保することができます。 これによってデータの整合性が確保されます。
- 属性付きリレーションシップ - リレーションシップ クラスに、リレーションシップ自体に関する追加の情報を格納できます。 たとえば、道路と交通事故の間のリレーションシップには、各道路セグメントで発生した事故の件数を属性として格納できます。 リレーションシップ クラスは属性を持つことができ、属性にはリレーションシップ自体に関する情報を格納することができます。 たとえば、リレーションシップが確立された日付を格納することができます。
- 通知 - 通知は自動更新を可能にします。 あるテーブルで変更が行われた場合、別のテーブル内の関連レコードを自動的に更新できます。 リレーションシップが作成または削除された場合など、特定のイベントが発生すると、リレーションシップ クラスはメッセージを送信することができます。 これを利用して、アプリケーションでカスタム動作をトリガーすることができます。
- ナビゲーション - リレーションシップは両方向にナビゲートできます。 たとえば、顧客テーブルと注文テーブルの間にリレーションシップがある場合、特定の顧客からのすべての注文を検索したり、特定の注文に関連付けられている顧客を検索したりすることができます。
- カスケード更新とカスケード削除 - リレーションシップ クラスではカスケード更新とカスケード削除がサポートされます。 つまり、関連元テーブル内のレコードが更新または削除されると、関連先テーブル内の関連レコードに変更が適用されます。
リレーションシップ クラスの制限
ジオデータベースのリレーションシップ クラスは、2 つの関連するフィーチャクラスまたはテーブルのオブジェクト間の関連付けを管理します。 ただし、次のような制限があります。
- リレーションシップ クラスは、同一ジオデータベース内のフィーチャクラス間またはテーブル間でのみ定義できます。
- また、フィーチャクラスまたはテーブルは、同一ジオデータベース内に格納されている必要があります。
複数のリレーションシップ クラスに属するデータセット
フィーチャクラスまたはテーブルは、複数のリレーションシップ クラスに属することができます。ただし、次のようにいくつかの制限があります。
- 特定のフィーチャクラスまたはテーブルを 2 つのコンポジット リレーションシップ クラスの関連先にすることはできません。 ただし、1 組のクラス間に複数のシンプル リレーションシップを確立することができます。 これは、リレーションシップの方向に応じて異なる基数を適用する必要がある場合に利用できます。
- 2 つのクラスの間にコンポジット リレーションシップ クラスが存在する場合、同じ 2 つのクラスの間に他のリレーションシップ クラスを作成することはできません。
- フィーチャ データセットでリレーションシップ クラスを作成する場合、関連元または関連先クラスのどちらかはそのフィーチャ データセットに存在しなければなりません。
- 1 組のクラス間に複数のシンプル リレーションシップを確立することができます。 これは、リレーションシップの方向に応じて異なる基数を適用する必要がある場合に利用できます。
サポートされないリレーションシップ クラス
リレーションシップ クラスの以下のタイプとプロパティは ArcGIS ではサポートされていません。
- 同じフィーチャクラス内にあるまたは同じテーブル内にあるレコード間の再帰リレーションシップは、ArcGIS ではサポートされていません。
- 主キーと外部キーはそれぞれに 1 つのみのフィールドに基づいている必要があります。複合主キーと外部キーは ArcGIS ではサポートされていません。
所有するデータや回答を得たい問題に基づき、ジオデータベースでリレーションシップ クラスを使用することが最適な方法であると判断した場合、次のステップで、ジオデータベース リレーションシップ クラスのタイプについて理解し、リレーションシップ クラスを作成します。