リレーションシップ クラスの作成 (Create Relationship Class) (データ管理)

サマリー

関連元のテーブルと関連先のテーブルのフィールドまたはフィーチャ間の関連性を格納するためのリレーションシップ クラスを作成します。

使用法

  • リレーションシップは、空間オブジェクト (フィーチャクラス内のフィーチャ) の間、非空間オブジェクト (テーブル内の行) の間、または空間オブジェクトと非空間オブジェクトの間に存在します。

  • 作成後のリレーションシップ クラスの変更は不可能であり、そのルールのみを追加、削除、または調整できます。

  • 多対多のリレーションシップ クラスの場合、関連元クラスと関連先クラスをリンクするための外部キーを格納するためにデータベース内に新しいテーブルが作成されます。 このテーブルには、関連元クラスまたは関連先クラスのいずれにも属さない、リレーションシップの属性を格納するための他のフィールドが存在することもあります。 たとえば、土地区画データベースにおいて、所有者が土地区画を所有し、土地区画が所有者に所有されるという、土地区画と所有者の間のリレーションシップ クラスがある場合、 このリレーションシップの属性として、所有権の割合を指定する場合があります。 さらに 1 対 1 および 1 対多のリレーションシップ クラスの属性も存在する場合があります。 このような場合は、これらのリレーションシップを格納するためのテーブルが作成されます。

  • シンプル リレーションシップまたはピアツーピア リレーションシップには、データベース内で互いに独立して存在する 2 つ以上のオブジェクトが関係しています。 たとえば、鉄道ネットワークに信号機が 1 つ以上関連付けられた踏切があるとします。 ただし、踏切の存在は信号機に依存せず、踏切のない鉄道ネットワークにも信号機は存在します。 シンプル リレーションシップの基数は、1 対 1、1 対多、または多対多のいずれかになります。

  • コンポジット リレーションシップは、あるオブジェクトの存続によって、関連するオブジェクトの存続が制御される関係を示します。 たとえば、電柱は変圧器を支持し、変圧器は電柱に取り付けられます。 電柱が削除されると、削除メッセージが、関連する電圧器へ伝達され、それらの電圧器が電圧器のフィーチャクラスから削除されます。 コンポジット リレーションシップは、常に 1 対多になります。

  • 正方向および逆方向のパス ラベルは、あるオブジェクトから別のオブジェクトへのリレーションシップを定義します。 正方向ラベルは、関連元クラスから関連先クラスへのリレーションシップを記述します。 電柱と変圧器の例の場合、正方向のパス ラベルは「電柱は変圧器を支持する」になります。 逆方向ラベルは、関連先クラスから関連元クラスへのリレーションシップを記述します。 電柱と変圧器の例の場合、逆方向のパス ラベルは「変圧器は電柱に設置される」になります。

パラメーター

ラベル説明データ タイプ
関連元テーブル

関連先のテーブルに関連付けられているテーブルまたはフィーチャクラス。

Table View
関連先テーブル

関連元のテーブルに関連付けられているテーブル。

Table View
出力リレーションシップ クラス

作成するリレーションシップ クラス。

Relationship Class
リレーションシップ タイプ

関連元テーブルおよび関連先テーブル間に作成されるリレーションシップのタイプを指定します。

  • シンプル関連元テーブルと関連先テーブルはシンプル リレーションシップを持ちます。 これがデフォルトです。
  • コンポジット関連元テーブルと関連先テーブルはコンポジット リレーションシップを持ちます。
String
正方向 (関連元から関連先へ)

関連元テーブルから関連先テーブルへのリレーションシップを一意に識別する名前。

String
逆方向 (関連先から関連元へ)

関連先テーブルから関連元テーブルへのリレーションシップを一意に識別する名前。

String
情報伝達方向

