什么是数据库视图?
什么是数据库视图,以及如何使用它来简化您的查询
什么是视图?
一个 视图 是一个已保存的查询,它在数据库中像一个虚拟表一样工作。您可以像操作真实表一样与视图交互,但视图本身并不存储数据——相反,每次您引用视图时,数据库都会运行其底层查询。
数据库视图允许您组合来自多个表的信息,并以最适合需要查询这些数据的人员的方式格式化这些信息。您(或数据库管理员)可以创建一个视图,隐藏杂乱表中不需要的字段,或者联接表以汇集相关数据。通过将视图作为起点,人们无需每次都运行相同的复杂查询,就能直接提出他们关于数据的实际问题。
查询视图的缺点是,这些查询可能耗时较长,特别是当视图是多个表或多次 联接 的结果时。
数据库管理员还出于安全目的使用视图,例如创建隐藏基本表中某些字段的视图。这样,其他用户仍然可以访问和查询他们所需的数据,而不会获得对敏感字段或行的访问权限。
视图 vs. 物化视图
如果视图是虚拟表(按需计算),那么 物化视图 则像数据库中的常规表。视图每次引用时都需要重新运行查询,而物化视图是预先计算并保存在数据库中的视图。因此,物化视图会占用数据库空间,但由于数据库每次查询时无需重新计算它们,因此物化视图在查询时比标准数据库视图的速度快得多(就像查询普通表一样)。
何时应该(不应该)使用数据库视图
在数据库中创建视图是个好主意,如果
-
您需要定期访问复杂查询的结果,并且不想每次都重新输入该查询。
-
您希望通过限制对敏感信息的访问来加强数据库安全。
-
您希望创建自定义列,而无需更改数据库的底层结构。
-
您希望通过隐藏不太可能被查询的字段来简化表的显示。
然而,如果您的数据库底层结构可能会发生变化,您可能不希望依赖视图;一旦字段名称发生改变,您建立的视图查询可能会失效。
您的 BI 工具可能也有类似视图的功能,无论是 模型、已保存问题 还是 SQL 代码片段。这里的重要区别在于,这些功能都存在于 BI 工具的范畴内,而视图(无论是物化视图还是非物化视图)则是内置于您数据库本身的。
视图示例
以 Metabase 的示例数据库为例,假设我们想基于 People
表创建一个视图,供我们在宾夕法尼亚州的团队使用,以访问我们宾夕法尼亚州客户的姓名、地址、生日和电子邮件等信息,但不包括用户密码。
我们将在数据库中运行如下所示的查询来创建该视图,该查询创建视图并将其命名为 pennsylvania_customers
,仅包含我们希望从 People
表中提取的列,并且只显示 State
字段值为宾夕法尼亚州(PA)缩写的记录。
CREATE VIEW pennsylvania_customers
AS
SELECT
id
address
email
name
city
state
birth_date
zip
created_at
FROM
people
WHERE state = 'PA'
然后,在未来的查询中,我们在宾夕法尼亚州的团队可以通过查询 pennsylvania_customers
作为起点,访问他们所需的客户群信息。
虽然视图是任何基于 SQL 的数据库或数据仓库的相当基础的功能,但创建、物化和维护它们的具体细节可能因您使用的 数据库软件或数据仓库 而异。
下一步:数据立方体
从多于两个维度思考您的数据。