标注 | 说明 | 数据类型 |
源表 | 与目标表相关联的表或要素类。 | Table View |
目标表 | 与源表相关联的表。 | Table View |
输出关系类 | 将创建的关系类。 | Relationship Class |
关系类型 | 指定在源表和目标表之间创建的关系类型。
| String |
前向路径标注 | 从源表导航到目标表时,用于唯一标识关系的名称。 | String |
后向路径标注 | 从目标表导航到源表时,用于唯一标识关系的名称。 | String |
消息方向 | 指定消息将在源表与目标表之间的传递方向。 例如,在电线杆和变压器之间的关系中,当电线杆被删除时,将向其相关的变压器对象发送消息,指示电线杆已被删除。
| String |
基数 | 指定源表中的行或要素与目标表中的行或要素之间将存在多少关系。
| 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 | 指定在源表和目标表之间创建的关系类型。
| String |
forward_label | 从源表导航到目标表时,用于唯一标识关系的名称。 | String |
backward_label | 从目标表导航到源表时,用于唯一标识关系的名称。 | String |
message_direction | 指定消息将在源表与目标表之间的传递方向。 例如,在电线杆和变压器之间的关系中,当电线杆被删除时,将向其相关的变压器对象发送消息,指示电线杆已被删除。
| String |
cardinality | 指定源表中的行或要素与目标表中的行或要素之间将存在多少关系。
| String |
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 |
代码示例
以下 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")
在植被要素类和包含其他植被信息的表之间创建关系类。
# 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)
许可信息
- Basic: 否
- Standard: 是
- Advanced: 是