创建关系类 (数据管理)

摘要

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

使用情况

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

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

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

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

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

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

参数

标注说明数据类型
源表

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

Table View
目标表

与源表相关联的表。

Table View
输出关系类

将创建的关系类。

Relationship Class
关系类型

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

  • 简单源表和目标表将具有简单关系。 这是默认设置。
  • 复合源表和目标表将具有复合关系。
String
前向路径标注

从源表导航到目标表时,用于唯一标识关系的名称。

String
后向路径标注

从目标表导航到源表时,用于唯一标识关系的名称。

String
消息方向

指定消息将在源表与目标表之间的传递方向。 例如,在电线杆和变压器之间的关系中,当电线杆被删除时,将向其相关的变压器对象发送消息,指示电线杆已被删除。

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

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

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

指定关系类是否具有属性。

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

对于多对多或属性关系类,这是源表中链接到关系类表中的源外键字段的字段。

对于没有属性的一对一或一对多关系类,这是源表中链接到目标表中的源外键字段的字段。

String
源外键

对于多对多或属性关系类,这是关系类表中链接到源表中的源主键字段的字段。

对于没有属性的一对一或一对多关系类,这是目标表中链接到源表中的源主键字段的字段。

String
目标主键
(可选)

目标表中链接到关系类表中的目标外键字段的字段。 对于多对多或属性关系类,此值为必填项;但对于没有属性的一对一或一对多关系类,此值应留空。

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

对于多对多或属性关系类,这是源表中链接到关系类表中的 origin_foreign_key 字段的字段。

对于没有属性的一对一或一对多关系类,这是源表中链接到目标表中的 origin_foreign_key 字段的字段。

String
origin_foreign_key

对于多对多或属性关系类,这是关系类表中链接到源表中的 origin_primary_key 字段的字段。

对于没有属性的一对一或一对多关系类,这是目标表中链接到源表中的 origin_primary_key 字段的字段。

String
destination_primary_key
(可选)

目标表中链接到关系类表中的 destination_foreign_key 字段的字段。 对于多对多或属性关系类,此值为必填项;但对于没有属性的一对一或一对多关系类,此值应留空。

String
destination_foreign_key
(可选)

关系类表中链接到目标表中的 destination_primary_key 字段的字段。 对于多对多或属性关系类,此值为必填项;但对于没有属性的一对一或一对多关系类,此值应留空。

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)

许可信息

  • Basic: 否
  • Standard: 是
  • Advanced: 是

相关主题