関連元テーブルと関連先テーブルの間でメッセージが送られる方向を指定します。 たとえば、電柱と変圧器の間のリレーションシップでは、電柱が削除されると、削除されたことを示すメッセージが、関連する変圧器オブジェクトへ送信されます。

  • 正方向 (関連元から関連先へ)メッセージは関連元テーブルから関連先テーブルへ送られます。
  • 逆方向 (関連先から関連元へ)メッセージは関連先テーブルから関連元テーブルへ送られます。
  • 双方向メッセージは関連元テーブルから関連先テーブルへ送られるとともに、関連先テーブルから関連元テーブルへ送られます。
  • なし (メッセージを伝達しない)メッセージは送られません。 これがデフォルトです。
String
基数

関連元テーブル内の行またはフィーチャと関連先テーブル内の行またはフィーチャの間に存在するリレーションシップの数を指定します。

  • 1 対 1 (1:1)関連元テーブル内の各行またはフィーチャに、関連先テーブル内の 0 個または 1 個の行またはフィーチャを関連付けることができます。 これがデフォルトです。
  • 1 対多 (1:M)関連元テーブル内の各行またはフィーチャに、関連先テーブル内の 1 個または複数の行またはフィーチャを関連付けることができます。
  • 多対多 (M:N)関連元テーブル内の複数の行またはフィーチャに、関連先テーブル内の 1 個または複数の行またはフィーチャを関連付けることができます。
String
リレーションシップ クラスに属性を含める

リレーションシップ クラスに属性が含まれるかどうかを指定します。

  • オン - リレーションシップ クラスに属性が含まれます。
  • オフ - リレーションシップ クラスに属性が含まれません。 これがデフォルトです。
Boolean
関連元テーブルの主キー

多対多または属性付きリレーションシップ クラスの場合、リレーションシップ クラス テーブル内の [関連元の外部キー] フィールドにリンクしている、関連元テーブル内のフィールドです。

属性が付けられていない 1 対 1 または 1 対多のリレーションシップ クラスの場合、関連先テーブル内の [関連元の外部キー] フィールドにリンクしている、関連元テーブル内のフィールドです。

String
関連元の外部キー

多対多または属性付きリレーションシップ クラスの場合、関連元テーブル内の [関連元テーブルの主キー] フィールドにリンクしている、リレーションシップ クラス テーブル内のフィールドです。

属性が付けられていない 1 対 1 または 1 対多のリレーションシップ クラスの場合、関連元テーブル内の [関連元テーブルの主キー] フィールドにリンクしている、関連先テーブル内のフィールドです。

String
関連先テーブルの主キー
(オプション)

リレーションシップ クラス テーブル内の [関連先の外部キー] フィールドにリンクしている、関連先テーブル内のフィールド。 この値は、多対多または属性付きリレーションシップ クラスでは必須ですが、属性が付けられていない 1 対 1 または 1 対多リレーションシップ クラスでは空のままにする必要があります。

String
関連先の外部キー
(オプション)

関連先テーブル内の [関連先テーブルの主キー] フィールドにリンクしている、リレーションシップ クラス テーブル内のフィールド。 この値は、多対多または属性付きリレーションシップ クラスでは必須ですが、属性が付けられていない 1 対 1 または 1 対多リレーションシップ クラスでは空のままにする必要があります。

String

arcpy.management.CreateRelationshipClass(origin_table, destination_table, out_relationship_class, relationship_type, forward_label, backward_label, message_direction, cardinality, attributed, origin_primary_key, origin_foreign_key, {destination_primary_key}, {destination_foreign_key})
名前説明データ タイプ
origin_table

関連先のテーブルに関連付けられているテーブルまたはフィーチャクラス。

Table View
destination_table

関連元のテーブルに関連付けられているテーブル。

Table View
out_relationship_class

作成するリレーションシップ クラス。

Relationship Class
relationship_type

関連元テーブルおよび関連先テーブル間に作成されるリレーションシップのタイプを指定します。

  • SIMPLE関連元テーブルと関連先テーブルはシンプル リレーションシップを持ちます。 これがデフォルトです。
  • COMPOSITE関連元テーブルと関連先テーブルはコンポジット リレーションシップを持ちます。
