看一下题型->书上的知识点看完->做原题

2014原题
2015原题

结合老师给的模拟题。

2023题目大同小异的。

视频总结笔记

第一章 绪论

所有的基本概念在第一章中都有涉猎

第二章\第六章

基本运算
附加的关系代数运算:
扩展的关系代数运算:如何数据更新,聚集函数的操作(统计)

第三章\第四章\第五章 SQL语句

第三章所有都掌握
第四章定位更高级
第五章SQL语句过程化编程
不要求写函数、触发器,不针对任何数据库产品,只了解基本概念就可。

DDL
DML
DCL
SQL与集合运算、空值
聚集函数、having、not exists
嵌套子查询
视图、可更新视图
完整性约束

第七章 数据库设计、ER模型

ER模型是工具,最终我们要得到的是关系模型。

ER模型设计、关系模型转换,ER图画完整。
题干就是需求分析的结果,设计非常明确。

实体集的转换要按规则。

第八章 关系数据库的设计(难点)

和第七章的设计是两种不同的方式,通过最原始的想法来设计数据库。
介绍了范式理论,BC范式、3NF。真正实用的标准是第三范式。

BCNF的判定
3NF的判定(NP问题)与分解
无损连接和保持依赖的证明

第九章

关于数据库应用程序的开发,未讲解。给出了应用程序开发的驱动程序。

未详细介绍部分

第十四章 事务

可串行化调度
冲突可串行化、视图可串行化

第十五章(2023未考)

并发控制
锁有两阶段索协议

严格两阶段锁、强两阶段索
死锁的检测与恢复

第十六章 恢复系统

恢复算法不作为考试的内容

CSDN学习笔记

ER图的理解:
使用数字的映射基数图靠近实体的一边才是映射关系(该实体对应多少个对方实体), 另外, 在被约束的一方可以使用双线表示完全参与.
不使用数字则相反, 远离实体的一边才是映射关系(该实体对应多少个对方实体).
弱实体集和它所依赖的强实体集之间的联系集叫标识联系集,在ER图中用双菱形


无损分解和保持依赖
无损分解:分解为多个部分后通过自然连接可以恢复的分解称为无损连接分解(定义)。R1∩R2是R1或R2的超码(判断法)。
保持依赖:1.每一个函数依赖只能映射到它所在分解后的关系中。(充分条件)
如果不满足条件1,那么还应进行后续判断:

对F上的每一个α→β使用下面的过程:result:=α;while(result发生变化)dofor each 分解后的Rit=(result∩Ri)+ ∩Riresult=result∪t

这一篇写的比较好:正则覆盖、候选码的一般求法
总结:右部单属性、左部冗余属性(去除左部某个属性之后剩下属性的闭包可以包含另一个属性)、冗余依赖、合并相同的左部。

候选码的求法: 只左, 两边, 均无.
只左的全部 ∪\cup均无, 求闭包能覆盖则结束
只左的全部 ∪\cup两边的 111个, 求闭包能覆盖则加入候选码, 再删除.
只左的全部 ∪\cup两边的任意 l a s t _ c n t + 1last\_cnt + 1last_cnt+1个, 求闭包能覆盖则加入候选码, 之后求的候选码不能包含它码.


3NF和BCNF的分解

课本笔记

第一章 引言

数据库系统的目标、解决的问题:

  • 冗余、不一致
  • 访问难:需要筛选时
  • 孤立:分布于不同文件中,且可能格式不同
  • 完整性:需要满足特定的约束
  • 原子性:操作不能分离,要么完成要么不完成
  • 并发访问异常:一起访问时
  • 安全性问题:权限不能太大,可控

数据抽象:

  • 物理层:关注怎样存储
  • 逻辑层:存储什么数据,及之间的关系
  • 视图层:抽象地关注某个部分

实例:特定时刻信息的集合
模式:数据库的总体设计。XX模式对应XX层的设计。

关系模型、E-R模型、基于对象的模型、半结构化模型

DDL(Definition):域、完整性约束、断言、授权

DML(Manipulation)

第二章 关系模型介绍

关系:表
元组:表中的一行
属性:表中的一列
域:属性允许取值的集合
域是原子的:域中的所有元素是不可再分的单元
空:表示未知或者不存在的状态

超码:一个或多个属性的集合,可以唯一的标识一个元组。超码并不一定最简,因为任何超码的超集也是超码。(结合候选码理解)
候选码:是最小超码
主码:设计者选中的,用来区分元组的一个候选码
外码:一个关系模式包含的其它模式的主码
参照关系:包含外码的一方;被参照关系:另外一方

