地理数据库中的视图快速浏览
在 ArcSDE 地理数据库中,可使用三种视图:
- 数据库视图(或非空间视图)
- 空间视图
- 多版本化视图
视图只能用于由 ArcGIS Server Enterprise 授予许可的 ArcSDE 地理数据库中。
数据库视图
数据库视图是从指定的非版本化、非空间表中选择数据的已存储查询。在 ArcSDE 中使用数据库视图时,既可为单个非版本化表定义数据库视图,也可在两个非版本化表之间定义数据库视图。此外,还可创建包含子查询或跨数据库的更为复杂的视图。
为版本化数据集创建视图时,将仅显示业务(基)表而非增量表中的编辑内容。要查看增量表中的编辑内容,请改为对业务表创建多版本化视图。
可以使用数据库管理系统 (DBMS) 的原生 SQL 或 ArcSDE sdetable 命令的 create_view 操作来创建数据库视图。
sdetable –o create_view 的语法如下:
sdetable –o create_view –T <view_name> –t <table1,table2...tablen> –c <table_col1,table_col2...table_coln [–a <view_col1,view_col2...view_coln>] [–w <"where_clause">] [–i {<direct connection> | <service> | <port#>}] [–s <server_name>] [–D <database>] –u <DB_User_name> [–p <DB_User_password>] [–N] [–q]
必须在视图中列出所需列 (–c)。有关 sdetable 命令及其操作和选项的说明,请参阅《ArcSDE 管理命令参考》。
用户需要具有特定权限才能创建视图;例如,必须授予用户在 Oracle 或 SQL Server 数据库中的 CREATE VIEW 权限。如果您在数据库中没有创建视图的适当权限,则无法执行 sdetable –o create_view 命令。此外,使用某些数据库管理系统时,如果要创建视图的要素类或表并不为您所有,您将无法授予其他用户访问该视图的权限,除非基础表的所有者已授予您对其他用户授权的权限。
空间视图
空间视图是包含单个空间列的数据库视图。只能为尚未注册到地理数据库的空间表创建这类视图,如果这些表已注册到地理数据库,则只能为非版本化要素类创建此类视图。
除了因为要使用什么是视图?中列出的数据库视图之外,创建空间视图的其他原因还包括:
- 定义空间视图时,可以将要素类与非空间表相连接,进而合并其中的列。
- ArcGIS 客户端只能使用包含一个空间列的表。要使用包含多个空间列的空间表,可以创建只含有表中一个空间列的空间视图。
使用 ArcSDE sdetable 命令的 create_view 操作或 SQL 均可创建空间视图。如果使用 sdetable 命令,请务必在使用 –c 选项指定的列所组成的列表中包括行 ID(或 ObjectID)和空间列。行 ID 或 ObjectID 列必须与空间列来自同一个表。如果不是,则行 ID 或 ObjectID 与 shape 列之间的唯一关系可能会被破坏,从而导致在 ArcGIS 中执行查询或渲染时结果不正确。
要使用 SQL 创建空间视图,请在视图中包括要素类或空间表中的空间列以及符合条件的行 ID 或 ObjectID 列。在 SQL 中创建视图后,必须至少将其注册到 ArcSDE 中,才能使其在 ArcGIS 客户端中显示为要素类。
使用 ArcSDE 工具、SQL 或其他 DBMS 工具创建视图时,必须考虑视图的适宜性。例如,必须确定指定表中是否真正存在指定列以及列是否存在用于加快查询执行速度的索引。如果选择用后来更改的视图代替由 ArcSDE 创建的视图,您不但需要对查询的正确性和有效性负责,还要对使用 ArcSDE 客户端的相关性和适用性负责。例如,创建涉及要素类的一对多视图,会导致 ObjectID 重复。因为假定 ObjectID 包含唯一值,所以重复 ObjectID 会在应用程序(如 ArcMap 或 ArcCatalog)中导致意外行为。
多版本化视图
多版本化视图将数据库视图、存储过程、触发器和函数整合在一起,用以通过 SQL 访问或编辑地理数据库中指定版本的表或要素类。
使用 sdetable 命令的 create_mv_view 操作可创建多版本化视图。sdetable -o create_mv_view 的语法如下:
sdetable –o create_mv_view –T <view_name> –t <table_name> [–i {<direct connection> | <service> | <port#>}] [–s <server_name>] [–D <database>] –u <DB_User_name> [–p <DB_User_password>] [–N] [–q]
有关 sdetable 命令及其操作和选项的说明,请参阅《ArcSDE 管理命令参考》。
多版本化视图只适用于单个多版本化表或要素类。无法使用 where 子句将多张表连接在一起,也无法限制多版本化视图中包括哪些行或列。
多版本化视图主要用于通过 SQL 来编辑版本化数据。无法使用 ArcGIS 客户端应用程序通过多版本化视图来修改基础表或要素类。多版本化视图所依据的表或要素类必须满足 ArcGIS 对通过 SQL 来编辑地理数据库数据的要求。有关详细信息,请参阅可使用 SQL 编辑何种数据类型?。