ArcGIS Geodatabase版本控制机制的学习总结
本文是最近内部的一个学习的自我整理,只有关键信息,如果需要详细了解,请参阅ArcGIS帮助文档:
http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/003n000000tq000000/(关于版本机制)
1、适用条件:仅支持企业地理数据库(ArcSDE地理数据库),而个人地理数据库、文件型地理数据库不支持;
2、定义:版本是整个地理数据库在某个时刻的快照,其中包含地理数据库中的所有数据集。利用版本化,多个用户可对 ArcSDE 地理数据库中的同一数据进行编辑,而无需应用锁或复制数据。
3、版本的分类:
DEFAULT 版本:每个 ArcSDE 地理数据库都具有一个被称为 DEFAULT 的默认版本,默认情况下将连接到 DEFAULT 版本
子版本:从任意现有版本创建子版本或分支版本的方式来创建版本,如可以通过创建 DEFAULT 版本的子版本来创建第一个版本。子版本会从父版本从继承所有相关数据。一个创建好的版本树如下:
4、版本的控制原理
数据集(要素类、要素数据集或表)注册为版本后,数据库中将会创建两个增量表:用于插入和更新的 A(添加)表以及用于删除的 D(删除)表。每次更新或删除数据集中的记录时,都会向这两个表或其中一个表添加行。如:我在数据库中新建了一个Line要素类,然后将其注册为版本后,数据库中出现了如下两个表:a8,D8,8代表该要素类在[SDE_table_registry]表中的数据集的ID。
总的来说,基表、A 表和 D 表中的所有行表示要素类或表的所有版本。这表示任何一个版本都只能引用这三个表中的行的子集
A 表和 D 表中的各行使用被称为状态 ID 的整型标识符进行标记,以在向表中添加行时提供参考。每次编辑版本时均会创建新的状态,并向这两个增量表或其中一个增量表添加新行。状态可被看作是树结构的一部分,在树结构中,各分支记录了版本的发展情况。记录版本从基表到当前状态之间一连串变更的一系列状态称为谱系。显示或查询版本时,ArcGIS 会查询版本的谱系以获取状态 ID,然后从 A 表和 D 表中检索正确的记录。
几个专业术语:
父版本:是生成其他版本时所基于的地理数据库版本。如果刚才提到的其他版本仍然存在,则无法删除父版本。
子版本:是通过父版本创建的地理数据库版本。最初创建时,子版本包含与父版本相同的数据,状态与父版本相同。在子版本中进行编辑后,通常会将这些编辑内容回发到父版本。
增量表:数据集的添加表和删除表统称为增量表,因为它们用于存储对数据集所做的更改。
删除表:可记录在版本化数据集中所做的所有删除。它还包含已更新记录的记录,因为更新记录的过程就是先删除原有记录,然后再添加修改过的记录,因此更新记录等同于删除记录。删除表也称为 D 表。
基表:基表是要素类的核心表。它包含所有非空间属性,如果使用 SQL 几何类型,则它还包含空间属性。术语“基表”用于将该核心表与其他端表(例如增量表、ArcSDE XML 表或 sdebinary 几何存储类型使用的 f 和 s 表)区分开来。基表也称为业务表。
5、如何注册为版本
在某个数据集上点击右键,选择创建为版本,如图:
点击创建为版本后,会弹出如下对话框:
如果此处勾选,则在以后的编辑中,如果点击保存,则所有数据将自动保存到基表中,并删除所有在增量表的数据;如果不勾选,则保存后所有数据数据不会提交到基表中,
如果要查询当前已经审核入库的所有数据只能通过查询视图的方式(视图为:数据集名称_VW)。
6、如何切换版本
在将数据加载到地图后,在TOC控件中,点击”List by Source”视图,可以看每个数据集的来源,如下图,要素类pnt来源不同的版本:
那么如何切换不同的版本进行编辑呢?我们可以在TOC控件中的数据上,点击右键,并切换版本:
7、版本的冲突与协调
在编辑工具栏中,选择“Options”可以设置处理冲突的方式,可以看出ArcGIS支持在行级别以及属性级别进行冲突处理,而提交的顺序支持按照入库顺序或者编辑顺序进行处理。
具体项目中要选择哪种方式,应该具体情况具体分析。如图: