数据库菜鸟,看了一些 database view 的介绍,比如Database views, When to use database views and when not?,感觉还是云里雾里, 所以这个 view 的存在只是出于安全因素,和修改方便吗?
另外想问下 view 的数据是会缓存下来吗,访问速度和 table 有差别吗?
1
levelworm 2021-08-20 23:21:49 +08:00 via Android
每个数据库不一样。我的感觉是 view 的作用就是在不破坏表结构的情况下给用户最大的方便。比如说 Vertica 里头做好数仓,但是用户实际上需要更大的宽表,于是用个 view 代替。
能不能 materialize 要看数据库了,Vertica 我记得是没有的,postgresql 好像两种都有不过我很可能记错了。 |
2
liprais 2021-08-20 23:27:26 +08:00
再看看再想想
|
3
512357301 2021-08-20 23:54:24 +08:00 via Android
访问速度理论上没差异,mysql 不缓存,所以等于每次都是执行一段固定的 SQL,好处的话可以只给某个用户展示某个表的其中一部分,也就是你说的安全问题
简单来说,没那么复杂,就是有分权限展示的需求了,才有了视图功能,普通的后端开发理论上用不到这个功能,因为他们可以通过代码限制数据的查询范围,视图反倒多此一举。 复杂来说,视图对外展示就好像一个表一样,查询语句不用做特殊处理,权限划分可以做的很细,dba 只需要会 SQL 就能做好权限把控,不用学习其他后端代码 |
4
abucus OP |
5
msg7086 2021-08-21 04:51:41 +08:00
普通的视图可以隐藏查询的复杂细节。
比如你视图代码非常复杂,但是一旦建好了视图,其他人从视图里读取或者筛选数据时就非常简单了。 然后还有物化视图,不仅仅是查询,还相当于建了一个双向映射自带存储的「表」。你可以直接在物化视图上写入数据,写入的数据会回写到原始表里。这个我很久很久以前做毕设的时候看过个大概,是个普通人不会用到的功能。 原本,视图、存储过程、触发器,这三大件做普通互联网开发的程序员就很少会用到。我觉得传统的系统软件开发(比如银行,大学,电信等)更容易用到这三大件。 |
6
ruxuan1306 2021-08-21 10:30:54 +08:00
c#中的 getter
vue 中的计算属性 |
7
raaaaaar 2021-08-21 19:24:19 +08:00 via Android
教科书倒是说了几个功能,不过现实还没怎么用过
|
8
zxCoder 2021-08-22 09:36:15 +08:00
比较老的开发可能会用到,就像 ls 的 ls 的 ls 说的视图、存储过程、触发器这三大件,反正我基本没用过,只存活在我的课本里
|