大纲
1.数据库模式
1.1三级模式-两级映射
-
内模式:按照什么样的格式去存储到物理数据库,与物理数据库直接打交道
-
概念模式:就是我们平时用的数据库的表
-
外模式:就类似是视图,按照需求展示一部分数据出去,例如用户 登录展示用户名,并不把密码返回去显示
-
外模式-概念模式映射:就是表和视图的映射关系,只要表发生了变化,直接改映射不需要改应用程序
-
概念模式-内模式映射:数据库存储的格式改变了,就改变映射即可,应用程序不需要去修改
1.2数据库的设计
概念结构设计,ER模型为代表,跟物理数据库没啥关系
2.ER模型
画ER一图般都是先画局部的,实体(长方形)和属性(圆形)
不同的抽象,例如老师本身是一张表,但是在表的表确是一个字段
关系模式,一个实体(即一张表)就是一个关系模式,
-
1对1关系模式,是2个
-
1对多关系模式,也是2个
-
多对多,有个中间表,所以是关系模式是3个
反正多对多中间的联系,不管关联多少个表,都是在关联表放主键之类,关联关系只有一个,就只有一个表
一个表对应一个关系模式
3.关系代数和元组演练
选择题考的多,且记住数字表示列,从1开始,从左到右
-
并,交,差,(就是我们平时的并集,交集)
-
差,例如(s1-s2,就是s1有的,s2没有的),做法就是,将s1中存在的公共部分删除,剩下的s1部分就是结果
- 投影就是(select)那些列 ,选的是列,投影表达式1,2,跟按照从左到右,选字段,是一样的结果
- 选择就是(where),满足where条件的 选的是行,选择也有按照序号的写法,1就是第一例,
- 笛卡尔积是乘积
- 连接操作(也就是自然连接),将字段一样的只保留一个
- 笛卡尔积并不会去掉字段
特别注意笛卡尔积和连接
连接的时候没有写条件,是自然连接,默认将相同字段的进行连接,去掉重复列
考试考连接和笛卡尔积,投影,用数字代表列,记住自然连接,去掉列,笛卡尔积不去掉
所以笛卡尔积,相同列,选第一个选中
元祖就是根据连接后,满足连接条件的条数
4.规范化理论
选择题考的多
4.1函数依赖
给定一个数,能根据表达式,能出另外一个唯一的值,就是函数依赖
y=x的2次方,但是y不能确定x,因为x可以等于1或者 -1
-
1. 函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A
例如:学号-->姓名。 (学号,课程名称) --> 分数
-
2. 完全函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值。
例如:(学号,课程名称) --> 分数
-
3. 部分函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可。
例如:(学号,课程名称) --> 姓名
- 4. 传递函数依赖:A-->B, B -->C 如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称 C 传递函数依赖于A
例如:学号-->系名,系名-->系主任
-
5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
例如:该表中码为:(学号,课程名称)
* 主属性:码属性组中的所有属性(候选键是)
* 非主属性:除过码属性组的属性 (除了候选键的,例如性别。。)
4.2规范化理论的价值与用途
价值和用途,就是去解决下面出现的问题
-
数据冗余
就是没有分表,将数据都存进去了,例如在学生表,有学生所在系的的系名称,这样每次插入一条数据,都会插 入系的名臣,造成了冗余
- 更新异常
-
插入异常
-
删除异常
4.3 求候选关键字 (重点)
-
超键,可能存在冗余数据,超健就是部分函数依赖
-
候选键,不是部分函数依赖的函数依赖的,存在多个
-
主键,只有一个
图示法找候选键(候选码)
- 入度为0,就是箭头指向这个节点的线为0,从这个点出发,能走遍全部节点,说明是候选键
出度就和入度相反
- 没有入度为0的,找有入度和出度的节点,看哪个能走全部,记住节点是例如 A和B,哪个节点和哪个节点
- AB是组合关键,A和B是分别一个关键字
如下图,sj的组合组件,确定全部
还有st的,部分函数依赖,也能走全部
所以所有候选就是 ST,SJ,所以这里stj都是主属性,没有非主属性
4.4.范式(必考)
4.4.1第一范式
4.4.2第二范式
联合主键,存在部分函数依赖
4.4.3第三范式
进行外键的添加,分表,就是第三范式
4.4.4 BC范式
4.5 模式分解 (重点)
-
保持函数依赖分解,分解前什么样,分解后也是什么样
-
无损分解,就是分解后,还能通过连表的方法得到一样效果
无损分解文字说明
模式关系有包含用a,没有包含用b
b23 代表第二行,没有拥有第三列字段
4.5.1无损分解
1.图表法,看图连表,能解除另外一个的,将裂上的b改为a,其实很简单的,就是连表的另外一种表达
分解完,有一行全部是a,说明是无损,已经还原
2.公式法
公式法,适用于1分为2的,其他的不适用
-
先求分解的两个资源的交集
-
接着求资源1-资源2
-
资源2-资源1
则交集结果分别指向两个差的结果,跟原来给出来的关系比较,在里面的,就满足无损分解
所以下面第一个是
第二个不是
4.6反规范化
5.并发控制
5.1 事务和读写问题
事务的特性
ACID
-
原子性:事务里面的操作单元不可切割,要么全部成功,要么全部失败
-
一致性:事务执行前后,业务状态和其他业务状态保持一致.
-
隔离性:一个事务执行的时候最好不要受到其他事务的影响
-
持久性:一旦事务提交或者回滚.这个状态都要持久化到数据库中
写问题
丢失更新:就是例如开两个事务,另一个事务没有提交,接着又开了另外一个事务,然后,前一个提交了,后一个也提交了,这样后一个就会覆盖前一个的,如下图最后结果10-8 = 2
读问题
-
脏读:在一个事务中读取到另一个事务没有提交的数据
-
不可重复读:在一个事务中,两次查询的结果不一致(针对的update操作) 修改
-
虚读(幻读):在一个事务中,两次查询的结果不一致(针对的insert操作) 条数
5.2 *协议 (重点)
x锁,写锁 加了读锁,别人还可以加读锁,不能加写锁,加上了写锁,不能在上面加任何的锁
s锁,读锁,
锁的协议,对应隔离级别
6.数据库完整性约束
-
实体完整性约束,就是加主键
-
参照完整性,就是加外键,实际的外键,添加市例如员工外键乱填,就报错。
-
用户自定义完整性,例如年龄,就不能输入负数,例如 0<a<200
这些完整性满足一般要求,更高的,我们编写触发器
7.数据库的安全
8.数据库的备份
8.1备份
冷备份,不能选表来备份
跟数据库的量进行区分
-
差量是根据上一次完全备份的
-
增量备份,备份上一次备份的
增量备份时根据上一次的,所以备份数据少,数据快,但是每次备份前,都要先还原原先完全的,在完全基础上,
一次一次叠加增量(所以增量备份熟读快,但是还原相当麻烦)
差量备份,是根据上一次完全备份的,例如周1,2,3用增量,4用差量,恢复时,先恢复完全,
接着恢复差量,直接一步到位,比增量好很多
转储其实就是备份·
海量就是全部
当我们当天出现问题时,但是当天的增量还没有进行备份,所以就要靠日志文件来
8.2恢复和故障
7.分布式数据库
8.数据仓库和数据挖掘
-
数仓针对主题的,例如商品
-
数据库是针对应用和业务的
稳定性是,进入了数仓,不再修改和删除
数据的清洗(清理),即是对数据格式的统一
刷新就是定期放入新的数据
数据集市,就是一步步的建立,先创建部门集的数据仓库,再创建企业级的
OLAP服务器是专门做分析处理工作
数据挖掘是可以挖到未知的特性