答案
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 列上的非唯一索引。
下表对行为进行了汇总:
类类型 | 前提条件 | 操作 | 索引类型 | 索引名称 | 列 |
---|
非版本化 | | 添加全局 ID | UNIQUE | UUID_ | GLOBALID |
非版本化 | 具有全局 ID | 启用非版本化归档 | UNIQUE | UUID_ | GLOBALID、GBD_TO_DATE |
非版本化 | 启用归档 | 添加全局 ID | UNIQUE | UUID_ | GLOBALID、GBD_TO_DATE |
非版本化 | 具有全局 ID | 注册版本 | UNIQUE | UUID_** | GLOBALID |
非版本化 | 具有 UUID | 注册版本 | NO | NEW | INDEX |
非版本化 | 具有全局 ID 及其不规则命名索引 | 注册版本 | UNIQUE | IRREGNAMEDINDEX** | GLOBALID |
注册为版本 | | 添加全局 ID | UNIQUE | UUID_** | GLOBALID |
注册为版本 | 具有全局 ID | 启用归档 | UNIQUE | UUID_*** | GLOBALID |
注册为版本 | 启用归档 | 添加全局 ID | UNIQUE | UUID_** | GLOBALID |
非版本化 | 具有全局 ID 和 db 唯一约束 | 注册版本 | UNIQUE | UUID_** | GLOBALID |
** A 表和 D 表上无新索引。
*** H 表已创建,并获得 GLOBALID 列上的 NONUNIQUE 索引
为什么进行此更改?
在全局 ID 列上创建唯一索引是对数据损坏情况的直接响应。 此更改可确保在对版本化和非版本化启用归档的类进行操作期间,重复的全局 ID 不会填充基表。 同步和复制等操作依赖于全局 ID 的唯一性,并且在数据库中强制使用唯一全局 ID 是针对潜在重复问题的强有力的预防措施。
这种数据完整性的成本即创建索引(添加全局 ID/注册为版本/启用归档)时花费的时间。 现在,要求基础 DBMS 平台创建一个新的更大的架构。 另外,一些 DBMS 平台还要求必须重新构建表上的其他索引。