第一题 概念模型设计 关系模型转换
看懂ER图,转换成3NF关系表
实体 属性 关系
弱实体集合:形成它的主键需要关联的其他实体的主键,即它的主键包括外键。
第二题 3NF和BCNF范式
判断无损连接和保持函数依赖的分解
属性闭包求键
1. 3NF的判断
X->A:X不是superkey且A不是prime时,违背3NF
X->A violates 3NF if and only if X is not a superkey and also A is not prime.
2. 3NF分解
(1) 求最小函数依赖集合和所有键
(2) 对函数依赖左部相同的函数依赖进行分组
(3) 保证不存在子模式的包含情况
(4) 观察是否有某个关系含有key,若含有则分解终止,若不含则添加key关系作为新表
3. BCNF判断
X->A:X不是superkey时,违背BCNF
4. BCNF分解
(1) 找出违背BCNF的函数依赖 X->A
(2) 求该函数依赖左部属性的闭包 X+
(3) R1=X+; R2=R-(X+ - X)
(4) 考察R1和R2是否违背BCNF,对违背BCNF的关系进行分解
第三题 故障恢复
先写日志后写磁盘
undo日志:对于没有commit或abort的操作,从后往前回滚
redo日志:对于commit的日志,从前往后重新执行
undo-redo日志:两者的结合
动态检查点:
1. 求commit事务集合S
2. 对于commit了的事务(S中的事务),从ckpt点开始redo日志中的操作
3. 对于没有commit的事务(不在S中的事务),从后往前undo日志中的操作
直到ckpt,如果事务在ckpt时仍然活跃,则undo溯源到事务的start点
第四题 并发控制
(1)是不是可串行化调度 (有向图有没有环)
等价的串行化调度
两阶段锁 自己添加读写锁
规则1:形式良好的事务,l1(A) p1(A) u1(A),对事务操作的前后要加锁和解锁
规则3:两段锁协议 对于同一个事务,必须先全部加锁再全部解锁。但是不同的事务之间可以交叉
l1(A) l2(B) l1(C) ... p1(A) p2(B) p1(C) ... u1(A) u2(B) u1(C)
(2)规则2(不考)
(3)死锁 (不考)
第五题 关系代数
九种运算:
1 并 * AUB
2 交 A∩B
3 差 * A-B
4 笛卡尔积 *
5 除 A÷B
6 选择* σ (where)
7 投影* π (select)
8 连接 θ连接
9 自然连接
把查询操作用关系代数表现出来
查询优化过程:逻辑查询计划、物理查询计划
1. 解析SQL语句(parse-tree)
2. 生成逻辑查询计划
3. 逻辑优化
4. 估计中间运算结果大小
5. 生成物理查询计划
6. 执行最佳查询计划
最小完备集(五种):并U、差-、笛卡尔积、选择σ、投影π
逻辑层优化:把选择σ和投影π操作往叶子节点移(尽早做)
4NF 多值函数依赖:
和BCNF定义类似,只是面向的是多值函数依赖
A->->B,A是superkey
多粒度锁,共享锁,意向锁:
粒度:表 tables、行 tuples、值fields
共享锁:Is1(A) x1(A) u1(A)
意向锁:IS IX 对祖先节点上意向锁
课后习题