- 第一范式, 第二范式和第三范式
第一范式: 每一个属性都是原子项,不可分割. 1NF是关系模式应具备的最起码的条件,如果数据库设计不能满足第一范式,就不称为关系型数据库.
第二范式: 首先要满足第一范式,每个非主属性是由整个主键函数决定的,而不能由主键的一部分来决定.
第三范式: 第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息.
- 视图
视图的定义
# 任何不是逻辑模型的一部分但作为虚关系对用户可见的关系.
# 数据库中只存放视图的定义而不存放视图对应的数据, 这些数据仍存在在导出视图的基本表中.
视图的用处
# 图可以隐藏不需要的信息, 可以把信息从多个关系收集到单一的视图中.
基于不同类型表的视图可完成操作
# 基于单表的视图可完成操作: 查询, 删除, 更新视图(包含主键的单表, 视图无group by)
# 基于多表的视图可完成操作: 查询, 删除视图
引入view的优点
视图能够简化用户的操作
视图使用户能以多种角度看待同一数据
视图对重构数据库提供了一定程度的逻辑独立性
视图能够对机密数据提供安全保护
不会出现数据冗余
- 等值连接和自然连接
等值连接和自然连接的异同
# 同:都对属性进行合并,将分表合成一个大表.
# 异:自然连接消除重复列,而等值连接不会.
自然连接的结果关系中属性的顺序
# 两关系公共属性 + 左侧关系剩余属性 + 右侧关系剩余属性.
- 封锁协议
两阶段封锁协议
# 保证可串行性的一个协议是两阶段封锁协议(阐明了事务何时对数据库中的数据项进行加锁和解锁).
该协议要求每个事务分两个阶段提出加锁和解锁请求
# 增长阶段: 事务可以获得锁, 但不能释放锁
# 缩减阶段: 事务可以释放锁, 但不能获得新锁
数据库引入封锁机制的优缺点
# 优点:有效防止“丢失更新”,保证可重复读和不读“脏”数据
# 缺点:产生了活锁, 饿死和死锁的问题
- 并发控制
为什么要进行并发控制
# 当多个事务在数据库中并发地执行时,数据的一致性可能不再维持,系统有必要控制各事务之间的相互作用
并发控制最常用的机制
# 两阶段封锁和快照隔离
- 锁
引入锁的原因
# 确保隔离性,要求对数据项以互斥的方式进行访问
锁的种类
共享型
# 如果事务A获得了数据项Q上的共享型锁, 则A可读但是不能写Q
排他性
# 如果事务A获得数据项Q上的排他性锁, 则A既可写又可读
- 死锁
死锁的定义
# 如果存在一个事务集, 该集合中每个事务在等待该集合中的另一个事务, 则系统处于死锁状态
处理死锁的两种方法
# 死锁预防协议保证系统永不进入死锁状态
# 允许系统进入死锁状态, 然后试着用死锁检测与死锁恢复机制进行恢复
# 如果系统进入死锁状态的概率相对较高, 通常使用死锁预防机制, 否则, 用检测与恢复机制
死锁预防的两种方法
# 通过对加锁请求进行排序或要求同时获得所有的锁来保证不会发生循环等待
# 每当等待有可能导致死锁时, 进行事务回滚而不是等待加锁
- 死锁检测
# 当且仅当等待图包含环时, 系统存在死锁. 在该环中的每个事务称为处于死锁状态
# 要检测死锁, 系统需要维护等待图, 并周期性地激活一个在等待图中搜索环的算法
判断死锁是否发生:
# 超时法
# 事务等待图法
- 事务
数据库为何引入事务的概念?
# 为了解决并发情况下保持数据一致性的问题
# 事务是访问并可能更新各种数据项的一个程序执行单元
要求数据库系统维护事务的以下性质ACID特性
# 原子性:事务的所有操作在数据库中要么全部正确反应出来,要么完全不反应
# 一致性:隔离执行事务时保持数据的一致性
# 隔离性:尽管多个事务可能并行执行,但系统保证,对于任何一对事务a,b 在a看来,b或者在a开始之前已经完成执行,或者a完成之后开始执行。因此,每个事务都感觉不到系统中有其他事务在并发执行
# 持久性:一个事务完成后,它对数据库的改变必须是永久的,即使出现系统故障
维护日志的目的
# 维护一个日志, 每个事务对数据库的修改都首先会记录到日志中. 维护日志提供了重做修改以保证原子性和持久性的的可能, 以及撤销修改以保证在事务执行发生故障时的原子性的可能
事务状态
# 活动的:初始状态,事务执行时处于这个状态
# 部分提交的:最后一句执行后
# 失败的:发现正常的执行不能继续后
# 终止的:事务回滚并且数据库已经恢复到事务开始执行前的状态后
# 提交的:成功完成后
并发执行事务的好处
# 提高吞吐量和资源利用率
# 减少等待时间
- 完整性约束
数据库中常用的完整性约束包括哪些
# 约束域
# 参照完整性
# 断言
# 授权
完整性约束保证当授权用户对数据库进行修改时不会破坏数据的一致性
完整性约束主要有三种子句
# 主键子句
# 检查子句
# 外键子句
- 文件系统
文件系统的弊端
# 数据冗余不一致
# 数据访问困难
# 数据孤立
# 完整性问题
# 原子性问题
# 并发访问异常
# 安全性问题
- BCNF
具有函数依赖集F的关系模式R属于BCNF的条件
对所有F+中形如a->b的函数依赖,下面至少有一个成立
# a->b为平凡函数依赖
# a是模式R的一个超码
- 超码,候选码,主码
# 超码可以唯一确定一个元组
# 候选码是最小的超码
# 主码为被选来区分不同元组的超码
- 关系代数
选择操作
# 选择运算选出满足给定谓词的元组
投影运算
# 投影运算返回作为参数的关系的某些属性
自然连接运算
# 自然连接将某些选择和笛卡尔积运算合并为一个运算
- 数据库
数据库系统的基本功能
# 数据库定义
# 数据库的建立和维护
# 数据操纵
# 数据库安全管理
# 数据库管理系统(DBMS)由一个互相关联的数据的集合和一组用以访问这些数据的程序组成
# 互相关联的数据的集合通常称作数据库
数据库定义
# 长期存储在计算机内的, 有结构的, 可共享的数据集合
数据库系统提供两种不同类型的语言
# 数据定义语言用于定义数据库模式
# 数据操纵语言用于表达数据库的查询和更新
DML和DDL
# 数据操纵语言(DML)使得用户可以对数据库中的数据增删改查
# 数据定义语言(DDL)能完成的操作包括数据的定义和存储
- 关系模式
# 关系模范化的目的是(消除冗余)
# 关系模式的分解既要保持依赖, 又要具有无损连接
# 关系模式中需设置的非空, 唯一, 检查,主键, 外键
- SQL
# SQL 的 SELECT 语句中使用分组子句后, SELECT 子句的语义就不是投影的意思了, 而是(对每一分组执行聚合操作)
# SQL 中, 与操作符 "NOT IN" 等价的操作符是(<>ALL)
where语句和having语句的区别
# Having筛选组,where筛选表和视图,having能筛选聚集函数,where不可以