数据库系统 期末考前复习

introduction to DBMS

重点掌握数据库系统的三层模式结构和两层映像的功能

三层模式结构

  • 内模式(存储模式)数据的物理结构和存储方式的描述(Simple DB涉及)
  • 模式(逻辑/概念模式)数据的逻辑结构和特征的描述
  • 外模式(用户模式)局部数据的逻辑结构和特征的描述,应用程序员和最终用户能够看见和使用

两层映像

  • 外模式<->模式 一个模式可以有任意多个外模式 逻辑独立性
  • 模式<->内模式 模式/内模式的映射是唯一的 物理独立性

ER转化关系模型、主外键约束

ER转化关系模型

多对多,一对多的合并

Subclass Entity

  • Object Oriented:each object can only belong to a single table 最省存储空间
  • the E/R Approach(拆分表): 子类额外属性单独建表,将父类主键当作子类表的外键和主键
  • The Null Value Approach: Too many NULL’s (waste memory space)

完整性约束

  • 实体完整性:主键不能为null
  • 参照完整性:外键要么为空,要么为参照表的主键
  • 用户定义完整性:属性的值要合法

SQL操作

SQL Type

  • DDL: CREATE, DROP

  • DML: INSERT, DELETE, UPDATE, SELECT FROM WHERE

SQL 查询

SELECT … FROM … WHERE …
LIKE后面

%代表任意字符串,_代表单个字符

ORDER BY

ASC升序(默认),DESC降序

IN, EXIST
ANY, ALL
DISTINCT
Aggregations
  • sum求和
  • avg求均值
  • min求最小值
  • max求最大值
  • count计数

用法:SELECT AVG(price) FROM sells WHERE beer = ‘Bud’

GROUP BY
HAVING

在select from where之后对结果进行过滤

INTERSECT, UNION

intersect求交集,union求并集

SQL 授权

GRANT, REVOKE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
GRANT SELECT, UPDATE(PRICE)
ON Sells
TO Sally;
#Sally可以查询Sells表并修改Sells表中的PRICE

GRANT UPDATE ON Sells TO Sally
WITH GRANT OPTION;
#Sally可以更新Sells表,并且可以将此权限授予给别人

REVOKE <LIST OF PRIVILEGES>
ON <RELATION OT OTHER OBJECT>
FROM <LIST OF AUTHORIZATION ID>
CASCADE or RESTRICT;
#cascade级联删除
授权图

AP star star -> BP star -> CP star

若A revoke P from B cascade,则C的权限也会被级联收回。

DB 模式设计

坏的设计的后果

  • 冗余
  • 插入异常
  • 删除异常
  • 更新异常

插入、删除、更新三者一定同时出现

通过函数依赖找到关系的Key

Key->{all} but subset of Key doesnot -> {all}

Key的超集是Superkey

找Key:函数依赖左边没出现的一定不是Key的元素,函数依赖右边没出现的一定是Key的元素

再根据闭包比较,找到Key的其它元素

关系闭包

Armstrong公理系统
  • 传递性
  • 拆分性 x->yz == x->y & x->z
  • 假言推理 x->y & yz->u == xz->u
无损分解

分解之和如果R1∩R2是R1或R2的超码,则R上的分解(R1,R2)是无损分解

保持函数依赖

如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的

范式

3NF<BCNF<4NF

BCNF

对于所有非平凡的函数依赖,左边都是superkey

分解为BCNF

  • 检验R是否属于BCNF。如果是,返回{R}作为结果。
  • 如果存在BCNF违例,假设为X→Y。计算X+。选择R1=X+作为一个关系模式,并使另一个关系模式R2包含属性X以及那些不在X+中的属性。
  • 计算R1和R2的FD集,分别记为S1和S2。
  • 递归地分解R1和R2。返回这些分解得到的结果集合。
3NF

违反3NF的情况:

X->A如果X不是superkey,并且A不是主属性

关系代数及查询过程

关系代数

  • 并、交、差
  • 投影π\pi、选择σ\sigma
  • 自然连接
  • 笛卡尔积
  • θ\theta连接:先做笛卡尔积,再筛选
  • 除法:结果等于被除集中有对应除集中所有元素的元素的集合

查询过程

表达式树

解析SQL语句->生成逻辑查询计划->逻辑优化->物理查询计划->代价估计->执行最优物理查询计划

查询优化

一般来说,选择操作和投影操作最先做

先选择,再投影

故障恢复

ACID性质:原子性、一致性、隔离性、持久性

start, commit, abort

REDO日志

redo日志记录的是新值

修改磁盘元素之前先将日志记录输出到磁盘日志文件

恢复:寻找没有commit的事务,从前向后扫描日志,对事务进行重新执行

解决redo日志恢复太慢的办法:checkpoint(CKPT)
  • 停止接受新事务
  • 等待所有事务完成
  • 将所有日志存入磁盘
  • 将所有缓冲区数据存入数据库
  • 在数据库日志中打上ckpt标记

end ckpt指的是start ckpt之前的值全部已经写到了数据库磁盘上

UNDO日志

日志先在内存中写,不用每次操作都访问磁盘

修改磁盘元素之前先将日志记录输出到磁盘日志文件

undo日志记录的是旧值

恢复:对于没有结束标记commit或abort的事务从后向前扫描日志,进行回滚。回滚完成后需要在日志文件中添加abort记录

REDO/UNDO日志

缺点

undo:可能增加IO代价

redo:可能使缓冲区短缺

恢复策略

redo所有commit的事务(从前向后)

undo所有未完成的事务(从后向前)

并发控制

冲突可串行化调度

优先图(只能解决是否可以冲突串行化调度)

查看调度,写操作和写操作所代表的事务连一条有向边,读操作和写操作所代表的事务连一条有向边即可。读操作和读操作不互斥,不要连边!

判断是否可以冲突可串行化调度

  • 列出每个事务
  • 画出优先图
  • 判断优先图是否有环

两段锁(不能解决死锁问题)

两端锁是悲观策略

两段锁规则

  • well from transaction:访问前上锁,访问后解锁
  • legal scheduler:只有唯一事务可同时对一个对象上锁
  • 2PL:加锁前不能有解锁命令,解锁后不能有加锁命令

预防死锁

  • 一次封锁法(降低并发度)

  • 顺序封锁法(维护成本高,难实现)

读锁、写锁、意向锁

S, X, IS, IX之间的互斥关系