模式图:每个关系外,用箭头从参照关系的外码属性指向被参照关系的主码属性
模式图没有表现出参照完整性的约束。相应地,实体-联系图可以表现。

第三章 SQL

基本类型:

  • char(n); varchar(n)
  • int; smallint
  • numeric(p, d):定点数一共p位,小数点右边d位
  • real; double precision:浮点数、双精度浮点数
  • float(n):精度至少为n的浮点数

基本模式定义:

  • create table
  • 破坏完整性约束会被标记为错误
  • insert into
  • delete from
  • drop table r;delete from r。前者全部删除,后者保留关系模式r但删除所有元组。
  • alter table r add A D。关系r中添加属性A域是D。
  • alter table r drop A。关系r中删除属性A。

SQL查询:

  • select (all)、from、where
  • distinct
  • select还支持加减乘除运算,如select A * 10 from B,并不会导致原表中值的改变
  • and、or、not以及比较运算符

多关系查询:将所有关系列在from中,where中可指定匹配条件。两个关系中都存在的属性用形如关系名.属性的形式.

通常地,阅读顺序是from->where->select

理解:
from语句定义了一个新关系,该关系为from后所有关系的笛卡尔积。
where语句中的谓词可用来筛选关系,留下有意义的。

自然连接:两个关系模式中,相同名称属性的取值相同才连接。最后加using (A)表示仅仅将属性A作为连接筛选标准。

as:重命名属性或者关系
重命名的原因:

  • 输出合适的属性名称
  • 简易
  • 同一关系做笛卡尔积

字符串:

  • 单引号表示字符串,字符串内表示单引号用两个连续的单引号
  • 字符串是大小写敏感的
  • 模式匹配用like%任意字串,_一个字符,转义字符\%_正常显示

select *表示所有属性
order by排序, 其后的字段有descasc
between and在一定范围之间包含端点
(a, b) <= (c, d)表示同时小于

集合的运算:
union: 自动去重复(因为是集合), 相同属性合并, union all才保留所有
intersect: 自动去重复, (因为是集合)交运算
except: 差运算

null:
null的比较运算的结果是unknown, 是true和false之外的第三个逻辑词
需要注意的是false and unknown = false; true or unknown = true
null = null 会返回unknown, 使用distinct时需注意, 它会保留所有含空值,且除空值属性外其它属性相等的元组

聚集函数:

  • avg
  • min
  • max
  • sum
  • count
  • group by: 没有group by就一个元组一组
    select后没有被聚集的属性只能是group by后的属性
  • having
    having是对分组的筛选, having子句中的谓词在形成分组后才起作用, 同样地, having后没有被聚集的属性只能是group by后的属性
    除count外所有聚集函数忽略输入的null, 如果输入全为空值null, 那么输入值的集合为空集
    空集的count运算值为0, 其它聚集函数返回空值

嵌套子查询:

  • in, not in
  • where A > some(select A from…), 同理, some可替换为all
  • exists: 空关系测试, 返回值是true或者false
    相关子查询: 内层的嵌套使用了外层的关系名称, 进而需要注意的是所定义关系的作用域的问题(可类比编程语言的变量的作用域)

没有contains运算符, A contains B 可用not exists(B except A)表示

  • unique: 查询结果是否有重复的元组, 可通过1 > select count…实现等价替换
    尽管一个元组有很多副本, 只要一个元组含null, unique的测试结果可能为真

  • lateral: 可以使from中的相关变量被与之同级的嵌套循环使用

  • with: 提供定义临时关系的方法with max_budget(value) as (select max(budget) from department) select ...
    (详细的例子参考教材P53)

标量子查询: 若某一查询只返回单个属性和单个元组, 那么该查询可以放在返回单个值的表达式能够出现的任何地方

delete在使用时需要注意的是删除条件where的谓词, 可能随着删除出现改变
insert在使用时可能出现无限插入的问题, 原因是select选择的元组刚好被再次插入到了原来的关系中, 同时, 没有主码约束

insert into-values
update-set
使用case消除先后顺序的影响:

update instructorset salary = casewhen salary <= 100000 then salary * 1.05else salary * 1.03end

第四章 中级SQL

join-on: 比join-using能设置更通用的谓词

(左、右、全)外连接:保留部分、全部连接结果

左外连接示例:
1. 先进行内连接
2. 对于左边的每一个元组, 如果未与右边的任何一个元组匹配, 则向左外连接的结果表中加入一个新元组, 新元组从左侧关系中得到的属性为未匹配的元组的属性, 其它属性皆为空

