数据库视图设计动机相关核心语句含义解析
解析《Database System Concepts》中视图设计动机的核心语句含义
核心语句引用
若我们如此操作,当instructor、course或section关系中的底层数据发生变更时,已存储的查询结果将与重新执行该查询得到的结果不再匹配。
上下文背景
书中4.2章节介绍视图的设计动机时,提到两种常见的查询需求场景:
- 安全权限控制:部分用户无需访问完整数据,比如职员只能查看讲师的ID、姓名和部门名称,不能查看薪资,对应的查询语句为:
select ID, name, dept_name from instructor;
- 个性化数据需求:创建符合用户使用习惯的专属数据集合,比如获取2009年秋季物理系所有课程段的教学楼及房间号,对应的查询语句为:
select course.course_id, sec_id, building, room_number from course, section where course.course_id = section.course_id and course.dept_name = 'Physics' and section.semester = 'Fall' and section.year = '2009';
核心语句含义拆解
- “如此操作”的定义:指提前执行上述查询,并把计算结果存储为物理表供用户使用,而非每次需要数据时重新执行查询。
- “底层数据变更”的场景:包括但不限于:
- instructor表中讲师的部门信息被修改
- course表新增/删除了物理系的课程
- section表中某课程段的教学楼、房间号或学期年份被更新
- “结果不再匹配”的影响:预存的查询结果不会自动同步底层数据的变化,用户看到的会是过时的旧数据;此时重新执行原查询,得到的是基于最新底层数据的结果,两者会出现不一致。
视图的解决逻辑
正是因为预存查询结果会导致数据不一致的问题,SQL才引入了**视图(view)**这个虚拟关系:视图不会提前存储查询结果,只有当用户访问视图时,才会动态执行对应的查询并返回最新结果,从根源上避免了数据过时的问题。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

