数据库表中的唯一标识符字段
ArcGIS 中使用的所有表和要素类必须包含一个能够唯一标识每行或每个要素的字段。
要在 ArcGIS 中用作唯一标识符,字段必须不为空、包含唯一值,并且属于以下数据类型之一:
- 整型(仅限正值)
- 字符串
- GUID
- 日期
由于唯一标识符字段中的值是用于识别 ArcGIS 中行或要素对象的唯一值,因此,该字段中的值必须始终唯一且不可为空。您必须确保其满足此要求。
ArcGIS 遇到空值时,您将接收到一个错误信息,不过,ArcGIS 并不强制要求查询图层或数据库表中使用的唯一标识符字段中各值的唯一性。如果 ArcGIS 遇到不唯一的值,并它不会返回任何错误;但是,可能会在 ArcGIS 的选择集或其他查询中发现不一致的结果。
当您从目录树中拖动数据库表并将其放在 ArcMap 中或验证查询图层定义时,ArcGIS 会默认将它找到的第一个非空字段设置为唯一标识符字段。您可以使用该字段,也可以打开查询定义并选择另一字段或字段组作为唯一标识符。有关说明,请参阅选择唯一标识符字段。
使用单个字段作为唯一标识符
如果指定单个整型字段作为唯一标识符,则 ArcGIS 会直接使用该字段中的值来唯一标识数据库表中的所有要素和行。
如果数据库表中没有可以用作唯一标识符的字段,且您正在使用 Microsoft SQL Server、Oracle 或 PostgreSQL 数据库,那么可以运行添加增量 ID 字段地理处理工具向表中添加唯一标识符整型字段。
如果将单个字符串字段用作唯一标识符,则 ArcGIS 必须将这些唯一值映射到一个整数。在系统需要使用 ObjectID 属性的任何时候(例如,创建地图选择内容或打开属性表时)均可在 ArcGIS 中完成此操作。ArcGIS 可以添加名为 ESRI_OID 的属性并在其中存储唯一整数值。该属性只是图层定义的一部分;基础数据库表并未发生更改。
使用复合唯一标识符
可以选择单个字段或多个字段来定义唯一标识符。如果选择使用多个字段,那么这些字段中的组合值必须是唯一的。以下示例显示了两个文本字段,分别是 member_surname 和 signup_date。单独来看,这些字段中的值可能不是唯一的。但将它们组合使用时,这些值是唯一的,如下所示:
member_surname | signup_date |
---|---|
alfred | 2006-09-28 10:15:41 |
dewey | 2006-09-28 10:15:56 |
johnson | 2000-02-19 09:14:50 |
johnson | 2004-12-08 11:02:32 |
mujan | 2011-07-07 12:44:21 |
这些值的组合将用作生成唯一整数值的键,该整数值将存储在名为 ESRI_OID 的属性中。该属性只是图层定义的一部分;基础数据库表并未发生更改。
前一示例中的图层定义将包括 ESRI_OID 列,如下所示:
member_surname | signup_date | ESRI_OID |
---|---|---|
alfred | 2006-09-28 10:15:41 | 1 |
dewey | 2006-09-28 10:15:56 | 2 |
johnson | 2000-02-19 09:14:50 | 3 |
johnson | 2004-12-08 11:02:32 | 4 |
mujan | 2011-07-07 12:44:21 | 5 |
请注意,如果指定的多个字段的组合值或单个文本字段不是唯一的,那么 ArcGIS 将认为这些记录都相同,并会将其映射到同一个 ESRI_OID 值。
如果表中已包含一个名为 ESRI_OID 的字段,则会向图层定义添加一个名为 ESRI_OID_1 的属性。
不能发布使用复合唯一标识符的要素类作为可编辑的要素服务。