on和where的理解:
外连接实质是先进行内连接, 然后为那些对内连接没有贡献的元组补上空值并加入结果, 补上空值并加入结果在on筛选之后, 在where之前

所有连接:

连接类型
inner join
left outer join
right outer join
full outer join
连接条件
natural
on
using (A, B, C)

视图create view as select...: 在需要时才被创建, 通过计算查询结果得出的

物化视图: 定义视图的实际关系发生改变, 视图也跟着改变, 方式:
1. 关系变, 视图马上变
2. 允许视图过时, 周期性地更新视图

视图可更新的条件:
1. from只包含一个关系
2. select不包含表达式, 聚集, 或者distinct
3. 没有出现在select中的属性可以为null
4. 查询不能有group, having
上述限制不是完整的, 因为即使满足以上所有, 如果插入的元组仍然不满足最初选择条件, 则不会出现在视图中

  • 事务: 查询或更新语句的序列

    • 提交: 将当前SQL语句所做更新持久保存
    • 回滚: 撤销当前事务的SQL语句对数据库的更新
  • 约束

    • not null
    • unique
    • check
    • 参照完整性 foreign key () reference
      • on delete/update cascade 删除/更新外键所在元组时, 级联
  • 断言create assertion check ... : 上述约束是断言的特殊形式

  • date/time/timestamp
    time和timestamp可以含小数

  • default

  • index

  • blob/clob: binary/char large object

  • 授权grant on to ; 收回权限用revoke

  • 角色create role

第五章 高级SQL

  • 触发器create trigger after ...

第六章 形式化关系查询语言

σ\sigmaσ: σa( B )\sigma_a(B)σa(B)在关系B中选择满足条件a的元组
Π\PiΠ: Πa( B )\Pi_a(B)Πa(B)在关系B中选择属性a投影
∧ ∨ ¬\land\lor\lnot¬: and/or/not
∪ ∩\cup\cap: 并/交, 需要保证集合的相容性
集合交运算可以被集合差运算替代: a ∩ b = a − ( a − b )a\cap{b} = a – (a – b)ab=a(ab)

  • 相容:
    1. 属性数目相等
    2. 两者第ii i个属性的域相同. i∈ min ⁡ ( 关系属性数目)i\in{\min(关系属性数目}) imin(关系属性数目)

−-: 集合差运算
×\times×: 笛卡尔积
ρ\rhoρ: ρ a ( b , c )( r e l a )\rho_{a(b,c)}(rela)ρa(b,c)(rela)关系rela更名为a, 属性按序为b, c

运用两个同样的关系的时候需要更名, 例如, 求出大学里最高工资的导师:
Π salary( i n s t r u c t o r )− Π instructor.salaryσ instructor.salary<a.salary( i n s t r u c t o r ×ρ a(instructor) )\Pi_{salary}{(instructor)} – \Pi_{instructor.salary}\sigma_{instructor.salary < a.salary}{(instructor\times{\rho_a(instructor)}}) Πsalary(instructor)Πinstructor.salaryσinstructor.salary<a.salary(instructor×ρa(instructor))

⋈\Join: 自然连接运算
←\gets: 赋值运算
⋉ ⋊\ltimes\rtimes⋉⋊: 左右外连接, 全外连接在自然连接左右两侧加上下双横线

广义投影允许在投影的下标下面进行加减乘除运算

a , b , cg f ( p a r a 1 ) , y ( p a r a 2 )( r e l a 1 , r e l a 2 )_{a, b, c}g_{f(para1), y(para2)}(rela1, rela2)a,b,cgf(para1),y(para2)(rela1,rela2): d e p a r t _ n a m eg s u m ( s a l a r y )( i n s t r u c t o r )_{depart\_name}g_{sum(salary)}(instructor)depart_namegsum(salary)(instructor)聚集函数, 求出每个系的总工资
count-distinct(): 用来去重计数的聚集函数

  • 阅读顺序及关系代数与SQL语句的关系
    1. froma,b,cfrom\ a, b, c froma,b,c = σ whatever( a , b , c )\sigma_{whatever}{(a, b, c)} σwhatever(a,b,c)
    2. wherePwhere\ P whereP = σ P(whatever)\sigma_{P}(whatever) σP(whatever)
    3. selecta,b,cselect\ a, b, c selecta,b,c = Π a,b,c (whatever)\Pi_{a, b, c}(whatever) Πa,b,c(whatever)

