新手提问: Database View 到底有什么用

2021-08-20 23:01:36 +08:00
 abucus

数据库菜鸟,看了一些 database view 的介绍,比如Database views, When to use database views and when not?,感觉还是云里雾里, 所以这个 view 的存在只是出于安全因素,和修改方便吗?

另外想问下 view 的数据是会缓存下来吗,访问速度和 table 有差别吗?

1871 次点击
所在节点    问与答
8 条回复
levelworm
2021-08-20 23:21:49 +08:00
每个数据库不一样。我的感觉是 view 的作用就是在不破坏表结构的情况下给用户最大的方便。比如说 Vertica 里头做好数仓,但是用户实际上需要更大的宽表,于是用个 view 代替。

能不能 materialize 要看数据库了,Vertica 我记得是没有的,postgresql 好像两种都有不过我很可能记错了。
liprais
2021-08-20 23:27:26 +08:00
再看看再想想
512357301
2021-08-20 23:54:24 +08:00
访问速度理论上没差异,mysql 不缓存,所以等于每次都是执行一段固定的 SQL,好处的话可以只给某个用户展示某个表的其中一部分,也就是你说的安全问题
简单来说,没那么复杂,就是有分权限展示的需求了,才有了视图功能,普通的后端开发理论上用不到这个功能,因为他们可以通过代码限制数据的查询范围,视图反倒多此一举。
复杂来说,视图对外展示就好像一个表一样,查询语句不用做特殊处理,权限划分可以做的很细,dba 只需要会 SQL 就能做好权限把控,不用学习其他后端代码
abucus
2021-08-21 02:36:46 +08:00
@levelworm @512357301 谢谢解惑,感觉 View 就像给用户提供一个访问的快捷方式,本质上和 query 没有太大区别,只是因为加了一层所以加了灵活性(比如定制,权限展示)。我自己也是感觉好像如果只是开发者自用,好像没有必要上这个。
msg7086
2021-08-21 04:51:41 +08:00
普通的视图可以隐藏查询的复杂细节。
比如你视图代码非常复杂,但是一旦建好了视图,其他人从视图里读取或者筛选数据时就非常简单了。
然后还有物化视图,不仅仅是查询,还相当于建了一个双向映射自带存储的「表」。你可以直接在物化视图上写入数据,写入的数据会回写到原始表里。这个我很久很久以前做毕设的时候看过个大概,是个普通人不会用到的功能。

原本,视图、存储过程、触发器,这三大件做普通互联网开发的程序员就很少会用到。我觉得传统的系统软件开发(比如银行,大学,电信等)更容易用到这三大件。
ruxuan1306
2021-08-21 10:30:54 +08:00
c#中的 getter
vue 中的计算属性
raaaaaar
2021-08-21 19:24:19 +08:00
教科书倒是说了几个功能,不过现实还没怎么用过
zxCoder
2021-08-22 09:36:15 +08:00
比较老的开发可能会用到,就像 ls 的 ls 的 ls 说的视图、存储过程、触发器这三大件,反正我基本没用过,只存活在我的课本里

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/797107

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX