创建关系类 (数据管理)

摘要

此工具可创建用于存储源表和目标表中字段或要素之间关联的关系类。

使用情况

  • 可在空间对象(要素类中的要素)之间、非空间对象(表中的行)之间或空间对象与非空间对象之间建立关系。

  • 一旦创建关系类,就无法进行修改;只能添加、删除或优化关系类的规则。

  • 对于多对多关系类,会在数据库中创建一个新表,以存储用于将源类与目标类相关联的外键。此表还可包含其他字段以存储不属于源类或目标类的关系自身的属性。例如,在宗地数据库中,宗地与所有者之间可能具有关系类,其中所有者“拥有”宗地,同时宗地“归”所有者所有。该关系的属性可以是所有权的百分比。一对一和一对多关系类还可拥有属性;在这种情况下,会创建一个用于存储关系的表。

  • 简单或对等关系将涉及两个或多个对象,而这些对象彼此独立地存在于数据库中。例如,在铁路网络中,可能存在拥有一个或多个相关信号灯的铁路交叉点。但是,铁路交叉点上可以没有信号灯,并且存在信号灯的铁路网络上也可以没有铁路交叉点。简单关系可拥有一对一、一对多或多对多基数。

  • 在复杂关系中,一个对象的生存时间可控制其相关对象的生存时间。例如,电线杆支撑变压器,而变压器安装在电线杆上。删除电线杆后,删除消息即会被传递到与之相关的变压器,然后这些变压器将被从变压器要素类中删除。复合关系始终为一对多关系。

  • 前向和后向路径标注用于在从一个对象导航到另一个对象时描述关系。前向路径标注用于在从源类导航至目标类时描述关系。在杆式变压器示例中,前向路径标注可以是“电线杆支撑变压器”。后向路径标注用于在从目标类导航至源类时描述关系。在杆式变压器示例中,后向路径标注可以是“变压器安装在电线杆上”。

参数

标注说明数据类型
源表

与目标表相关联的表或要素类。

Table View
目标表

与源表相关联的表。

Table View
输出关系类

创建的关系类。

Relationship Class
关系类型

要在源表和目标表之间创建的关系类型。

  • 简单两个独立对象之间的关系(父对父)。这是默认设置。
  • 复合两个相关对象之间的关系,其中一个对象的生存时间控制相关对象的生存时间(父对子)。
String
前向路径标注

用于在从源表导航至目标表时唯一识别关系的名称。

String
后向路径标注

用于在从目标表导航至源表时唯一识别关系的名称。

String
消息方向

消息在源表与目标表之间的传递方向。例如,在电线杆与变压器的关系中,当电线杆被删除时,会向与之相关的变压器对象发送一条消息,以告知它们该电线杆已被删除。

  • 向前(源至目标)将消息从源表传递到目标表。
  • 向后(目标至源)将消息从目标表传递到源表。
  • 两个方向将消息从源表传递到目标表,然后再从目标表传递到源表。
  • 无(不传递任何消息)不传递任何消息。这是默认设置。
String
基数

确定在源表的行或要素与目标表的行或要素之间存在多少种关系。

  • 一对一 (1:1)源表中的每个行或要素可以与目标表中的零个或一个行或要素相关联。这是默认设置。
  • 一对多 (1:M)源表中的每个行或要素可与目标表中的一个或多个行或要素相关联。
  • 多对多 (M:N)源表中的多个字段或要素可与目标表中的一个或多个行或要素相关联。
String
关系类已属性化

指定关系是否具有属性。

  • 选中 - 指示关系类将具有属性。
  • 取消选中 - 指示关系类将不具有属性。这是默认设置。
Boolean
源主键

与关系类表中的源外键字段相关联的源表中的字段(通常指 OID 字段)。

String
源外键

与源表中的源主键字段相关联的关系类表中的字段。

String
目标主键
(可选)

与关系类表中的目标外键字段相关联的目标表中的字段(通常指 OID 字段)。

String
目标外键
(可选)

与目标表中的目标主键字段相关联的关系类表中的字段。

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源表中的每个行或要素可以与目标表中的零个或一个行或要素相关联。这是默认设置。
  • ONE_TO_MANY源表中的每个行或要素可与目标表中的一个或多个行或要素相关联。
  • MANY_TO_MANY源表中的多个字段或要素可与目标表中的一个或多个行或要素相关联。
String
attributed

指定关系是否具有属性。

  • NONE指示关系类将不具有属性。这是默认设置。
  • ATTRIBUTED指示关系类将具有属性。
Boolean
origin_primary_key

与关系类表中的源外键字段相关联的源表中的字段(通常指 OID 字段)。

String
origin_foreign_key

与源表中的源主键字段相关联的关系类表中的字段。

String
destination_primary_key
(可选)

与关系类表中的目标外键字段相关联的目标表中的字段(通常指 OID 字段)。

String
destination_foreign_key
(可选)

与目标表中的目标主键字段相关联的关系类表中的字段。

String

代码示例

创建关系类示例(Python 窗口)

以下 Python 窗口脚本演示了如何使用“创建关系类”工具。

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")
创建关系类示例 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)
创建关系类示例 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: 是

相关主题