利用元组进行关系查询: { t ∣ P ( t ) }\{t | P(t)\}{tP(t)}
{ t ∣ P ( t ) }\{t | P(t)\}{tP(t)}: 的域是P中显式出现的值以及名称出现在P中的那些关系的所有值的集合
域关系演算: 把元组细分

第七章数据库是合集和E-R模型

  • 设计阶段:

    • 概念设计
    • 功能需求规格说明
    • 逻辑设计
    • 物理设计
  • 实体联系模型

    • 实体
    • 实体集: 具有相同性质 (属性) 实体的集合
    • 联系
    • 联系集: n≥2个n\ge2个 n2实体集上的数学关系
  • 属性

    • 域/值集: 该属性可取值的集合
    • 简单或复合属性
    • 单值或多值属性
    • 派生属性: 可以推导出来的
  • 约束

    • 映射基数: 一个实体通过一个联系集能关联的实体个数
      • 一对一
      • 一对多
      • 多对一
      • 多对多
        理解: 映射的另一边都是至多
    • 全部参与
    • 部分参与
  • 联系集的主码:

    • 多对多: 两者主码并
    • 多对一: 多那一方的主码
    • 一对一: 任选一方的主码
  • 删除冗余:
    结合CSDN资料看

使用数字的映射基数图靠近实体的一边才是映射关系(该实体对应多少个对方实体), 另外, 在被约束的一方可以使用双线表示完全参与.
不使用数字则相反, 远离实体的一边才是映射关系(该实体对应多少个对方实体).

  • 弱实体集:没有足够属性形成主码. 弱实体集被标识实体集拥有. 联系成为标识性联系.

特化: 由一般到特殊, 用空心箭头标识, 表示is a. 对某个关系通过定制属性, 进而再进行分类.
概化: 由特殊到一般, 是特化的逆过程.
属性继承

概化上的约束:

  • 条件定义的: 用具体条件定义
  • 用户定义的: 由用户指派
  • 不相交: 上层实体至多属于一个下层实体
  • 重叠: 可不相交相对
  • 全部概化/特化: 高层一定属于某一个下层
  • 部分概化/特化: 和全部相对

概化的关系模式:

  1. 概化的实体含高层的主码, 以及自己的特殊属性
  2. 如果概化是不相交(相交则可能不必要地存储多次)且完全的, 可以不为高层创建模式, 每个下层实体含全部属性

第八章

无损分解、有损分解:分解后,再自然连接能不能还原.

1NF: 关系R中所有属性的域都是原子的.

依赖 →\rarr: 一个左边值只能对应一个右边

闭包: 由一个依赖能推导出的所有依赖.

BCNF: 所有的非平凡依赖左边都是的超码.

将不是BCNF的模式分解为BCNF:
如果 a → ba\rarr{b}ab是非平凡的, 且 aaa不是原关系 RRR的超码, 分解为如下两个模式:

  • a∪ba\cup{b} ab
  • R−(β−a)R – (\beta – a) R(βa)

通常, 对BCNF的分解较少是保持依赖(分解后的依赖全部在一个模式中)的.

进而, 比BCNF要求弱的3NF可以满足要求.

3NF: a → ba\rarr{b}ab依赖平凡, 或左边是模式的超码, 或 b − a ⊆ 候选码b – a \sube 候选码ba候选码.

闭包

自反/增补/传递
合并/分解/伪传递 :证明过程细看。

无关属性: 去除无关属性的方法参考CSDN.

正则覆盖: 1. 不含无关属性. 2. 左部唯一.

无损分解、有损分解:分解后,再自然连接能不能还原.

保持依赖: 分解后的关系都在一个模式中.

多值依赖 a → → ba\rarr\rarr{b}a→→b: 表示 aaa bbb之间的联系独立于 aaa R − aR – aRa之间的联系.

  • a→b    ⟹   a → → ba\rarr{b}\implies{a\rarr\rarr{b}} aba→→b
  • a → → b    ⟹   a → → R−a−b {a\rarr\rarr{b}}\implies{a\rarr\rarr{R – a – b}} a→→ba→→Rab

4NF: a → → ba\rarr\rarr{b}a→→b平凡或者 aaa RRR的超码. 它一定是BCNF.

第十四章 事务

原子性: “全或无”的特性.
隔离性: 数据库具有确保事务正常执行不被干扰的特性.
持久性: 崩溃后操作也必须是持久的.
一致性: 隔离执行事务时, 保持数据库的一致性.

冲突等价: 经非冲突的指令交换.

冲突可串行化: 调度与一个串行调度等价.

优先图无环冲突可串行化.

视图等价: 注意Read Write的对象。