Answers:
以前的答案似乎都没有提到的另一种用法是更易于部署表结构更改。
假设您希望停用T_OLD
包含活动用户数据的表(),而改用一个具有相似数据(名为T_NEW
)的新表,但同时包含活动用户和非活动用户的数据,并增加一列active
。
如果您的系统中有大量的查询,则SELECT whatever FROM T_OLD WHERE whatever
有两种选择可用于展开:
1)Cold Turkey-更改数据库,同时更改,测试和发布包含所述查询的大量代码。很难做到(甚至协调),非常冒险。坏。
2)渐进式 -通过创建T_NEW
表,删除T_OLD
表并创建一个名为VIEW的VIEW来更改数据库,该VIEWT_OLD
模仿T_OLD
表100%(例如,视图查询为SELECT all_fields_except_active FROM T_NEW WHERE active=1
)。
这样一来,您就可以避免释放当前从中选择的任何代码T_OLD
,并进行更改以将代码从轻松地迁移T_OLD
到T_NEW
。
这是一个简单的示例,还有很多其他方面。
PS另一方面,您可能应该有一个存储过程API,而不是来自的直接查询T_OLD
,但这并非总是如此。
(摘自Google搜索中出现的第一个教程(链接现已失效),但是它具有我本人手动键入的所有优点。)
视图具有以下优点:
- 安全性-可以使用户可以访问视图,而不能直接访问基础表。这样,DBA可以仅向用户提供所需的数据,同时保护同一表中的其他数据。
- 简单-视图可用于隐藏和重用复杂的查询。
- 列名简化或澄清-视图可用于在列名上提供别名,以使其更容易记忆和/或更有意义。
- 垫脚石-视图可以在“多级”查询中提供垫脚石。例如,您可以创建一个查询视图,以计算每个销售人员的销售数量。然后,您可以查询该视图,以按销售人员的销售数量分组销售人员。
VIEWS可以用作SELECT / CODE的可重用部分,可以包含在要联接的其他选择/查询中,并且可以使用各种不同的过滤器,而不必每次都重新创建整个SELECT。
这也将逻辑放在单个位置,因此您不必在整个代码库中都进行更改。
看一下
视图的主要优点在于,它在大多数情况下都可以像表一样使用,但是与表不同,它可以封装非常复杂的计算和常用联接。除了存储过程,它还可以使用数据库中几乎所有对象。当您总是需要连接同一组表(例如带有订单明细的订单)以获取摘要计算字段等时,视图最有用。
视图是一个抽象层,它执行任何好的抽象层所要做的工作,包括封装数据库模式并保护您免受更改内部实现细节的后果。
这是一个界面。
以下是使用视图而不是直接使用表的许多原因
意见是邪恶的!尽可能避免使用它们,并且仅出于DVK提及的原因使用-临时数据迁移。
您应该理解,在具有100个表的数据库中,很难记住每个表的用途。现在,如果您在此处添加另外300个视图,则将变成一团糟。比“视图爱好者”更倾向于使用嵌套视图,然后在存储过程中使用嵌套视图。我现在个人使用一个数据库,其中的视图嵌套了4次深度!因此,要了解存储过程的最简单逻辑,我必须首先浏览所有视图。