在企业级地理数据库中,可使用四种视图:
数据库视图
数据库视图是从指定的非版本化表中选择数据的已存储查询。可以在数据库或企业级地理数据库表中定义视图。在企业级地理数据库中使用数据库视图时,既可为单个非版本化表定义数据库视图,也可在两个非版本化表之间定义数据库视图。此外,还可创建包含子查询的更为复杂的视图。
与 ArcGIS 一起使用的视图可以包含一个空间列。如果空间列已存在,则这些视图可以被称为空间视图。请注意,创建空间视图时,必须包含与空间列来自同一个表的 ObjectID 列。如果未包含要素类中的 ObjectID,则 ObjectID 与 shape 列之间的唯一关系可能会被破坏,从而导致在 ArcGIS 中执行查询或渲染时结果不正确。
无法通过 ArcGIS 客户端或服务对数据库视图进行编辑。
以下是使用数据库视图的几种原因:
- 视图能够以预定义的方式提供行或列的子集。这可减少从数据库到客户端的数据传输量,进而提高性能。
- 视图使您能够修改数据库中的常用查询,并使其可供多个用户使用。这减少了用户自行构建复杂查询的需要。
- 视图可连接多个业务表或其他视图中的数据。
- 可使用聚合函数来将数据汇总到视图中。这同样也可减少从数据库到客户端的数据传输量,进而提高性能。
- 可授予用户对视图的 select 权限,授予方式与表相同。因此,可使用视图来控制对业务表中的行或列的访问权限。
- 定义视图时,可以将要素类与非空间表相连接,进而合并其中的列。
- ArcGIS 只能使用包含一个空间列的表。要使用包含多个空间列的空间表,可以创建只含有表中一个空间列的空间视图。
- ArcGIS 只能使用包含一个空间参考的表。如果表包含多个空间参考,则可以创建只包含使用相同空间参考的记录的视图。
您可以使用 ArcGIS Desktop 中的创建数据库视图工具或数据库快捷菜单创建数据库视图,或使用数据库管理系统 (DBMS) 的原生 SQL 进行创建。
用户需要具有特定权限才能创建视图;例如,必须授予用户在 Oracle 或 SQL Server 数据库中的 create view 权限。使用某些数据库管理系统时,如果要创建视图的要素类或表并不为您所有,您将无法授予其他用户访问该视图的权限,除非基础表的所有者已授予您对其他用户授权的权限。
使用数据库视图时,应注意以下事项:
- 即使您使用创建数据库视图在地理数据库表中定义了视图,视图在数据库中也是以对象的形式存在并且不会注册到地理数据库。
- 对基础表的方案所做的更改并不会反映在视图中。要在视图中包含附加列,必须将视图重新定义为包含这些列。
- 无法通过 ArcGIS Desktop 或 ArcGIS 要素服务中的数据库视图编辑数据。
- 当您在版本化地理数据库表或要素类中创建视图时,您只能看到基表中的数据而非增量表中的编辑内容。要通过 ArcGIS 客户端在视图中查看编辑内容,您需要协调编辑内容并将其提交至默认版本,然后压缩地理数据库。如果您想要通过 SQL、第三方或自定义客户端在视图中查看编辑内容,可使用系统在您将地理数据库表或要素类注册为版本时自动创建的版本化视图。
- 如果您的视图定义中包含了一个空间列,则该空间列必须是 SQL 几何数据类型,生成空间列的要素类无法注册为版本,并且必须将含有该空间列的要素类的 ObjectID 包括在视图定义中。
注册到地理数据库的视图
如果您的数据库中包含地理数据库,您可以使用创建数据库视图工具或 SQL 来创建数据库视图,并使用注册到地理数据库地理处理工具将该视图注册到地理数据库中。
将视图注册到地理数据库的原因包括:
- 当您将视图注册到地理数据库中后,视图的相关信息会存储在地理数据库系统表中。这在您将空间视图注册到地理数据库时尤其有用,这是因为您在注册空间视图时会定义几何类型、空间参考以及范围,这些都会提高将空间视图添加到地图中时的性能。
- 您可以定义注册到地理数据库中的视图的元数据。
- 您可以在仅查询要素服务中发布已注册的视图。
如果要素类使用 SQL 几何类型并且不会作为版本化要素类进行注册,则可以在您创建的视图中包含单个空间列。要创建空间视图,应在视图定义中包含空间列和要素类的 ObjectID,然后对其进行注册。
注册到地理数据库的视图无法通过 ArcGIS 客户端或服务进行编辑。
版本化视图
版本化视图将数据库视图、存储过程、触发器和函数整合在一起,用以通过 SQL 访问或编辑地理数据库中指定版本的表或要素类。
包含版本化视图的原因如下:
- 版本化视图包含当前存储在表的增量表中的编辑内容。
- 版本化视图允许您使用 SQL 或第三方应用程序编辑版本化表和要素类。
系统会在您将表或要素类注册为版本时自动为其创建版本化视图。在 ArcGIS 10.1 之前于地理数据库中注册为版本的表或要素类会自动具有关联的版本化视图。如果已拥有这样的版本化数据,并且想要为其的版本化视图,请右键单击 ArcMap 目录树中的版本化表、要素类或要素数据集,指向管理,然后单击启用 SQL 访问。
版本化视图只适用于单个版本化表或要素类,并且适用于整个表。不能使用 where 子句将多张表连接在一起,也无法限制版本化视图中包括哪些行或列。
版本化视图主要用于通过 SQL 来编辑版本化数据。无法使用 ArcGIS 客户端应用程序通过版本化视图来修改基础表或要素类。版本化视图所依据的表或要素类必须满足 ArcGIS 对通过 SQL 编辑地理数据库数据的要求。
存档视图
存档视图是一个在非版本化且已启用存档的表或要素类上定义的数据库视图。存档视图还包括通过存档视图进行编辑时将存档表保持为最新状态的触发器。当您针对数据集启用存档功能或针对已启用存档功能的非版本化数据集启用 SQL 访问时,将创建存档视图。
包含存档视图的原因如下:
- 存档视图允许您访问启用了存档的表的历史记录表中的数据。
- 存档视图允许您使用 SQL 编辑启用了存档的表和要素类。
存档视图只适用于单个版本化表或要素类,并且适用于整个表。不能使用 where 子句将多张表连接在一起,也无法限制存档视图中包括哪些行或列。