数据库中为什么要建立视图,它有什么好处?

视图是绝大部分数据库开发中都会使用的概念。使用视图大致有两个方面的原因。
 
1.封装查询
 
数据库虽然可以存储海量数据,但是在数据表设计上却不可能为每种关系创建数据表。例如,对于学生表,存储了学生信息,学生的属性包括学号、姓名、年龄、家庭地址等信息;而学生成绩表只存储了学生学号、科目、成绩等信息。现需获得学生姓名及成绩信息,那么就需要创建一个关系,该关系需要包含学生姓名、科目、成绩。但为该关系创建一个新的数据表,并利用实际信息进行填充,以备查询使用,是不适宜的。因为这种做法很明显的造成了数据库中数据的大量冗余。
 
视图则是解决该问题的最佳策略。因为视图可以存储查询定义(或者说关系运算),那么,一旦使用视图存储了查询定义,就如同存储了一个新的关系。用户可以直接对视图中所存储的关系进行各种操作,就如同面对的是真实的数据表。
 
2.灵活的控制安全性
 
一个数据表可能含有很多列。但是这些列的信息,对于不同角色的用户,可访问的权限有可能不同。例如,在员工表中,可能存在着员工工号、员工姓名、员工年龄、员工职位、员工家庭住址、员工社会关系等信息。对于普通用户(例如普通员工),有可能需要访问员工表,来查看某个工号的员工的姓名、职位等信息,而不允许查看家庭住址、社会关系等信息;对于高级用户(例如人事经理),则需要关注所有信息。那么,这就涉及数据表的安全性。
 
利用视图可以灵活地实现这一策略。例如,可以首先创建名为vw_employees的视图。该视图的查询定义为,选择员工表中员工工号、员工姓名、员工职位等3列。这相当于在员工关系中,进行投影运算,即选择员工工号、员工姓名、员工职位这3个属性,形成新的关系,如图1所示。
 
 

图1  利用投影运算获得普通用户使用的视图vw_employees
同样,对于高级用户,可以创建名为vw_employees_hr的视图,该视图选择员工表中所有列,如图2所示。
 
图2  利用投影运算获得HR用户使用的视图vw_employees_hr
 
然后,对于两种角色,分别分配两个视图的查询权限,与实际的数据表employees隔离开来,从而控制数据访问的安全性。

时间: 2024-11-13 12:03:49

数据库中为什么要建立视图,它有什么好处?的相关文章

数据库中的视图索引

一.视图 1.什么是视图: 视图是从一个或多个表中导出来的表,是一种不是一种真正存在的概念. 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据. 这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据. 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中. 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据. 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变. 2.视图操作sql: 创建视图: creat

使用Java实现数据库编程—05 事务、视图、索引、备份和恢复

1.事务(Transaction): 事务是将一系列数据操作绑成一个整体进行统一管理. 如果一事务执行成功,则咋子该事务中进行的所有数据更改均会提交,称为数据库中的永久成部分. 如果事务执行是遇到错误且必须取消或回滚,则数据将全部恢复到操作前的状态,所有数据的更改均被清除. 定义: 事务是一种机制.一个操作序列,包含了一组数据库操作命令,并且把所欲的命令作为一个整体起向系统提交侧小操作请求,即这一组数据库命令要么都执行,要么都不执行.   Eg: 转账过程就是一个整体 它需要两条UPDATE语句

EXCEL表数据导入到ORACLE数据库中

将EXCEL表导入ORACLE数据库中 一.建立表 1.建立表 2.查询表 select * from yy; 二.导入程序 在excel中找到需要导入的数据 2.将excel中的数据另存为文本文件(有制表符分割的) 3.在pl*sql中选择tools-->text importer,在出现的窗口中选择"Data from Textfile",然后再选择"Open data file", 在弹出的文件选择框中选中保存有数据的文本文件,此时将会看到data fr

Java中将图片保存到数据库中

在实际的开发中,我们可能需要将图片.影音等文件直接保存到数据库中,然后通过编程方式将数据读出进行使用.例如将读出的图片数据显示出来,将读出的电影文件播放出来. 二进制数据直接保存到文件和从文件中读出非常的简单.和普通的数据库操作差别不大.只是用到部分流操作.例如各种输入输出流操作.所以深刻理解流操是非常重要的. 在此我借助于一个JSP的简单实例进行讲解.此实例保存职员数据,其中职员数据包含一个图片列.此列保存每名员工的照片.在此将照片直接保存到数据库中.首先建立职员信息表EmployeeInfo

数据库中创建视图

视图   :有联系的表之间,建立虚拟的表! 步骤  :打开数据库中  ‘选用的数据库’,右击‘视图’,选择‘新建视图’.然后填加   ‘选用的数据库’中有关联的  ‘表’,选择视图中 要显示的 ‘列’,然后关闭,保存新视图就创建完成! --drop view       xueshengfenshu   --删除视图 --alter view     xkf                 --修改视图就是删除重写! 只有在前面使用top数字后,才可以使用 order by .视图中不能使用聚合

(转)数据库中视图的作用

最近在做一个功能,是和别的项目组一起合作的. 背景:现在要做一个用户管理的系统,需要我们提供服务来实现和原始数据库的兼容,但是现在我们的数据库和网站数据库中存储的内容或者说是字段有些不同,但是我们还是希望可以的话,将改动降低到最小,当然,这只是我的初步了解,现在具体的情况还没有很了解,为了这方面的应用,上网了解了一下数据库的相关操作,了解到“视图”是个比较有利的武器可以解决这个问题. 视图是从一个或几个基本表(或视图)导出的表.它与基本表不同,是一个虚表.数据库只存放视图的定义,而不存放视图对应

sqlserver 数据库中时间函数的建立

create function [dbo].[HtoSec](@lvalue as int)RETURNS intBEGINDECLARE @temp intSet @temp = @lvalue * 60 * 60RETURN @tempEND create function [dbo].[GetTime](@dtmValue as datetime)RETURNS intBEGINDECLARE @temp intDECLARE @GMT_TIMEZONE intSET @GMT_TIMEZ

Postgres数据库中的视图和物化视图

摘自:http://www.cnblogs.com/yjf512/p/4402096.html postgres中的视图在查询的时候进行扫描子表的操作,而物化视图则是实实在在地将数据存成一张表.物化视图是在9.3 之后才有的东西. 创建一个视图 CREATE OR REPLACE VIEW student_view ASSELECT * FROM student LEFT JOIN teacher ON student.teacher_id = teacher.id; 创建一个物化视图 CREA

查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数

查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06|  分类: SQL SERVER|举报|字号 订阅 (1)查询SQLServer2005中某个数据库中的表结构 SELECT TOP 100 PERCENT --a.id,CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,CASE WHEN a.colorder = 1 THEN isnull(f.v