数据库视图是存储的查询,可根据视图定义从指定的表中选择数据。 视图可以包括单个表、多个表和子查询。
视图作为数据库中的对象存在,用户需要特定的数据库权限才能创建它们。 要了解在该类型的数据库中视图支持的内容,请阅读数据库管理系统的文档。
您可以使用创建数据库视图地理处理工具或数据库连接快捷菜单中的新建 > 视图选项,在企业级地理数据库中创建数据库视图,或使用数据库管理系统的原生 SQL。
注:
即使已在地理数据库的表和要素类上定义了视图,或已使用创建数据库视图地理处理工具创建了视图,也不会在地理数据库中自动注册视图。 除非您显式注册视图,否则不会在地理数据库中注册视图。
使用视图的原因
以下是在地理数据库中创建数据库视图的一些原因:
- 视图能够以预定义的方式提供行或列的子集。 这可减少从数据库到客户端的数据传输量,进而提高性能。
- 限制视图中存在的列或行还可以控制用户所见的数据。 例如,负责评估库存和订购产品的员工不需要看到购买产品的人员姓名或销售价格。 可以创建一个不包括这些列的视图,并在视图上授予库存员工 select 权限,而不是让这些员工访问存储该信息的整个表。
- 限制列和行还允许您满足 ArcGIS 数据要求。 例如,ArcGIS 只能使用包含一个空间列的表。 要使用包含多个空间列的空间表,可以创建视图。 每个视图可以包含一个空间列。 类似地,ArcGIS 只能使用包含一个空间参考的表。 如果表包含存储在多个空间参考中的数据,则可以创建只包含使用相同空间参考的行(要素)的视图。
- 视图使您能够修改数据库中的常用查询,并使其可供多个用户使用。 这减少了用户自行构建复杂查询的需要。
- 视图可连接不同表或其他视图中的数据。
- 可使用聚合函数来将数据汇总到视图中。 这同样也可减少从数据库到客户端的数据传输量,进而提高性能。
- 定义视图时,可以将要素类与非空间表相连接,进而合并其中的列。
使用视图时的注意事项
使用 ArcGIS 中的视图时,应注意以下事项:
- 即使您在地理数据库中注册了视图,也无法通过视图使用 ArcGIS 客户端或服务编辑数据。
- 对基础表的方案所做的更改并不会反映在视图中。 要在视图中包含附加列,必须将视图重新定义为包含这些列。
警告:
如果通过使用 SQL 或其他数据库工具更改现有视图来替换由 ArcGIS 创建的视图,您不但需要对查询的正确性和有效性负责,还要对使用 ArcGIS 客户端的相关性和适用性负责。 例如,创建涉及要素类的一对多视图,会导致对象 ID 重复。 从而导致应用程序(如 ArcGIS Pro)和 web 服务出现意外行为,因为它们要求对象 ID 包含唯一值。
- 在大多数情况下,您在视图中包含的地理数据库表和要素类不应注册为传统版本或启用归档。 当您在参与传统版本化的地理数据库表或要素类中创建视图时,您只能看到基表中的数据,而非增量表中的编辑内容或存储在归档表中的记录。 要通过 ArcGIS 客户端在视图中查看编辑内容,您需要协调编辑内容并将其提交至默认版本,然后完全压缩地理数据库。
- 在使用 ArcGIS 中的视图定义中包含空间列时,必须满足以下要求:
- 视图中仅包含一个空间列。
- 视图定义必须包括与空间列相同的要素类中的对象 ID 列。 如果您未包含要素类中的对象 ID,则对象 ID 与形状列之间的唯一关系可能会被破坏,从而导致在 ArcGIS 中执行视图查询或渲染时结果不准确。
注册到地理数据库的视图
在地理数据库中创建视图后,可以运行注册到地理数据库地理处理工具,将视图变为地理数据库对象。
将视图注册到地理数据库的原因包括:
- 当您将视图注册到地理数据库中后,视图的相关信息会存储在地理数据库系统表中。 向地图添加包含空间字段的视图时,此信息(例如几何类型、空间参考和范围)可提高性能。
- 如果您是视图所有者,那么您可定义已注册到地理数据库的视图上的元数据。