知识卡片

视图的两种用途:简写与逻辑数据独立性

普通读书笔记卡

内容

视图服务于两个截然不同的目标。第一种用途:视图定义者本人清楚知道底层的 定义表达式exp,使用视图名V只是为了在需要写exp的地方少打一遍字,本质上是 简写——这类用户不太会请求更新视图,即便请求了,更新也必须按预期正确执行。 第二种用途才是本章反复强调的真正重要用法:只知道视图V存在并可用、但完全不 知道也不需要知道底层定义表达式的用户,视图对他而言应该(理想情况下)表现 得就像一个基关系变量。这第二种用途直接对应逻辑数据独立性(logical data independence)——[[物理数据独立性]]允许改变数据的物理存储/存取方式而不影响 用户观察数据的方式,逻辑数据独立性则允许改变数据的逻辑存储/存取结构(比如 换一种关系变量拆分方式)而同样不影响用户感知。书中给出具体演示:假设出于 某种原因要把基关系变量S替换成LS和NLS(分别是London供应商和非London供应商 两个新基关系变量),只需要把原来的S重新定义成一个视图 VAR S VIRTUAL(LS D_UNION NLS)KEY{SNO}(这里特意用D_UNION不是普通UNION, 强调LS和NLS理应互不相交),只要系统能正确支持对这个新视图S的各种运算 (可惜对当今大多数产品而言这仍是个理想化假设),所有原先针对基关系变量S写 的表达式现在原样作用于视图S,用户完全感觉不到数据库底层逻辑结构已经发生了 变化——不过书中也提醒,这种底层结构调整并非完全没有代价,例如出货关系变量 SP原本持有指向S的外键,替换成LS/NLS拆分设计后需要相应处理这层外键关系。

参考来源

- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第9章"SQL与视图" 9.6节"视图的作用"(源文件:OEBPS/text00105.html) - 结论依据:原文明确"一个只知道V存在且可用的用户应该……不知道表达式exp; 事实上……V对该用户而言应该看起来像一个基关系变量……逻辑数据独立性指的是 我们可以更改数据的逻辑存储方式和存取方式,但并不会使用户感知数据的方式 发生变化。而视图正是用来提供逻辑数据独立性的""假设系统能正确支持对视图 的运算……用户不会受到这一数据库逻辑结构变化的影响"。 - 原始内容:逻辑数据独立性指的是我们可以更改数据的逻辑存储方式和存取方式, 但并不会使用户感知数据的方式发生变化。而视图正是用来提供逻辑数据独立性 的……用户不会受到这一数据库逻辑结构变化的影响。