知识卡片

视图与快照的区别:物化视图是自相矛盾的用词

普通读书笔记卡

内容

快照(snapshot)是另一种派生关系变量,但和视图有本质区别:视图是虚拟的、 完全靠映射到底层关系变量实现([[视图检索运算的替换过程与物化实现违反主旨]]), 快照则真的持有一份隔离拷贝的数据,并按周期性规则(如REFRESH EVERY DAY) 刷新——定义一个快照就像执行一次查询,但把结果作为一个”只读关系变量”(周期 刷新之外只读)以给定名字保存在数据库里,到下次刷新前它代表的都是某个过去 时间点的数据(如按天刷新的快照最多代表24小时前的数据)。快照在数据仓库、 分布式系统等需要”某个特定时间点的数据快照”(比如财会周期结算、报表冻结) 的场景中有重要价值,本身没有问题。真正的问题在于命名混淆:一些圈子已经不再 把快照当作快照,而是称之为”物化视图”(materialized view)——但这个词本身 就是自相矛盾的(因为视图本来就不应该被物化,视图运算的正确实现方式应该是 映射到对底层关系变量的运算),而且这种误用已经泛滥到”视图”这个未加限定的 词,在某些语境下已经被默认理解成”物化视图”,导致本来应该表达视图本意的这个 词面临被侵占的风险。书中给出的实践建议是:不要用未加限定的”视图”一词指代 快照;永远不要用”物化视图”这个词;对违反这些建议的用法要保持警惕。

参考来源

- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第9章"SQL与视图" 9.7节"视图和快照"(源文件:OEBPS/text00106.html) - 结论依据:原文明确"快照是派生的,但实际上并不是虚拟的,也就是说它不仅由 定义中的其他关系变量表示,也由其自身的数据隔离拷贝表示……快照(至少在 某些圈子里)已经不再被当作快照,而被当作是物化视图了。可它们不是视图! 视图本来就不应该被物化……'物化视图'在用辞上就是自相矛盾的……不要再用不 加限定的'视图'一词来表示快照;永远别用'物化视图'这个词"。 - 原始内容:快照是派生的,但实际上并不是虚拟的……快照……已经不再被当作 快照,而被当作是物化视图了。可它们不是视图!视图本来就不应该被物化…… "物化视图"在用辞上就是自相矛盾的。