5.1. 空间数据库¶
本章介绍使用QGIS创建和编辑空间数据库。将简要回顾数据库的核心概念; 我们假设您通常对本章介绍的大多数内容都熟悉数据库概念和SQL。本章介绍的主题如下:
数据库建设的核心概念
创建 空间数据库
导入和导出数据
编辑数据库
创建查询
创建视图
5.1.1. 基本数据库概念¶
数据库是数据的结构化数据集合。与以平面文件格式(如shapefile或KML)存储的数据相比,数据库体现出了多种优势。 这些好处包括复杂的查询、复杂的关系、可伸缩性、安全性、数据完整性和事务等等。考虑到上述好处,使用数据库存储地理空间数据相对容易。
数据库有多种类型;但是,最常见的数据库类型,以及本章将讨论的数据库类型是关系数据库。
描述数据库表¶
关系数据库将数据存储在表中。一个表由行和列组成,其中每一行是单个数据记录,每一列存储与每条记录关联的字段值。 一个表可以有任意数量的记录;但是,每个字段都有唯一的名称并存储特定类型的数据。
数据类型限制可以存储在字段中的信息,并且对于表中的每个字段选择适当的数据类型及其相关参数非常重要。 常见的数据类型如下:
整数
浮点/实数/十进制
文本
日期
这些数据类型中的每种都可以设置其他约束,例如设置默认值、限制字段大小或禁止空值。
除了前面提到的常见数据类型外,一些数据库还支持几何字段类型,允许存储以下几何类型:
点
多点
线
多线
多边形
多面
多点/线/多边形类型存储多个部分的几何图形,因此一个记录有多个与之关联的几何图形部分。
ESRIshapefile文件将地理空间数据存储在多类型几何图形中,因此如果计划在格式之间进行转换,则使用多类型几何图形是一个很好的做法。
了解表关系¶
表关系连接表之间的记录。关联表的好处是减少数据冗余和提高数据完整性。为了将两个表关联在一起, 每个表必须包含具有共同值的字段。例如,一个表可以列出一个城市的所有地块,而第二个表则列出该城市的所有 土地所有者。parcels表可以有OwnerID字段,该字段也存在于owners表中,以便可以将owners表中的正确所有 者与parcels表中的正确地块相关联。这在一个所有者拥有多个地块的情况下是有益的, 但我们只需存储一次所有者信息,这节省了空间,而且更易于更新,因为我们只需更新一个记录中的所有者信息。
组织表以减少冗余的过程称为规范化。规范化通常包括将较大的表拆分为较小、冗余度较低的表, 然后定义表之间的关系。
字段可以定义为索引。设置为索引的字段只能包含对每个记录唯一的值,因此,可以使用该字段唯一地标识表中的每个 记录。索引之所以有用有两个原因。首先,如果索引字段是查询的一部分,它允许在查询期间快速找到记录。 其次,可以将索引设置为表的主键,从而可以建立表关系。
主键是唯一标识自己表中记录的一个或多个字段。外键是唯一标识另一个表中记录的一个或多个字段。 创建关系时,来自一个表的记录将链接到另一个表的记录。使用相关表,可以执行更复杂的查询, 并减少数据库中的冗余。
结构化查询语言基础研究综述¶
结构化查询语言(SQL)是一种用于管理数据库及其包含的数据的语言。涵盖SQL是一项艰巨的任务,我们不讨论,因此我们只讨论与本章相关的快速刷新。
SQL提供了选择、插入、删除和更新数据的函数。四个常用的SQL数据函数是:
SELECT :这将基于表达式从一个或多个表中检索一组临时数据。基本查询是 SELECT <field(s)> FROM <table> WHERE <field> <operator> <value>; 在 <field> 是必须从中检索值的字段的名称,并且 <table> 必须在其上执行查询的表。这个 <operator> 部分 检查是否相等(例如 = , >= 和 LIKE ) <value> 是要与字段进行比较的值。
INSERT :这会将新记录插入表中。这个 INSERT INTO <table> (<field1>, <field2>, <field3>) VALUES (<value1>, <value2>, <value3>); 语句在三个各自的字段中插入三个值,其中 <value1> , <value2> 和 <value3> 存储在 <field1> , <field2> 和 <field3> 属于 <table>
UPDATE :这将修改表中的现有记录。这个 UPDATE <table> SET <field> = <value>; 语句更新一个字段的值,其中 <value> 存储在 <field> 属于 <table>
DELETE :这将从表中删除记录。下面的语句删除与 WHERE 条款: DELETE FROM <table> WHERE <field> <operator> <value>; 在 <table> 是要从中删除 记录的表, <field> 是字段的名称, <operator> 检查是否相等,以及 <value> 是要对照 字段检查的值。
另一个SQL特性是视图。视图是以表的形式显示的存储查询,但实际上是在访问视图时动态构建的。 要创建视图,只需在 SELECT 语句与 CREATE VIEW <view_name> AS 然后创建一个名为 <view_name> 的视图。然后,可以将新视图视为表。