关系类是 ArcGIS Pro 中可用工作流之一,可将要素和记录彼此在地理数据库中相关联。
用于创建关系类的工具
您可以选择两种地理处理工具来创建地理数据库关系类:
地理数据库关系类注意事项
要协助确定地理数据库关系类类型在工作流中创建和使用,请考虑以下内容:
- 在表中或类中的对象之间存在的基数。
地理数据库关系类基数指明源表中有多少行或要素与目标表中的多少行或要素相关。
地理数据库关系类可以具有三种基数之一:
- 一对一 (1:1) - 源表中的每个行或要素可以与目标表中的零个或一个行或要素相关联。 这是默认设置。
- 一对多 (1:M) - 源表中的每个行或要素可以与目标表中的一个或几个行或要素相关联。
多对多 (M:N):源表中的几个行或要素可以与目标表中的一个或几个行或要素相关联。
- 源表或目标表或类中都存在的公用键字段。
-
通过一个公用字段(也称为键)可将一个表(源)中的记录与另一个表(目标)中的记录相关联。 在创建任何类型的关系类之前,必须在每个表中标识一个共享常用值且数据类型相同的字段。 该字段在源中称为主键字段,在目标中称为外键字段。
例如,野营地设施点(源表)要素类可以与露营地(目标表)要素类关联,因为它们在源表上共享一个包含公共值 FacilityID 的公共字段,和在目标表上的 ParentFacilityID,并且它们具有该字段相同的长整型数据类型。 在此示例中,关联这些记录将使得选择单个野营地设施点并访问与该野营地关联的所有露营地成为可能。
注:
在关系类中,公共字段不要求具有相同的名称,但要求它们具有相同的数据类型。 共用字段中的值用于根据定义的基数链接表中的记录。
在下方示例中,在野营地设施点和位于各个野营地的露营点之间创建了一对多关系类。 使用此一对多关系时,可以选择单个野营地,访问其关联的设施点以及该野营地各个野营点的属性。
在 Campground Facilities 和分配至各个野营地的单个 Campsites 之间创建了关系类。
-
使用对象 ID 或全局 ID 字段来表示源表上的主键与目标表上的外键之间的关系。
以下是使用对象 ID 和全局 ID 的一些注意事项:
- 对象 ID 字段
在 ArcGIS Pro 中创建关系类需要唯一值来表示主键和外键之间的关系。 在 ArcGIS Pro 中创建表时,将向表中添加唯一的不可为空的整型字段,以用作对象标识符(对象 ID)。 该对象 ID 字段存储表中每一行的唯一 ID,并且默认在表和要素类中创建为 32 位对象 ID。
对象 ID 字段由 ArcGIS Pro 维护并保证在初始添加时表中每行具有唯一 ID。 ArcGIS 的关键功能(例如使用识别工具和显示选择集)取决于表中具有唯一值的每个值。
警告:
- 如果您使用 32 位对象 ID 字段作为主键,则目标表中的外键字段也必须是 32 位。
- 仅当对象 ID 字段被设置为源表中的主键字段时,才支持使用对象 ID 字段作为外键。 这也称为对象 ID 与对象 ID 关系。
- 分支版本化不支持创建基于对象 ID 的关系类并无法复制。
或者,可以运行迁移关系类工具将基于对象 ID 的关系类迁移至基于全局 ID 的关系类,然后在分支版本化环境中使用数据。
- 64 位对象 ID 字段 - 默认情况下,地理数据库表和要素类是在 ArcGIS 中使用 32 位对象 ID 创建。 但是,在某些情况下,对象 ID 值需要大于 21.4 亿。 将对象 ID 迁移至 64 位地理处理工具可用于迁移关系类的对象 ID 字段。
警告:
- 如果您使用 64 位对象 ID 字段作为主键,则外键中的对象 ID 字段也必须是 64 位。 例如,如果在源表中选择 64 位对象 ID 字段作为主键,则目标表也必须具有 64 位对象 ID 字段。 在这种情况下,当 OID 的位级别在源表和目标表中匹配时,您可以将外键字段设置为 64 位对象 ID 或大整型字段数据类型。
当对象 ID 字段迁移为存储 64 位对象 ID 时,更改无法撤消,并且数据集不能再与 ArcMap 或 ArcGIS Pro 3.1 和早期版本一起使用。
- 全局 ID 字段
全局 ID 与对象 ID 类似,它们由 ArcGIS Pro 维护且无法编辑。
全局 ID 用于唯一识别单个地理数据库中和跨多个地理数据库的要素。 建议您将全局 ID 添加到您的数据并使用全局 ID 字段作为主键。 使用图层的全局 ID 字段可确保在要素类和表之间建立连接时,关系类的主键是唯一的。
您也可以关系类上的全局 ID。 对于文件、移动或企业级地理数据库中的属性或多对多关系类,全局 ID 选项位于管理选项卡中。 启用后,随即将全局 ID 字段添加到中间表。
全局 ID 和 GUID 之间的其中一个区别是 ArcGIS Pro 将主动维护全局 ID 字段。 例如,如果使用全局 ID 字段并创建新要素,将为该要素分配唯一的全局 ID 值,但 GUID 字段保留为空,您必须维护这些字段。
- 大整数字段
- 大整型数据类型是 64 位有符号整数,可以存储非常大的整数值,范围为 -(253) -1 和 253 -1。 如果选择大整型字段数据类型作为主键,则外键字段唯一可设置的数据类型选项就是大整型字段数据类型。
- 对象 ID 字段
创建并设置地理数据库关系类的规则
如果源类和目标类都存在于同一要素数据集中,则关系类将位于该要素数据集中。 否则,关系类会位于地理数据库的正下方,任何要素数据集之外。
创建关系可能涉及几个额外的步骤,并且您可以遵循不同的工作流来完成该过程。 应遵照的工作流程取决于所拥有的数据和想要创建的关系类型。
- 如果已将源类和目标类用要素或记录进行了填充,且源类中的主键值已正确地关联到了目标类中的外键值,请考虑此工作流:
- 如果已将源类和目标类用要素或记录进行了填充,且源类中有主键值,但目标类中没有外键值或具有外键值但未正确关联,请考虑此工作流:
- 使用创建关系类地理处理工具创建关系类。
如果需要,设置关系类规则。
有关在关系类上启用和禁用规则的详细信息,请参阅管理关系类规则。
- 交互选择关联的源对象和目标对象,并将它们在属性对话框中关联,使用将所选项添加到关系选项。
这会设置目标中的外键值,以便它们与源中的主键值相关。
要了解详细信息,请参阅填充属性关系类表。
或者,如果使用创建关系类工具创建属性或多对多关系类,请手动填充中间表,因为生成的中间表将仅包含生成的字段,因为 ArcGIS 不会映射源与目标对象之间的关联。
要了解更多信息,请参阅了解属性关系类。
如果您设置关系类规则或使用复合关系,请使用验证或约束属性规则来测试和强制执行数据的參考完整性。
警告:
该工作流不适用于多对多 (M:N) 关系类,但不包括至少一个要素类作为源或目标的情况。
- 要在两个表之间创建多对多关系类或使用包含关系属性的现有中间表创建关系类,请考虑此工作流: