リレーションシップ クラスの作成(Create Relationship Class) (データ管理)
サマリ
このツールは、関連元のテーブルと関連先のテーブルのフィールドまたはフィーチャ間の関連性を格納するためのリレーションシップ クラスを作成します。
使用法
-
リレーションシップは、空間オブジェクト(フィーチャクラス内のフィーチャ)の間、非空間オブジェクト(テーブル内の行)の間、または空間オブジェクトと非空間オブジェクトの間に存在します。
-
作成後のリレーションシップ クラスの変更は不可能であり、そのルールのみを追加、削除、または調整できます。リレーションシップ クラスは、ArcCatalog でデータベース内の他のオブジェクトと同様に削除したり、名前を変更したりできます。
-
多対多のリレーションシップ クラスの場合、関連元クラスと関連先クラスをリンクするための外部キーを格納するためにデータベース内に新しいテーブルが作成されます。このテーブルには、関連元クラスまたは関連先クラスのいずれにも属さない、リレーションシップ自体の属性を格納するための他のフィールドが存在することもあります。たとえば、土地区画データベースにおいて、所有者が土地区画を「所有し」、土地区画が所有者に「所有される」という、土地区画と所有者の間のリレーションシップ クラスがある場合、このリレーションシップの属性としては、所有権の割合があります。さらに 1 対 1 および 1 対多のリレーションシップ クラスの属性も存在する場合があり、このような場合は、これらのリレーションシップを格納するためのテーブルが作成されます。
-
シンプル リレーションシップまたはピアツーピア リレーションシップには、データベース内で互いに独立して存在する 2 つ以上のオブジェクトが関係しています。たとえば、鉄道ネットワークに信号機が 1 つ以上関連付けられた踏切があるとします。ただし、踏切の存在は信号機に依存せず、踏切のない鉄道ネットワークにも信号機は存在します。シンプル リレーションシップの基数は、1 対 1、1 対多、または多対多のいずれかになります。
-
コンポジット リレーションシップは、あるオブジェクトの存続によって、関連するオブジェクトの存続が制御される関係を示します。たとえば、電柱は変圧器を支持し、変圧器は電柱に取り付けられます。電柱が削除されると、削除メッセージが、関連する電圧器へ伝達され、それらの電圧器が電圧器のフィーチャクラスから削除されます。コンポジット リレーションシップは、常に 1 対多になります。
-
正方向および逆方向のパス ラベルは、あるオブジェクトから別のオブジェクトへのリレーションシップを定義します。正方向ラベルは、関連元クラスから関連先クラスへのリレーションシップを記述します。電柱と変圧器の例では、正方向のパス ラベルは「Poles support transformers(電柱は変圧器を支持する)」などになります。逆方向ラベルは、関連先クラスから関連元クラスへのリレーションシップを記述します。電柱と変圧器の例では、逆方向のパス ラベルは「Transformers are mounted on poles(変圧器は電柱に取り付けられる)」などになります。
-
リレーションシップ クラスは、ArcCatalog で作成することもできます。ジオデータベースのショートカット メニューからコマンド [新規作成] → [リレーションシップ クラス] の順に選択します。
構文
パラメータ | 説明 | データ タイプ |
origin_table |
関連先のテーブルに関連付けられているテーブルまたはフィーチャクラス。 | Table View |
destination_table |
関連元のテーブルに関連付けられているテーブル。 | Table View |
out_relationship_class |
作成されるリレーションシップ クラス。 | Relationship Class |
relationship_type |
関連元テーブルと関連先テーブルの間に作成されるリレーションシップのタイプ。
| String |
forward_label |
関連元テーブルから関連先テーブルへのリレーションシップを一意に識別する名前。 | String |
backward_label |
関連先テーブルから関連元テーブルへのリレーションシップを一意に識別する名前。 | String |
message_direction |
関連元テーブルと関連先テーブルの間でメッセージが送られる方向。たとえば、電柱と変圧器の間のリレーションシップでは、電柱が削除されると、削除されたことを知らせるメッセージが、電柱から関連する変圧器オブジェクトへ送信されます。
| String |
cardinality |
関連元テーブル内の行またはフィーチャと関連先テーブル内の行またはフィーチャの間に存在するリレーションシップの数を指定します。
| String |
attributed |
リレーションシップに属性が含まれるかどうかを指定します。
| Boolean |
origin_primary_key |
リレーションシップ クラス テーブル内の関連元外部キー フィールドにリンクしている、関連元テーブル内のフィールド(通常は OID フィールド)。 | String |
origin_foreign_key |
関連元テーブル内の関連元主キー フィールドにリンクしている、リレーションシップ クラス テーブル内のフィールド。 | String |
destination_primary_key (オプション) |
リレーションシップ クラス テーブル内の関連先外部キー フィールドにリンクしている、関連先テーブル内のフィールド(通常は OID フィールド)。 | String |
destination_foreign_key (オプション) |
関連先テーブル内の関連先主キー フィールドにリンクしている、リレーションシップ クラス テーブル内のフィールド。 | String |
コードのサンプル
次の Python ウィンドウ スクリプトは Create Relationship Class(リレーションシップ クラスの作成)ツールを使用する方法を示しています。
import arcpy
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
arcpy.CreateRelationshipClass_management("vegtype", "vegtable", "veg_RelClass", "SIMPLE",
"Attributes from vegtable", "Attributes and Features from vegtype",
"NONE", "ONE_TO_ONE", "NONE", "HOLLAND95", "HOLLAND95")
植生フィーチャクラスと、追加の植生情報を含むテーブル間のリレーションシップ クラスを作成します。
# Name: CreateRelationshipClass.py
# Description: Create a relationship class between vegetation feature
# class and table with additional vegetation information
# Author: ESRI
# Import system modules
import arcpy
from arcpy import env
# Set environment settings
env.workspace = "C:/data"
# Copy vegtable.dbf to file gdb table, since both tables to be related
# must be in the same database
vegDbf = "vegtable.dbf"
vegTbl = "Habitat_Analysis.gdb/vegtable"
arcpy.CopyRows_management(vegDbf, vegTbl)
# Create simple relationship class between 'vegtype' vegetation layer
# and 'vegtable' table with additional vegetation information
veg = "Habitat_Analysis.gdb/vegtype"
relClass = "Habitat_Analysis.gdb/veg_RelClass"
forLabel = "Attributes from vegtable"
backLabel = "Attributes and Features from vegtype"
primaryKey = "HOLLAND95"
foreignKey = "HOLLAND95"
arcpy.CreateRelationshipClass_management(veg,
vegTbl,
relClass,
"SIMPLE",
forLabel,
backLabel,
"NONE",
"ONE_TO_ONE",
"NONE",
primaryKey,
foreignKey)
土地区画フィーチャクラスと、所有者情報を含むテーブル間のリレーションシップ クラスを作成します。
# Name: CreateRelationshipClass.py
# Description: Create a relationship class between parcels feature
# class and table with owner information
# Author: ESRI
# Import system modules
import arcpy
from arcpy import env
# Set environment settings
env.workspace = "C:/data"
# Copy owners.dat to file gdb table, since both tables to be related
# must be in the same database
ownerDat = "owners.dat"
ownerTbl = "Montgomery.gdb/owners"
arcpy.CopyRows_management(ownerDat, ownerTbl)
# Create simple relationship class between 'parcel' parcel layer
# and 'owner' table with additional parcel owner information
parcel = "Montgomery.gdb/Parcels"
relClass = "Montgomery.gdb/parcelowners_RelClass"
forLabel = "Owns"
backLabel = "Is Owned By"
primaryKey = "PROPERTY_ID"
foreignKey = "PROPERTY_ID"
arcpy.CreateRelationshipClass_management(ownerTbl,
parcel,
relClass,
"SIMPLE",
forLabel,
backLabel,
"BACKWARD",
"ONE_TO_MANY",
"NONE",
primaryKey,
foreignKey)