《系统架构师》——数据库系统
考点分布:
三级模式 - 两级映射
E-R模型:实体-关系-属性
关系代数:
并:两个模式中直接合并成一个模式,新模式的行数=两个模式行数之和
交:两个模式中所有属性值完成相同的行
差:模式A 与 模式B 之差 = 模式A -(模式A 并 模式B)
笛卡尔积:新模式的行数=两个模式行数之积,新模式的列包括两个模式的所有列
联接:根据指定属性值来联接两个模式,组成一个新模式。
投影:针对单个模式而言,即选择指定列出来,作为一个新模式
选择:针对单个模式而言,容易与投影混淆,选择出指定列为指定值的行作为一个新模式
非规范化的关系模式,可能存在数据冗余、更新异常、插入异常和删除异常的问题。
超键:唯一标识元组(可以存在冗余)
候选键:在超键的基础上消除多余属性(应该就是我们常设计的无冗余的联合主键),一般一个模式只有一个候选键,但也有多个候选键的情况
主键:在候选键中任选一个(联合主键中的其中一项)
外键:其它关系的主键
函数依赖:
1、完全函数依赖:其它属性可以由超键推导,而不能由超键中任何一个子集推导,就称为完全函数依赖,从规范上来说是好的设计。
2、部分函数依赖:超键中的某一个子集也能推导出其它属性,就称为部分函数依赖,这是我们需要避免的。(避免了这个就达成了2NF)
3、传递函数依赖:超键可以推导出属性A,属性A也可以推导出属性B,则B传递函数依赖于超键。(避免了就达成了3NF)
将 E-R 模型转换成关系模式时,一个实体都转换成一个关系模式,1:1联系不用单独转换成关系模式, 1:n 关系可以单独转换也可以不转换,m:n 关系单独转换成一个关系模式。
求候选键的方法:
1、将关系模式按函数依赖关系用有向图表示
2、找所有入度为0的结点,遍历该有向图,若能遍历,则这些结点就是候选键
3、如果上一步无法完全遍历,则加入一些中间结点,直至可以遍历所有结点,则这些结点就是候选键。
数据库范式:逐步解决插入异步、删除异常、数据冗余
1NF:属性不可拆分(其实就是避免一个属性值包括复合数据)
2NF:消除非主属性对候选键的部分依赖(满足完全函数依赖,对候选键去冗余)
3NF:消除非主属性对候选键的传递依赖(消除传递依赖,非主属性只能依赖于主属性,不能依赖于其它非主属性)
BCNF:消除主属性对候选键的传递依赖(不允许某个主属性可以由其它主属性或非主属性推导,当只有一个候选键时,等同于3NF)
BCNF要侧重说明,比如一张关系表为 (玩家ID,昵称,物品编号,物品数量),其中昵称不允许重复。那 (玩家ID,物品编号) ->(昵称,物品数量),(昵称,物品编号)->(玩家ID,物品数量),这样这张关系表就存在两个候选键 (玩家ID,物品编号) 和 (昵称,物品编号)了,而这里玩家ID和昵称作为主属性,是可以被其它属性推导出来的。这样就不符合BCNF了。所以,BCNF只有当存在多个候选键时才和3NF有所区别。
无损分解:个人总结,判断是否为无损分解,先将依赖关系中所有入度为0(即无法被推导)的属性作为一个子模式(如果没有拆分出这样的子模式,一定是有损分解,当然有该子模式的超集也是可以的),在这个子模式基础上根据依赖关系,如果能推导出所有属性就是无损分解。
并发控制:
封锁协议
S锁:共享锁(share locks),又称读锁,只可以读取数据,当某事务对对象加上S锁之后,其它事务只能对该对象加S锁,而不能加X锁,直到所有的S锁都被释放。
X锁:排它锁(eXclusive lock),又称写锁,可以读取和修改数据,当事务对对象加上X锁之后,其它事务都不能对该对象加任何锁,直到该X锁被释放。
数据库完整性约束:
1、实体完整性约束
2、参照完整性约束
3、用户自定义完整性约束
触发器
数据库安全:
数据备份:
分布式数据库的体系结构:
分布式数据库概念:
数据仓库和数据挖掘:
联邦数据库:
NoSQL:
反规范化:
大数据: