“任何不是逻辑模型的一部分但作为虚关系而对用户可见的关系称为视图。”在操作数据库过程中,视图是一个较为常用的关系集合,它能够向用户隐藏一些特定的数据,提高安全性能;同时,视图比逻辑模型更加符合特定用户的直觉感受。我们在sql中用create view命令定义视图。create view命令格式为: create view v as<查询表达式>,其中<查询表达式>可以是任何有效的查询表达式,v表示视图名称。
例如,有这样一个视图,它包含每本书的销量,我们将这个视图命名为book_sales,我们定义视图如下:
create view book_sales as
select books.title as title, sum(sales.qty) as qfrom books, sales
where books.title_id = sales.title_id
group by books.title
定义了视图之后,我们就可以用book_sales指代视图生成的虚关系。例如,我们要查出书名为'The art of Code'的销量:
select q
from book_sales
where title = 'The art of Code'
以上是对视图的定义和使用操作。而我们在定义视图时,会遇到这样一个问题,在查询分析器中sql被多次重复运行时,系统会提示“数据库中已存在名为 'book_sales' 的对象。”,即该视图被重复创建了。因此,在定义一个视图之前,要首先判断视图book_sales是否已经存在。如果存在,将其删除,然后才能开始定义视图。我们以sql server 中的pubs数据库为例。
use pubs;
go
if object_id('dbo.book_sales', 'v')is not null
drop view dbo.book_sales;
go
总结起来,在定义一个视图时,应该首先判断是否已经存在该视图,若存在,则将其drop掉,再创建新视图。
use pubs;
go
if object_id('dbo.book_sales', 'v')is not null
drop view dbo.book_sales;
go
create view book_sales as
select books.title as title, sum(sales.qty) as qfrom books, sales
where books.title_id = sales.title_id
group by books.title