Oracel数据库中视图与同义词的理解及应用场景

转载至: https://blog.csdn.net/u012411219/article/details/51321162

1. 数据库对象之【视图】简单介绍

   1.1 What:什么叫视图?

           视图是一种数据库对象,是从一个或多个数据库表或视图中查询或计算出结果的虚拟表,视图对应的数据并不是真正存储在视图中,而是存在于实际引用的数据库表中,视图的构成可以是单表查询,多表联合查询,分组查询以及计算(表达式)查询等。

   1.2 Why:为何用视图?

           通常情况下某些数据库表的数据是敏感的,不是每个用户都能进行访问,但某些用户需要读取某些表的部分数据,这时就可以定义指定条件的视图来限制用户只能访问其指定的列并提供一个视图接口进行访问,基于这样的原理也能大大简化查询语句编写以及复杂条件下的数据筛选;同时延伸出视图中套用视图,因为视图也是一个“表”所以视图中引用视图从而简化用户更复杂的数据筛选,用户只需要调用视图即可得到经过复杂运算后的数据,提高开发效率的同时提高数据安全性。

   1.3 When:何时用视图?

           简单来说,当用户需要查询未授权的数据表且又需要部分数据表的部分列进行逻辑处理;对于复杂SQL条件筛选或特定数据只开放部分数据列让用户进行查询等;

   1.4 Class:视图的分类? 

           a) 关系视图:它属于数据库对象的一种,也就是最常见的一种关联查询;

           b) 内嵌视图:它不属于任何用户,也不是对象,创建方式与普通视图完全不同,不具有可复用性,不能通过数据字典获取数据;

           c) 对象视图:它是基于表对象类型的视图,特性是继承、封装等可根据需要构建对象类型封装复杂查询(官方:为了迎合对象类型而重建数据表是不实现的);

           d) 物化视图:它主要用于数据库的容灾(备份),实体化的视图可存储和查询,通过DBLink连接在主数据库物化视图中复制,当主库异常备库接管实现容灾;

   1.5 How:视图如何编写?

    视图编写语法:

create [ or replace ] [ force ] view [schema.]view_name -- [force不考虑引用表是否存或是否有表权限也进行创建]
[ (column1, column2,...) ] -- 视图的列别名,若查询中包含组函数或计算公式必须设置别名(别名可以定义在SQL查询中)
as 
select ... -- 具体关联查询SQL语句
[ with check option ] [ constraint constraint_name ] -- 对视图进行DML操作时必须是视图能查询的结果,否则返回错误提示
[ with read only ]; -- 创建的视图只能用于读不能写

  视图编写案例:

create or replace force view emp_view
(eid, ename, esal)
as 
select eid, ename, avg(esal) 
from t_basic_emp 
group by eid, ename 
--with check option constraint vv_emp_pk
with read only; 

2. 数据库对象之【同义词】简单介绍

   2.1 What:什么叫同义词?

           同义词亦称“别名”,顾名思义就是给对象重新取一个名字简化对象书写,当然作用不仅仅于此;它支持所有对象同义词创建,与视图不同的是不占用存储空间,对于表而言,同义词只针对单表定义别名,视图可以对多表检索筛选并定义约束条件,还能为同义词建立视图;

   2.2 Why:为何用同义词?

           当用户访问链接库或数据库对象时为了省去访问对象前加用户等其他对象的一种简化方式;

   2.3 When:何时用同义词?

            当多用户协同开发时,尤其是多库(DBLink)之间的数据交互时,为了方便编写可以建立同义词从而达到简化的目的;

   2.4 Class:同义词的分类? 

           a) 公共同义词:它是数据库所有用户所共享,任务用户均能访问;

           b) 私有同义词:它是私有的,在未进行授权的情况下只有同义词创建者才能访问;

   2.5 How:同义词如何编写?

    同义词编写语法:

create public/any synonym synonym_name for user.table; --当前数据库建立同义词
create public/any synonym synonym_name for user.table@DBLink_Name; -- 远程数据库建立同义词

猜你喜欢

转载自blog.csdn.net/qq_41586280/article/details/82907104