String
forward_label

関連元テーブルから関連先テーブルへのリレーションシップを一意に識別する名前。

String
backward_label

関連先テーブルから関連元テーブルへのリレーションシップを一意に識別する名前。

String
message_direction

関連元テーブルと関連先テーブルの間でメッセージが送られる方向を指定します。 たとえば、電柱と変圧器の間のリレーションシップでは、電柱が削除されると、削除されたことを示すメッセージが、関連する変圧器オブジェクトへ送信されます。

  • FORWARDメッセージは関連元テーブルから関連先テーブルへ送られます。
  • BACKWARDメッセージは関連先テーブルから関連元テーブルへ送られます。
  • BOTHメッセージは関連元テーブルから関連先テーブルへ送られるとともに、関連先テーブルから関連元テーブルへ送られます。
  • NONEメッセージは送られません。 これがデフォルトです。
String
cardinality

関連元テーブル内の行またはフィーチャと関連先テーブル内の行またはフィーチャの間に存在するリレーションシップの数を指定します。

  • ONE_TO_ONE関連元テーブル内の各行またはフィーチャに、関連先テーブル内の 0 個または 1 個の行またはフィーチャを関連付けることができます。 これがデフォルトです。
  • ONE_TO_MANY関連元テーブル内の各行またはフィーチャに、関連先テーブル内の 1 個または複数の行またはフィーチャを関連付けることができます。
  • MANY_TO_MANY関連元テーブル内の複数の行またはフィーチャに、関連先テーブル内の 1 個または複数の行またはフィーチャを関連付けることができます。
String
attributed

リレーションシップ クラスに属性が含まれるかどうかを指定します。

  • NONEリレーションシップ クラスに属性が含まれません。 これがデフォルトです。
  • ATTRIBUTEDリレーションシップ クラスに属性が含まれます。
Boolean
origin_primary_key

多対多または属性付きリレーションシップ クラスの場合、リレーションシップ クラス テーブル内の origin_foreign_key フィールドにリンクしている、関連元テーブル内のフィールドです。

属性が付けられていない 1 対 1 または 1 対多のリレーションシップ クラスの場合、関連先テーブル内の origin_foreign_key フィールドにリンクしている、関連元テーブル内のフィールドです。

String
origin_foreign_key

多対多または属性付きリレーションシップ クラスの場合、関連元テーブル内の origin_primary_key フィールドにリンクしている、リレーションシップ クラス テーブル内のフィールドです。

属性が付けられていない 1 対 1 または 1 対多のリレーションシップ クラスの場合、関連元テーブル内の origin_primary_key フィールドにリンクしている、関連先テーブル内のフィールドです。

String
destination_primary_key
(オプション)

リレーションシップ クラス テーブル内の destination_foreign_key フィールドにリンクしている、関連先テーブル内のフィールド。 この値は、多対多または属性付きリレーションシップ クラスでは必須ですが、属性が付けられていない 1 対 1 または 1 対多リレーションシップ クラスでは空のままにする必要があります。

String
destination_foreign_key
(オプション)

関連先テーブル内の destination_primary_key フィールドにリンクしている、リレーションシップ クラス テーブル内のフィールド。 この値は、多対多または属性付きリレーションシップ クラスでは必須ですが、属性が付けられていない 1 対 1 または 1 対多リレーションシップ クラスでは空のままにする必要があります。

String

コードのサンプル

CreateRelationshipClass の例 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、CreateRelationshipClass 関数の使用方法を示しています。

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")
CreateRelationshipClass (リレーションシップ クラスの作成) の例 1 (スタンドアロン スクリプト)

植生フィーチャクラスと、追加の植生情報を含むテーブル間のリレーションシップ クラスを作成します。

# 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)
CreateRelationshipClass (リレーションシップ クラスの作成) の例 2 (スタンドアロン スクリプト)

土地区画フィーチャクラスと、所有者情報を含むテーブル間のリレーションシップ クラスを作成します。

# 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)

関連トピック