知识卡片
视图与快照的区别:物化视图是自相矛盾的用词
内容
快照(snapshot)是另一种派生关系变量,但和视图有本质区别:视图是虚拟的、
完全靠映射到底层关系变量实现([[视图检索运算的替换过程与物化实现违反主旨]]),
快照则真的持有一份隔离拷贝的数据,并按周期性规则(如REFRESH EVERY DAY)
刷新——定义一个快照就像执行一次查询,但把结果作为一个”只读关系变量”(周期
刷新之外只读)以给定名字保存在数据库里,到下次刷新前它代表的都是某个过去
时间点的数据(如按天刷新的快照最多代表24小时前的数据)。快照在数据仓库、
分布式系统等需要”某个特定时间点的数据快照”(比如财会周期结算、报表冻结)
的场景中有重要价值,本身没有问题。真正的问题在于命名混淆:一些圈子已经不再
把快照当作快照,而是称之为”物化视图”(materialized view)——但这个词本身
就是自相矛盾的(因为视图本来就不应该被物化,视图运算的正确实现方式应该是
映射到对底层关系变量的运算),而且这种误用已经泛滥到”视图”这个未加限定的
词,在某些语境下已经被默认理解成”物化视图”,导致本来应该表达视图本意的这个
词面临被侵占的风险。书中给出的实践建议是:不要用未加限定的”视图”一词指代
快照;永远不要用”物化视图”这个词;对违反这些建议的用法要保持警惕。
参考来源
- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第9章"SQL与视图"
9.7节"视图和快照"(源文件:OEBPS/text00106.html)
- 结论依据:原文明确"快照是派生的,但实际上并不是虚拟的,也就是说它不仅由
定义中的其他关系变量表示,也由其自身的数据隔离拷贝表示……快照(至少在
某些圈子里)已经不再被当作快照,而被当作是物化视图了。可它们不是视图!
视图本来就不应该被物化……'物化视图'在用辞上就是自相矛盾的……不要再用不
加限定的'视图'一词来表示快照;永远别用'物化视图'这个词"。
- 原始内容:快照是派生的,但实际上并不是虚拟的……快照……已经不再被当作
快照,而被当作是物化视图了。可它们不是视图!视图本来就不应该被物化……
"物化视图"在用辞上就是自相矛盾的。