知识卡片
视图是关系变量:表和视图并非不同事物
内容
视图的精确定义是:一个关系变量V,其在时刻t的取值等于某个关系表达式(视图 定义表达式,定义V时指定,至少涉及一个关系变量)在时刻t的计算结果。这个 定义统一了多种非形式化描述——视图是虚拟关系变量(不能独立于其他关系变量而 存在)、是派生的关系变量、是通向底层关系变量的”进入窗口”、是”预置查询”(命名 了的关系表达式)——本质上都在说同一件事。书中特别提醒一个常见谬误:SQL文档 里”表及视图”这类措辞暗示表和视图是两种不同的东西,但事实并非如此——视图的 精髓恰恰在于它就是一个表(类比数学里两个集合的并或交的精髓在于结果仍然是 集合),SQL的CREATE TABLE和CREATE VIEW这两个不同名称的运算符本身就是认知 上的错误,因为它们同时强化了两个误解:术语”表”专指基表、视图和表是不同事物。 只要陷入”表就是特指基表”这个陷阱,就已经偏离了关系化的思维方式,这正是SQL 设计中一处真实存在的认知错误留下的痕迹。
参考来源
- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第9章"SQL与视图"
导言及9.1节"视图是关系变量"(源文件:OEBPS/text00099.html、text00100.html)
- 结论依据:原文明确"一个视图V就是一个关系变量,其在t时刻的取值为某关系
表达式在t时刻的计算结果……视图是表!或者视图是关系变量……视图的精髓就在
于它是一个表……不要陷入'认为表就是特指基表'这样的常见谬误之中……SQL的
CREATE TABLE和CREATE VIEW运算符名称就至少是认知错误"。
- 原始内容:一个视图V就是一个关系变量,其在t时刻的取值为某关系表达式在t
时刻的计算结果……视图是表!或者视图是关系变量……不要陷入"认为表就是特指
基表"这样的常见谬误之中。