什么是 ObjectID?
ObjectID 是一个唯一非空整型字段,用于在地理数据库表中唯一地标识行。ObjectID 被限制为 32 位值,能存储的最大值为 2,147,483,647。
对于通过 ArcGIS 创建的表或在 ArcGIS 外部创建然后注册到地理数据库的表,会为其自动添加 ObjectID 字段。该字段中的值由 ArcGIS 维护。ArcGIS 将使用 ObjectID 执行一些操作,如滚动、显示选择集,以及对要素执行识别操作。
由于多数 ArcGIS for Desktop 功能要求唯一的 ObjectID,因此必须确保在 ArcGIS 外部直接处理数据库时,没有出现重复的 ObjectID 值。例如,按照一对多的关系创建视图时,便可能会使 ObjectID 重复。从而导致 ArcGIS for Desktop 功能的表现不一致。
何时将 ObjectID 添加到表中?
可以采用以下几种方法向表中添加 ObjectID:
- 向使用 ArcGIS 创建的任何表中自动添加由 ArcGIS 维护的 ObjectID 字段。
- 如果向地理数据库注册没有合适字段的表,地理数据库将向满足 ObjectID 要求的表中添加另一字段,并将该字段命名为 OBJECTID。如果表已经包含名为 OBJECTID 的列,地理数据库则添加名为 OBJECTID_1 的列。
- 如果向地理数据库注册表且该表中没有合适字段(整型,非空),现有列将用作 ObjectID。注:
如果由数据库维护现有合适字段(例如,此数据库在 SQL Server 中具有标识属性或在 PostgreSQL 中具有序列属性),向地理数据库注册表后,将从该字段中删除数据库维护属性。向地理数据库注册后,ArcGIS 将维护合格 ObjectID 字段中的值。
- 如果使用 sdetable 或 sdelayer 命令向 ArcSDE 注册表,则同时指定行 ID 列。还可指定由 ArcSDE 还是维护用户来维护这一列数据。
接下来向地理数据库注册表时,如果在向 ArcSDE 注册表时指定了由 ArcSDE 维护的行 ID,则表的行 ID 将用于 ObjectID。如果指定了由用户维护的行 ID,那么接下来当您向地理数据库注册表时,地理数据库将添加新的 ObjectID 列。此新 ObjectID 列将取代您向 ArcSDE 注册表时指定的列。该列也将用户定义的行 ID 的数据类型更改为长整型。
因此,如果在向 ArcSDE 注册之后要向地理数据库注册表,应将行 ID 注册为由 ArcSDE 维护。