地理数据库 (geodatabase) 系统表快速浏览
地理数据库的内部结构表现为一系列简单表文件,称为地理数据库系统表(以 GDB_ 作为前缀),可对地理数据库的内容进行追踪。它们实质上描述的是用于指定所有数据集定义、规则和关系的地理数据库方案。这些系统表包含并管理实现地理数据库属性、数据验证规则和行为所需的元数据信息。
从 ArcGIS 10 开始,这些表的内部结构进行了重构。在 ArcGIS 10 之前的版本中,与地理数据库方案相关的信息存储在超过 35 个地理数据库系统表内,而在 ArcGIS 10 中则被合并为四个主表:
- GDB_Items - 包含地理数据库中的所有项(例如要素类、拓扑和属性域)的列表
- GDB_ItemTypes - 包含所识别出的各项类型(例如表)的预定义列表
- GDB_ItemRelationships - 包含各项之间的方案关联,例如要素数据集中包含哪些要素类
- GDB_ItemRelationshipTypes - 包含所识别出的关系类型(例如 DatasetInFeatureDataset)的预定义列表
GDB_Items 和 GDB_ItemRelationships 表示的中特定地理数据库中的用户自定义方案。表的内容随着地理数据库方案的更改而修改。GDB_ItemTypes 和 GDB_ItemRelationshipTypes 是静态表文件。下图说明了这四个表之间的关系:
GDB_Items 表
地理数据库是地理和非地理项的容器。包括:表格数据集,如要素类和表;数据集容器,如要素数据集、拓扑和几何网络;用于控制更多高级地理数据库行为的数据集;以及一些其他项目,如属性域、工具箱和工作空间扩展。从 ArcGIS 10 起,所有这些项目均存储在 GDB_Items 表中,其中每一项存储为一个单独的行。
各项具有以下属性:
- UUID - 项的唯一标识符
- Name - 项的名称
请注意,项的名称可以不是唯一的;例如,关系类和要素类可以具有相同的名称。但是,不建议为不同的项指定相同的名称,通常应充分描述项的名称以区分各项所包含的内容。
- Type - UUID,用于表示记录中各项的类型;这与唯一标识符相对应。
- Definition - XML 文档,用于定义项的属性;这些属性和 XML 模式因项类型而异。例如,对象类的定义包含子类型等信息,而编码值属性域的定义包含“编码/值”对,关系类的定义包含关系规则等。
- Documentation - XML 文档,用于存储项的元数据
- Properties - 整型值,与位掩码结合使用以检索项的几个布尔属性。目前,这仅用于表示项在 ArcGIS Desktop 中是否可见。
- Shape - 以面的形式表示的数据集范围,如适用(数据类型取决于基础 DBMS)。
这七种属性即为您最有可能使用 SQL 访问的内容。
下面的属性存储了来自项定义(如要素类的几何类型)的信息,它们在 XML 定义外部进行复制,以使地理数据库的浏览更加高效。相关的一些示例就是“数据集子类型”和“数据集信息”属性,它们的代码取决于项目的类型。
- 物理名称 - 项目的完全限定名称
- DatasetSubtype1 - 对于要素类和栅格目录,DatasetSubtype1 存储的是表的要素类型。对于关系类,它存储的是关系类的基数。对于拓扑,存储的是拓扑 ID。
- DatasetSubtype2 - 对于要素类和栅格目录,DatasetSubtype2 存储的是几何类型。对于关系类,它存储了指示关系是属性关系还是非属性关系的值
- DatasetInfo1 - 存储要素类项的 shape 字段的名称
- DatasetInfo2 - 存储参与拓扑的要素类的信息
- 路径 - 项目的唯一相对路径
- URL - 项目的关联 URL;与目录服务结合使用
- 默认值 - 项目元数据;不能由地理数据库直接使用,但可由其他客户端(如 ArcIMS 元数据服务)使用
- ItemInfo - 项目(如符号系统)的存储信息,独立于基础数据集
GDB_ItemTypes 表
GDB_ItemTypes 表包含地理数据库中所识别出的项类型的预定义集合。项类型用于对 GDB_Items 表进行归一化(GDB_Items 表中项的类型将表示为 UUID),为进一步增强地理数据库功能提供更好的支持,并定义类型层次。所有父类型都是抽象类型;因此父项实际上无法在 GDB_Items 表中找到。
GDB_ItemTypes 表的内容是静态的;它不会随着项的创建或删除而被修改。
项类型具有以下属性:
- UUID - 项类型的唯一标识符,同时也是 GDB_Item 表的类型列的外键
- ParentTypeID - 项类型的父类型。如果是抽象的项类型(不存在父类型),则为空 UUID
- 名称 - 项类型(如“要素类”或“值域范围”)的名称
- ObjectID - GDB_ItemTypes 表的唯一标识符
GDB_ItemRelationships 表
几乎所有地理数据库项目都至少与一个其他的地理数据库项目存在关系。例如,独立表与地理数据库的根文件夹相关联,域与依赖其进行验证的要素类或表相关联,要素类与其所参与的拓扑相关联。GDB_ItemRelationships 表用于追踪这些关系。
项目关系具有如下属性:
- UUID - 项关系的唯一标识符
- Type - UUID,用于表示关系的类型。这与项关系类型的唯一标识符相对应
- OriginID - 关系的源项的唯一标识符
- DestinationID - 关系的目标项的唯一标识符
- Attributes - XML 文档,包含有关项关系的详细信息
很多关系类型不包含属性;这些类型只用在控制器数据集及其控制的数据集之间的某些关系中。
- ObjectID - 唯一标识符
- Properties - 整型值,与位掩码结合使用以检索项的几个布尔属性。目前,这仅用于表示参与关系的项是否在 ArcGIS Desktop 中可见
您可能会使用 SQL 只访问前五个属性。
需要注意的是,了解项关系与关系类并不相似。实际上,每个关系类都与两个对象类(其源类和目标类)存在项关系,还与其容器(地理数据库的根文件夹或要素数据集)存在一个的项关系。
GDB_ItemRelationshipTypes 表
项类型的静态集合用来对项进行分类,与此相同,项关系类型的静态集合用来对项关系进行分类。例如,DatasetInFeatureDataset(表示要素数据集中是否存在要素类、关系类或控制器数据集)和 DomainInDataset(表示数据集是否使用类级别或子类型级别验证的属性域)是两种类型的项关系。与项类型不同,项关系类型没有对父类型和子类型应用等级概念。
项关系类型具有以下属性:
- UUID - 项关系类型的唯一标识符,同时也是项关系表的类型列的主键
- Name - 项关系类型的名称,例如 DatasetInFolder
- Forward Label - 对源项的上下文的关系的描述
- Backward Label - 对目标项上下文的关系的描述
- Origin Item Type ID - 项类型的 UUID,可充当此类型的项关系中的源项
- Destination Item Type ID - 项类型的 UUID,可充当此类型的项关系中的目标项
- Is Containment - 指示目标项是否可以存在(即使删除了源项)。
Origin Item Type ID 和 Destination Item Type ID 通常是抽象项类型的标识符。例如,DomainInDataset 关系类型的 Origin Type ID 为“属性域”,即带有两个子类型的抽象项类型:“值域范围”和“编码值属性域”。
地理数据库系统表中的 XML
如地理数据库系统表的属性定义中所述,某些字段使用 XML 数据类型。在 IBM DB2、Microsoft SQL Server 和 PostgreSQL 的 ArcSDE 地理数据库内,这些列使用数据库管理系统的原生 XML,因此可通过 SQL 使用 XPath 表达式进行查询。
在 Oracle 和 Informix 中的地理数据库内,XML 列使用 ArcSDE XML,从而在一系列独立的表中以 BLOB 的形式存储信息。因此,不能直接通过 SQL 访问它们。
为了能够查看 Oracle 的地理数据库内的系统表中的 XML 列的内容,存在两个系统视图,这两个视图使用 CLOB 数据类型存储地理数据库系统表 XML 列中的内容。GDB_Items_vw 在各个 CLOB 列中显示 GDB_Items 表的 Definition、Documentation 和 ItemInfo 这三个列的内容。GDB_ItemRelationships_vw 在 CLOB 列中显示了 GDB_ItemRelationships 表的“属性”列的内容。可以文本的形式读取 CLOB 列的内容。
查询这些视图时,从 CLOB 列提取字符串,将其转换为 XML 类型,然后对其执行 XPath 查询。请注意,如果尝试为包含空字符串的列创建 XML 类型,该操作将失败,同时显示消息“XML 解析失败”,因为 Oracle 不支持该操作。
要查询 CLOB 列的内容,必须配置 Oracle 服务器接受 SQL 连接。有关详细信息,请参阅配置 Oracle 监听器以使用 SQL。