Three-level vision of database 三层数据库
Physical – Conceptual – Logical
之前讲解数据库的时候 用户和程序主要在conceptual level 实际上用户和程序也可以在logical level!
为什么使用view
- Hide some data from some users 对一些用户隐藏数据
- Make some queries easier / more natural 使得一些查询更加简单
- Modularity of database access 模块性的数据库访问
实际数据库应用会有大量的view
定义使用view
例如下面的实际例子 我们可以创建一个CSaccept view,该view里所有的关于student的tuple都是被录取的学生,这样就可以使之后的某些查询更加的简便。
View Modifications Introduction
现在有一个问题来了,一旦V被定义了,我们可以对V进行改变吗?
由于V不是被储存的,这样好像不合理。要是我们还是想让V进行改变,那么我们要做的就是改变V的时候改变base database!
rewritten的过程实际上应该由系统来自动完成!
Rewriting process specified explicitly by view creator
优点+ Can handle all modifications
缺点– No guarantee of correctness (or meaningful)
Restrict views + modifications so that translation to base table modifications is meaningful and unambiguous
优点+ No user intervention
缺点– Restrictions are significant
View Modifications Using Triggers使用triggers对view进行修改
此种方法是上面的 Rewriting process specified explicitly by view creator,即由view的设计者来实现。
格式:Using special INSTEAD OF triggers
Automatic View Modifications
此种方法是上面的Restrict views + modifications...即系统自动修改
其中对于SQL标准有下面4个要求。
其中Mysql是支持自动修改的,其他的像SQLite以及postgram都是不支持自动修改的,具体的例子可以参考老师上课讲的大学申请系统
Materialized Views
之前讲的view都是virtual view,实际上我们并没有创建新的table,我们只是对base database做了一个rewritten的工作
为什么要使用materialized view? 除了virtual 提到的点,我们还想要提高query的性能!
实际上我们就是创造了一个新的table!但是这样也有缺点,这个View可能非常的大!我们对view中R1....Rn关系做出更新后,也要对materialized view做出修改,这里老师也提到了一个incremental maintenance 算法可以实现自动更新的功能。
假如直接对Materialized view进行修改呢
- Good news: just update the stored table
- Bad news: base tables must stay in synch
这和virtual view中修改view是一样的问题!即修改view必须同时修改base table
materialized view 的效率影响因素
- Size of data
- Complexity of view
- Number of queries using view
- Number of modifications affecting view
- 并且 incremental maintenance 算法 versus full recomputation
Database Authorization
目的
- 确保用户只能看见被期望看见的数据
- 防止数据库被恶意用户修改数据
用户有权利,只能看被授予权限的数据操作
Authorization 与view相结合
在下面的例子中,用户只能看到申请了stanford大学学生信息,访问不到其他学生的信息!
Obtaining Privileges 获得权利
relation的创建者是owner,owner拥有所有的权限,并且可能授予权限
Revoking Privileges 废除权利
废除权利可能存在一个树形的结构!
Cascade说的是传递性质的废除权利,即废除了U1后 废除U2 ,除非有一个其他的授权源U3。
Restrict(如果我们不指定,默认此种)说的是不允许有传递性质发生。
Where Privileges Reside