关系数据库
关系数据库设计四个步骤,需求分析,概念设计(ER图),逻辑设计(关系模型),物理实现,试运行
数据三个抽象级别,物理,逻辑,视图
事务和日志
日志记录原则:严格按时间顺序
undo log:记录的是与 用户的命令 相反的操作。
redo log:记录的是 用户的命令。
check point:https://www.icourse163.org/learn/RUC-1001655006?tid=1461146444#/learn/content?type=detail&id=1237472171&cid=1257383383
锁
共享锁/读锁/share/s
排他锁/写锁/excusive/x
共享意向锁/读一部分/IS
排他意向锁/写一部分/IX
* 要想拿到S和X,必须先拿到IS和IX
最小依赖canonical cover
第一步,把右边的属性拆分为单个,
第二步,删除多余的依赖。
依次删除每一个Fc,验证是否能由剩下的F推出来。
第三步、左边最小化。
依次删除每一个属性,验证是否能由剩下的F推出来。
https://www.bilibili.com/video/BV1P5411e7rU?p=2
范式
NF1 原子属性,不可再分
NF2 不存在非主属性对候选码的部分依赖。
NF3 不存在非主属性对候选码的传递依赖。
BCNF 没有任何属性对候选码的部分、传递依赖。即左侧全都是码。
分解关系时,有两个要考虑的:
1、保持依赖
BCNF无法保证依赖保持,3NF可以。
2、无损连接
3NF和BCNF分解都能够保证。这是最基本的。
第三范式分解
https://www.bilibili.com/video/BV1CD4y1974g/?spm_id_from=333.788.videocard.5
1、求候选键
1、找出所有没在右边出现过的属性,这些属性集R1一定包含在候选键中
2、判断R1能否推出所有属性,即求闭包
3、如果能,R1就是唯一候选键。
否则,把其它属性每一个分别与R1组合形成一些新的属性集,求这些 属性集的闭包,判断是否是候选键
2、求最小依赖集
3、判断最小依赖集是否包含任一候选键,没有就随便加一个候选键
BCNF范式分解
1、求候选键
2、判断依赖F1->F2(eg:A->B)左边F1(eg:A)是否都是候选键
3、若不是候选键,则将F1->F2里的属性作为一个关系R1(eg:R={AB}),剩下的关系为R=R-F2(eg:R=R-B).
4、将含有F2的依赖删除,继续判断,重复3。
事务
ACID:
原子性atomicity要么全部成功,要么全部失败
一致型consistency,操作前后保持一致
隔离性isolation,事务不互相干扰
持久性durability,永久保存
恢复
https://wenku.baidu.com/view/9073254b944bcf84b9d528ea81c758f5f61f29c3.html
------------------------
如果帮到你的话,点个关注不迷路,点个赞变好看~~