中文

常见问题解答:如何更改地理数据库管理的全局 ID 上的唯一索引?

问题

常见问题解答:如何更改地理数据库管理的全局 ID 上的唯一索引?

答案

Esri 的产品软件版本 ArcGIS Desktop 10.5.1 和 ArcGIS Pro 2.0 包括对地理数据库管理的全局 ID的基本行为更改。

什么是地理数据库管理的全局 ID?
地理数据库管理的全局 ID 字段是不可编辑的 UUID 列,由地理数据库负责进行填充。 可以通过地理处理工具“添加全局 ID”来添加全局 ID 字段,也可以使用以下 Arcpy 模块通过 Python 来添加全局 ID 字段:

AddGlobalIDs_management (in_datasets)
进行了什么更改?
在 ArcGIS Desktop 10.5.1 和 ArcGIS Pro 2.0 中,将会出现以下行为:
  • “添加全局 ID”将在“全局 ID”字段上创建唯一索引,以保留基础表或要素类中的要素唯一性。
版本化类行为
  • 注册为版本后,ArcGIS 将查找全局 ID 列,并在全局 ID 列上针对基表创建唯一索引。 不会针对 A 表和 D 表创建新索引。
  • 将全局 ID 添加到注册为版本的类将在全局 ID 字段上创建新的唯一索引。 不会针对 A 表和 D 表创建新索引。
非版本化归档类行为
  • 启用归档后,将查找全局 ID 列,并在全局 ID 和 GDB_TO_DATE 列上创建唯一索引
  • 将全局 ID 添加到已启用归档的类将在全局 ID 和 GDB_TO_DATE 字段上创建唯一索引。 H 表可获取全局 ID 列上的非唯一索引。
下表对行为进行了汇总:
类类型 前提条件操作索引类型 索引名称
非版本化 添加全局 IDUNIQUEUUID_GLOBALID
非版本化具有全局 ID启用非版本化归档UNIQUEUUID_GLOBALID、GBD_TO_DATE
非版本化启用归档添加全局 IDUNIQUEUUID_GLOBALID、GBD_TO_DATE
非版本化具有全局 ID注册版本UNIQUEUUID_**GLOBALID
非版本化具有 UUID注册版本NONEWINDEX
非版本化具有全局 ID 及其不规则命名索引注册版本UNIQUEIRREGNAMEDINDEX**GLOBALID
注册为版本 添加全局 IDUNIQUEUUID_**GLOBALID
注册为版本具有全局 ID启用归档UNIQUEUUID_***GLOBALID
注册为版本启用归档添加全局 IDUNIQUEUUID_**GLOBALID
非版本化具有全局 ID 和 db 唯一约束注册版本UNIQUEUUID_**GLOBALID
** A 表和 D 表上无新索引。
*** H 表已创建,并获得 GLOBALID 列上的 NONUNIQUE 索引

image of preceding table

为什么进行此更改?
在全局 ID 列上创建唯一索引是对数据损坏情况的直接响应。 此更改可确保在对版本化和非版本化启用归档的类进行操作期间,重复的全局 ID 不会填充基表。 同步和复制等操作依赖于全局 ID 的唯一性,并且在数据库中强制使用唯一全局 ID 是针对潜在重复问题的强有力的预防措施。

这种数据完整性的成本即创建索引(添加全局 ID/注册为版本/启用归档)时花费的时间。 现在,要求基础 DBMS 平台创建一个新的更大的架构。 另外,一些 DBMS 平台还要求必须重新构建表上的其他索引。