三级模式两级映射
关系的三种类型
数据库视图:它一个虚拟表(逻辑上的表),其内容由查询定义(仅保存SQL查询语句)。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并没有真正存储这些数据,而是通过查询原始表动态生成所需要的数据。
视图的优点:
物化视图:它不是传统意义上虚拟视图,是实体化视图,其本身会存储数据。同时当原始表中的数据更新时,物化视图也会更新。【多查少更新】
分布式数据库管理系统-组成
分布式数据库管理系统-结构
分布透明性
分片透明:是指用户不必关心数据是如何分片的,它们对数据的操作在全局关系上进行,即如何分片对用户是透明的。
复制透明:用户不必关心数据库在网络中哥哥节点的复制情况,被复制的数据的更新都由系统自动完成。
位置透明:是指用户不必知道所操作的数据放在何处,即数据分配到哪个或哪些站点存储对用户是透明的。
局部映像透明性(逻辑透明):是最低层次的透明性,该透明性提供数据到局部数据库的映像,即用户不必关心局部DBMS支持哪种数据模型、使用哪种数据操作语言,数据模型和操纵语言的转换是由系统完成的。因此,局部映像透明性对异构型和同构异质对分布式数据库系统是非常重要的。
1.2.1. 两阶段提交协议2PC
2PC事务提交的两个阶段
两条全局提交规则
E-R图(实体联系图)
两个不同实体集之间联系
集成的方法:
集成产生的冲突及解决办法:
数据模型三要素:数据结构、数据操作、数据的约束条件。
层次模型
网状模型
面向对象模型
关系模型
学生(学号,姓名,年龄,班级编号)
一个实体必须转换为一个关系模式
联系转关系模式:
S1 X S2
S1的每条记录与S2的每条记录拼接,属性列数是两者之和,属性行数是两者成绩 3 * 3 = 9
1 = 4,即S1第一列等于S2第一列
Select___投影____ from___笛卡尔积____where___选择___
列:二者之和去重复,,5 - 1 = 4
行:所有属性都相等的
通过笛卡尔积的投影和选择操作可以得到自然连接,先投影还是先选择?
先选择
性能:
E2和E4,E2效率更高但是E4少做了一个等值。
没有达到第三范式,这些问题都会存在
5.2.1. 函数依赖
设R(U,F)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u, v, 只要有u[X]=v[Y], 则称X函数决定Y,或称Y函数依赖于X,记为X->Y。
左侧叫做决定因素,右侧叫做被决定因素。
5.2.2. 键
主属性与非主属性:组成候选码的属性就是主属性,其他的就是非主属性。
求候选键:
自反律:由一个较大板块可以确定一个较小板块,如:身份证号和姓名能唯一确定身份证号,也能唯一确定姓名,AB->A AB->B
5.4.1. 第一范式
第一范式(1NF):在关系模式R中,当且仅当所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R是第一范式。
属性可再分
简单属性和复合属性、单值属性和多值属性、NULL属性、派生属性
例如:关系模式R(系名称,高级职称人数)是否满足1NF,如果不满足,应如何调整?
5.4.2. 第二范式
第二范式(2NF):当且仅当实体E是第一范式(1NF),且每一个非主属性完全依赖主键(不存在部分依赖)时,则称实体E是第二范式。
候选键只有一个依赖
拆
拆分:(课程号,学分)、(学号、课程号、成绩)
5.4.3. 第三范式
第三范式(3NF):当且仅当实体E是第二范式(2NF),且E中没有非主属性传递依赖于码时,则称实体E是第三范式。
5.4.4. BC范式
BC范式(BCNF):设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。
候选码:SJ、ST
T -> J ,T不包含候选码,所以不满足BC范式
5.4.5. 练习题
5.5.1. 是否保持函数依赖
保持函数依赖分解
设数据库模式P={R1, R2, ..., Rk}是关系模式R的一个分解,F是R上的函数依赖集,P中每个模式Ri上的FD集是Fi。如果{F1, F2, ..., Fk}与F是等价的(即相互逻辑蕴涵),那么称分解P保持FD。
无损分解
什么是有损,什么又是无损?
无损连接分解:指将一个关系模式分解成若干个关系模式后,通过自然连接和投影等运算仍能还原到原来的关系模式。
表格法:
公式法:
1NF:所有属性不可再分
2NF:存在非主属性对候选键的部分函数依赖,比如候选键是组合键,存在有的属性只依赖了它其中一个。
6.1.1. 事务的ACID特性
6.1.2. 封锁协议
丢失更新加锁:
一级封锁协议:
解决丢失更新的问题
读“脏”数据加锁
不可重复读加锁:
6.3.1. 数据备份
日志文件:事务日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中。
遵循原则:先写日志,再写数据库
假如在周六发生故障,则恢复:
6.3.2. 数据库故障与恢复