查看
什么是视图?
视图 是一个查询及其结果,它类似于数据库中的虚拟表。数据库按需计算视图,这意味着它们不是预先计算或物化的,因此不会在数据库中占用任何存储空间。您可以将视图视为虚拟或逻辑表。
数据库视图允许您从多个表中组合信息,并根据查询该信息的人的需求格式化信息。您(或数据库管理员)可以创建一个视图,隐藏混乱表中的不必要字段,或将表连接起来以汇总相关数据。通过使用视图作为起点,人们不必每次都运行相同的复杂查询,只是为了获取关于数据的问题。
查询视图的缺点是这些查询可能运行时间较长,特别是如果该视图是多个表或多个 连接 的结果。
数据库管理员也使用视图进行安全目的,例如创建视图来隐藏基表中的某些字段。这样,其他用户仍然可以访问和查询他们所需的数据,而不必访问敏感字段或行。
视图与物化视图
如果视图是虚拟表(按需计算),那么物化视图就像数据库中的常规表。虽然视图要求每次引用该视图时都要重新运行查询,但物化视图是预先计算并保存在数据库中的视图。因此,物化视图会占用您的数据库空间,但由于数据库不必每次都计算物化视图,因此它们在查询时比标准数据库视图要快得多(就像查询常规表一样)。
何时以及何时不应使用数据库视图
在您的数据库中创建视图是一个好主意,如果您
-
需要定期访问复杂查询的结果,但又不想每次都输入该查询。
-
您希望通过限制对敏感信息的访问来加强数据库安全。
-
您想创建自定义列,而不会改变数据库的底层结构。
-
您想通过隐藏不太可能被查询的字段来简化表的显示。
然而,如果您的数据库的底层结构可能会发生变化,您可能不想依赖于视图;一旦字段名称更改,您已建立的视图查询可能会出错。
您的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的数据库或数据仓库的基本功能,但创建、物化和维护视图的具体细节可能因您使用的数据库软件或数据仓库而异。