zoukankan      html  css  js  c++  java
  • 为什么建立视图

    1.封装查询

    数据库虽然可以存储海量数据,但是在数据表设计上却不可能为每种关系创建数据表。例如,对于学生表,存储了学生信息,学生的属性包括学号、姓名、年龄、家庭地址等信息;而学生成绩表只存储了学生学号、科目、成绩等信息。现需获得学生姓名及成绩信息,那么就需要创建一个关系,该关系需要包含学生姓名、科目、成绩。但为该关系创建一个新的数据表,并利用实际信息进行填充,以备查询使用,是不适宜的。因为这种做法很明显的造成了数据库中数据的大量冗余。
     
    视图则是解决该问题的最佳策略。因为视图可以存储查询定义(或者说关系运算),那么,一旦使用视图存储了查询定义,就如同存储了一个新的关系。用户可以直接对视图中所存储的关系进行各种操作,就如同面对的是真实的数据表。

    2.灵活的控制安全性

    一个数据表可能含有很多列。但是这些列的信息,对于不同角色的用户,可访问的权限有可能不同。例如,在员工表中,可能存在着员工工号、员工姓名、员工年龄、员工职位、员工家庭住址、员工社会关系等信息。对于普通用户(例如普通员工),有可能需要访问员工表,来查看某个工号的员工的姓名、职位等信息,而不允许查看家庭住址、社会关系等信息;对于高级用户(例如人事经理),则需要关注所有信息。那么,这就涉及数据表的安全性。
     
    利用视图可以灵活地实现这一策略。例如,可以首先创建名为vw_employees的视图。该视图的查询定义为,选择员工表中员工工号、员工姓名、员工职位等3列。这相当于在员工关系中,进行投影运算,即选择员工工号、员工姓名、员工职位这3个属性,形成新的关系,如图1所示。
     
     


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

    用户使用视图时,其感觉与使用基本表时是相同的。但是要注意以下几点:(1)由于视图是虚表,所以SQL对视图不提供建立索引的语句。(2)SQ1-般也不提供修改视图定义的语句(有此需要时,只要把原定义删除,重新定义一个新的即可,这样不影响任何数据)。(3) 对视图中数据做更新时是有限制的。.....................................................................................................................................................................................................................视图的作用1、视图能够简化用户的操作2、视图使用能以多种角度看待同一数据3、视图对重构数据库提供了一定程度的逻辑独立性4、视图能够对机密数据提供安全保护5、适当的利用视图可以更新清晰的表达查询

  • 相关阅读:
    SQLite字符串拼接
    锐化
    《面向模式的软件体系结构1模式系统》读书笔记(2) 映像模式
    SQLite的Pivot
    《面向模式的软件体系结构1模式系统》读书笔记(3) 设计模式
    《面向模式的软件体系结构1模式系统》读书笔记(1) 适应性系统和微核模式
    MMX 初体验
    平滑
    英语人名书写规则 Anny
    How to resolve USB device is disabled in Ubuntu Virtualbox Anny
  • 原文地址:https://www.cnblogs.com/zhanglin123/p/14077941.html
Copyright © 2011-2022 走看看