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

概要

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

使用法

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

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

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

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

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

  • 正方向および逆方向のパス ラベルは、あるオブジェクトから別のオブジェクトへのリレーションシップを定義します。正方向ラベルは、関連元クラスから関連先クラスへのリレーションシップを記述します。電柱と変圧器の例では、正方向のパス ラベルは「Poles support transformers (電柱は変圧器を支持する) 」などになります。逆方向ラベルは、関連先クラスから関連元クラスへのリレーションシップを記述します。電柱と変圧器の例では、逆方向のパス ラベルは「Transformers are mounted on poles (変圧器は電柱に取り付けられる) 」などになります。

構文

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

リレーションシップ クラス テーブル内の[関連元の外部キー] フィールドにリンクしている、関連元テーブル内のフィールド (通常は OID フィールド)。

String
origin_foreign_key

関連元テーブル内の[関連元テーブルの主キー] フィールドにリンクしている、リレーションシップ クラス テーブル内のフィールド。

String
destination_primary_key
(オプション)

リレーションシップ クラス テーブル内の [関連先の外部キー] フィールドにリンクしている、関連先テーブル内のフィールド (通常は OID フィールド)。

String
destination_foreign_key
(オプション)

関連先テーブル内の [関連先テーブルの主キー] フィールドにリンクしている、リレーションシップ クラス テーブル内のフィールド。

String

コードのサンプル

Create Relationship Class (リレーションシップ クラスの作成) の例 (Python ウィンドウ)

次の 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")
Create Relationship Class (リレーションシップ クラスの作成) の例 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)
Create Relationship Class (リレーションシップ クラスの作成) の例 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)

ライセンス情報

  • Basic: いいえ
  • Standard: はい
  • Advanced: はい

関連トピック