暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

面试必备:聊聊数据库的视图及使用场景?

DotNet开发跳槽 2021-07-22
977

简述:

    视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。

使用场景:

1)计算列的需要,数据库设计范式要求我们减少冗余字段,因此现在很多数据表都没有计算列字段,如采购单:有价格、数量、税率、含税金额,多半没有不含税金额、税额,而这些字段在很多报表中有都会用到,所以我们可以创建一个含有计算列字段的视图来解决这个问题。
2)不同表字段聚合,信息重组,如:经销商通常有业务员,业务员通常有上下级关系(客户经理、区域经理、大区经理等),因此查看经销商业务员时我们需要看到直管业务员是谁?该业务员对应的区域经理、大区经理是谁(可能NULL)?因此我们可以联合经销商表、业务员信息表、业务员上下级关系表定义一个经销商视图。
3)安全性需要,主要是早期遗留系统集成需要,如:需要xx系统数据,又没接口,怎么办?直接操作数据库,这时就涉及数据安全性,合理利用视图则可以减少很多授权工作和保证数据安全性。当下新构建的系统几乎都是暴露api接口,因此数据安全性更多关注在接口的身份认证和数据粒度方面。
4)兼容老的数据表,曾经碰到过这么个问题。
公司自主研发的进销存管理系统,一开始自用的,后来合作伙伴企业也要用,所以打算Saas化,当初做了一个最大的变动就是几乎所有表增加了一个使用单位(co_id)字段。悲催的是另外一个外购系统用到了采购单表,该系统已经停止维护、又继续在用。于是就创建了一个co_id=自有公司的视图,命名为原采购单表,而原采购单表改成新表名。这样一来外购系统可以继续使用,而且数据也没问题。


创建试图的语句:


create view ViewName as + SQL查询语句


扩展:


视图的优缺点?


视图的优点

使用视图可以定制化一些数据,限制范围,过滤条件,从这个视图得到的数据因为都限制过滤定制化处理了,方便你去分析


聚合函数,多个表连接展示


合并分离的数据,分区试图

这个我要多说一下,类似于多个表并称成一个表。类似于三国赤壁里面的铁索连舟,主要特征是里面的关键词union。

尤其是很多表因为设计的问题,尤其是实际上很多结构相似表,比如说有的系统租聘订单,赠品单,销售订单虽然意义不同,但是里面很多字段差不多都是一个意思,比如交易时间,订单编号,交易客户等。但是呢,也有各自的比较有特色独有的字段,比如租聘的时间长短,赠品关联的订单等一大堆多余出来的字段,其实也可以会根据需求在视图展示出来。


保证数据安全

这个涉及到视图到底能不能修改和怎么修改,限制是什么后面我会单独讲。


视图的缺点

首先视图是一个虚表,很多在表上性能优化的手法可能就没有,而且数据库引擎要构建视图有一个过程,类似一个查询,视图的性能以及优化你就不要又太高的要求。你可以把他看作一个查询,而不是一个表真的优化也最好基于查询的优化来优化可能好一些。


修改限制

视图不好修改,我建议最好别对视图修改,有什么问题最好还是对组成视图的基表来操作,而且有的视图在某些数据库或者某些条件下是不能修改的。


视图能不能修改

这个问题其实没什么,但是很多博客抄来抄去,只提了一嘴“某些条件下”不能修改,到底是什么情况“才是某些条件呢”?甚至有的直接说不能,实际上是不严谨的。


首先视图是可以改的,但是在某些条件下是不能做某些更新操作,实际情况我整理搜集的如下:


l可以在简单视图中执行DML 操作


l当视图定义中包含以下元素之一时不能使用delete:

•组函数

•GROUPBY子句

•DISTINCT 关键字

ROWNUM 伪列



当视图定义中包含以下元素之一时不能使用update :


l组函数

lGROUP BY子句

lDISTINCT 关键字

lROWNUM 伪列

l列的定义为表达式


当视图定义中包含以下元素之一时不能使用insert :


l组函数

lGROUP BY 子句

lDISTINCT 关键字

lROWNUM 伪列

l列的定义为表达式

l表中非空的列在视图定义中未包括


引用:https://zhuanlan.zhihu.com/p/265466338

引用:https://www.cnblogs.com/init-qiancheng/p/14584899.html


支持小微:

腾讯云 搞活动了?玩服务器的可以搞搞。就这几天时间。

云服务器限时秒杀,1核2G 首年95元!

链接:https://curl.qcloud.com/RX2amrlR


右下角,您点一下在看图片

小微工资涨1毛

商务合作QQ:185601686



文章转载自DotNet开发跳槽,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论