在 ANSI-SPARC 三层结构中, 描述了数据库结构呈现在特定用户面前的一个外部视图。在关系模型中 “视图(view)” 这个词的含义稍微有些不同。它不完全是用户看到的外部模型,它指 虚关系 或者 导出关系,即无需单独存在,必要时可从一或多个基本关系中动态的将其导出。因此,一个外部模型可以由基本关系(概念级)和基本关系导出的视图共同组成。
1. 术语
前述关系均为基本关系。
- 基本关系(base relation):与概念模式中的一个实体相对应的具名关系,它的元组都存储在数据库的物理结构中。
可以根据关系定义视图。
- 视图(view):对一个或多个基本关系进行关系操作得到的动态结果。视图是一个无需存在于数据库当中,但却可以根据某个特定用户需要在必要时再产生的虚关系。
视图是一个因用户存在,并呈现在用户面前的关系,可以把它当做基本关系进行操作,但与基本关系不同的是,它并不是真正存在于存储器中(虽然它的定义存储在系统目录中)。视图的内容被定义成基于一个或多个基本关系的查询。对试图所进行的任何操作自动的转换成对导出它的关系进行操作。视图是 动态的,这意味着,对导出视图的基本关系的修改将立即反映到视图上。当用户对视图做允许的修改时,这些修改将作用到基本关系上。
2. 视图的用途
需要视图机制的原因:
-
通过对特定用户隐藏部分数据库信息,提供了一个强大而灵活的安全机制。如果属性或元组不出现在视图中,用户将无从得知其存在。
-
允许用户根据自己的需求自定义访问数据的方法,因此不同的用户可以通过不同的途径同时看到相同的数据。
-
可以简化对基本关系的复杂操作。例如,如果一个视图被定义成两个关系的联合(连接),用户就可以在该视图上执行更为简单的操作,而这个操作将会被 DBMS 转换成该连接上的等价操作。
可以让视图支持用户所熟悉的外部模型。例如:
-
用户可能需要这样的 Branch 元组,它包含经理的姓名和 Branch 中已有的其他属性。可以将关系 Branch 与关系 Staff 连接起来,并限定关系 Staff 中员工的职位必须是 “Manager”,从而创建所需视图。
-
应该让一些员工看不到 Staff 中的 salary 属性。
-
可以对属性进行重命名,或者是更改属性的顺序。例如,某个用户习惯把分公司的属性 branchNo 的全称 Branch Number 写出来,那么,可以通过自定义的视图让他看到那样的列标题。
-
某些员工应该只能看到他们所管理的房产记录。
虽然这些例子足以说明视图提供了 逻辑数据独立性,但实际上,视图还提供了更为重要的一类逻辑数据独立性,即允许概念模式的重组。例如,如果在某个关系中添加了一个新的属性,当前用户可以完全不知道他的存在,只要他们的视图不涉及该属性。再则,一个现有的关系被重新排列或是被拆分,仍然可以通过定义视图而让用户按原样使用数据库。
3. 视图的更新
对某个基本关系的所有更新应该立即反映到涉及这个基本关系的视图中。同样,如果这个视图被更新,那么它涉及的底层基本关系也应该反应出这种变化。但通过视图进行更新存在一些约束。下面给出大多数系统允许通过视图进行更新操作的条件:
- 如果视图由一个基本关系的简单查询生成,而且他还包含了基本关系中的主关键字或是候选关键字,则可以通过这个视图进行更新操作。
- 不允许对涉及多个基本关系的视图进行更新。
- 如果视图的生成中涉及聚集或是分组操作,则不允许通过这个视图进行更新。
可以根据理论上不可更新、理论上可更新和部分可更新来对视图进行分类。
网友评论