概要
数据库模式 ⭐⭐
ER模型 ⭐⭐⭐⭐⭐
关系代数 ⭐⭐⭐
规范化理论 ⭐⭐⭐⭐⭐
SQL语言 ⭐⭐⭐⭐
并发控制 ⭐⭐
数据库完整性约束 ⭐
一、三级模式-两层映射
二、数据库设计过程
需求分析 —- 数据流图(15下午题)、数据字典、需求说明书
概念结构设计 —- ER模型 (15下午题)
逻辑结构设计 —- ER转换关系模式
物理设计 —- 物理
三、ER模型
1:1 联系:可以联系合并至任意一端的实体关系模式中
1:n 联系:可将联系合并至n端的实体关系模式中
m:n 联系:联系必须单独转成关系模式
如果是 m:n:p ,最少可转换为多少个关系模式
4个:3个单独模式(ABC)+1个 S(A主键,B主键,C主键,xxx)
四、关系代数
关系S1、S2
S1 | |
---|---|
ID | NAME |
w01 | 五 |
s01 | 条 |
t01 | 悟 |
S2 | |
---|---|
ID | NAME |
w01 | 五 |
s02 | 温 |
t02 | 周 |
1、并
S1 U S2 | |
---|---|
ID | NAME |
w01 | 五 |
s02 | 温 |
t02 | 周 |
w01 | 五 |
s01 | 条 |
t01 | 悟 |
2、交
S1 S2 | |
---|---|
ID | NAME |
w01 | 五 |
3、差
S1 - S2 | |
---|---|
ID | NAME |
s01 | 条 |
t01 | 悟 |
4、笛卡尔积
S1 x S2 | |||
---|---|---|---|
ID | NAME | ID | NAME |
w01 | 五 | w01 | 五 |
w01 | 五 | s02 | 温 |
w01 | 五 | t02 | 周 |
s01 | 条 | w01 | 五 |
s01 | 条 | s02 | 温 |
s01 | 条 | t02 | 周 |
t01 | 悟 | w01 | 五 |
t01 | 悟 | s02 | 温 |
t01 | 悟 | t02 | 周 |
5、投影
1、2位列数
π | |
---|---|
ID | NAME |
w01 | 五 |
s01 | 条 |
t01 | 悟 |
6、选择
dID=t01(S1) | |
---|---|
ID | NAME |
t01 | 悟 |
7、连接
S1 | |
---|---|
ID | NAME |
w01 | 五 |
s01 | 条 |
t01 | 悟 |
S2 | |
---|---|
ID | AGE |
w01 | 1 |
s01 | 2 |
t01 | 3 |
===>>>
S1><S2 | ||
---|---|---|
ID | NAME | AGE |
w01 | 五 | 1 |
考:连接由 笛卡尔积、选择、投影 转换
1)笛卡尔积
S1 x S2 | |||
---|---|---|---|
ID | NAME | ID | AGE |
w01 | 五 | w01 | 1 |
w01 | 五 | s01 | 2 |
w01 | 五 | t01 | 3 |
s01 | 条 | w01 | 1 |
s01 | 条 | s01 | 2 |
s01 | 条 | t01 | 3 |
t01 | 悟 | w01 | 1 |
t01 | 悟 | s01 | 2 |
t01 | 悟 | t01 | 3 |
2)选择
d S1.ID =w01,S2.ID = w01(S1xS2)
3)投影
π S1.ID,S1.NAME,S2.AGE (d S1.ID =w01,S2.ID = w01(S1xS2))
五、规范化理论
1、问题
2、依赖-判断第几范式
1)部分函数依赖
2)传递函数依赖
3、键
超键:不仅有候选键还有冗余属性
候选键 :标识数据的唯一性(例如:身份证、学号)
主键
外键
4、求候选键
1)有向图方式表示
2)找出入度为0的属性,以此为起点,去遍历有向图,若能遍历所有节点,则是候选键
3)入度为0的不能遍历所有节点,尝试中间节点(有入度也有出度)直到能遍历所有节点
5、主属性 与 非主属性
6、范式
1)1NF 第一范式
2)2NF第二范式(没有部分依赖)
当且晋档关系模式是第一范式(1NF),且没一个非主属性完全依赖候选键(没有不完全依赖)时,是第二范式
3)3NF第三范式(没有传递依赖)
7、模式分解
1)保持函数依赖分解
R(A,B,C)
A -> B
B -> C
拆成关系 R1,R2 保持了函数依赖
R1(A,B)
R2(B,C)
拆成关系R1,R3 没有保持函数依赖,因为B->C验证不了
R3(A,C)
2)无损分解
无损,可以还原
有损,不能还原
例子1:
存在关系模式 :
成绩 (学号,姓名,课程号,课程名,分数)
函数依赖:
学号 -> 姓名
课程号 ->课程名
(学号,课程号)-> 分数
若将其分解为:
成绩(学号,课程号,分数)
学生(学号,姓名)
课程(课程号,课程名)
判断其是否是无损分解?
答:
因为 学号 ->姓名,所以 成绩(学号,姓名,课程号,分数)
因为 课程号 -> 课程名,所以成绩 (学号,姓名,课程号,课程名,分数)
3)判断无损的方法
- 列表法
- 公式法(只适合一分二,分解了两个)
列表法
还是例子1的场景
规则:
横坐标为 被分解的各个关系
列坐标为 关系中的每个属性
在分解关系中的属性,就为a,否则为b
在分解关系中的属性,下标为当前列数,比如a1
不在分解关系中的属性,下标为所在行所在列,比如b12
当初始列表完毕后,如果发现在其他行中有a,本行中对应为b,可以将b 替换为a
替换列表完毕后,如果有一行全是a,则说明为无损,否则有损
初始列表为:
学号 | 姓名 | 课程号 | 课程名 | 分数 | |
---|---|---|---|---|---|
成绩 | a1 | b12 | a3 | b14 | a5 |
学生 | a1 | a2 | b23 | b24 | b25 |
课程 | b31 | b32 | a3 | a4 | b35 |
替换列表为:
学号 | 姓名 | 课程号 | 课程名 | 分数 | |
---|---|---|---|---|---|
成绩 | a1 | a2 | a3 | a4 | a5 |
学生 | a1 | a2 | b23 | b24 | b25 |
课程 | b31 | b32 | a3 | a4 | b35 |
公式法
- 如果 关系模式为R(A,B,C),一分为 R1(A,B),R2(B,C),假设函数依赖关系为 A->B, B->C
- 先求R1,R2的交集 = B
- 再求 R1-R2 = A
- 再求 R2-R1 = C
- 看交集 与 (R1-R2)的结果,是否满足函数依赖,A->B
- 看交集 与 (R2-R1)的结果,是否满足函数依赖,B ->C
- 如果全部满足函数依赖,则为无损,否则为有损
六、并发控制
1、事务的四大特性 ACID
1)原子性(Atimocity)
事务所包含的所有操作,要么全部成功,要么全部失败回滚2)一致性(Consistency)
事务执行前与执行后,保持一致的状态,
举例 :用户A 和用户B 加起来的钱一共为 5000元,无论A和B之间如何进行转账,都保持最终的结果为A和B的钱加起来一共为 5000元3)隔离性(Isolation)
当多个用户进行并发访问数据库时(比如同时操作同一张表),数据库为每个用户开启一个事务,不被其他的事务进行干扰,多个并发事务之间进行相互隔离4)持续性(Durability)
事务一旦被提交了,对数据库的改变是永久的,即使在数据库遇到系统故障的时候 也不会丢失事务提交的操作
2、采用锁机制来实现事务的隔离性
3、并发访问读数据会发生三种情况
1)幻读
- 当一个事务用一样的sql多次查询,结果每次查询都查到了一些之前没见过的数据。
- 事务A,发送一条SQL select * from table where id > 10
- 第一次查出来了10条数据
- 事务B又插入了几条数据,且事务B提交了
-
2)不可重复读
A事务会对一条数据进行查询
- B事务、C事务对一条火速将进行更新
- A事务开启,读到的数据是A。然后B更新后,B提交事务,A还没提交
- A第二次查询到的值是B
C值更新数据为C值,并且提交事务,A还没提交,第三次查询到的值是C
3)脏读
A更新了一行数据的值为A值,事务B去查询了一下这行数据的值,看到的是A值
- A没有commit ,B拿着A值去做了一些业务处理
- 此时A突然回滚了事务,导致他刚才更新的A值没有了
- 事务B紧接着再次查询到的数据就是NULL,这就是脏读
4、三级封锁协议
一级封锁协议
事务在修改数据时必须先加X锁,在事务结束之后释放X锁。
这样可以解决丢失修改的问题。因为不能有两个事务同时修改同一个数据,所以不会有修改被覆盖的问题。二级封锁协议
在一级的基础上,要求读取数据A之前必须加上S锁,读取A之后立即释放S锁。
这样可以解决读脏数据的问题。因为一个事务如果对A进行修改,必须先加X锁。其他事务就不能在数据A上加S锁,就不能读取A,也就不会读到脏数据。三级封锁协议
在二级的基础上,要求在读取数据A之前加上S锁,在事务结束之后再释放S锁。
这样可以解决不可重复读的问题。因为在事务结束前,数据A上一直有S锁,其他事务不能再在A上加X锁来修改A,在读取期间数据的值不会发生改变。5、两段锁协议
加锁和解锁分两个阶段进行。
两段锁协议可以解决幻影读的问题。事务遵循两段锁协议是可串行化调度的充分非必要条件。可串行化调度是指,通过并发控制,使得事务并发执行的结果和某个串行执行事务的执行结果相同。串行执行的事务之间互不干扰,不会有并发一致性问题七、数据库完整性约束
1、实体完整性
实体的完整性是通过主键(primary key)约束和候选键(candidate key)约束来实现的2、参照完整性(reference 或称作引用)
外键3、用户自定义完整性
4、触发器
参考:https://www.jianshu.com/p/c4fc6bb828da八、数据库安全措施
| 措施 | 说明 | | —- | —- | | 用户标识和鉴定 | 最外层的安全保护措施,可以使用用户账户,口令及随机数检验等方式 | | 存取控制 | 对用户进行授权,包括操作类型(增删改查)和数据对象(数据的范围)的权限 | | 密码存储和传输 | 对远程终端信息用密码传输 | | 视图的保护 | 对视图进行授权 | | 审计 | 使用一个专用文件或数据库,自动将用户对数据库的操作记录下来 |
九、数据备份
1、冷备份
2、热备份
动态备份,利用备份软件,将数据库正常运行状态下,进行备份
缺点:不能出错,不然很麻烦