概要

数据库模式 ⭐⭐

ER模型 ⭐⭐⭐⭐⭐

关系代数 ⭐⭐⭐

规范化理论 ⭐⭐⭐⭐⭐

SQL语言 ⭐⭐⭐⭐

并发控制 ⭐⭐

数据库完整性约束 ⭐

一、三级模式-两层映射

软考-03| 数据库 - 图1

二、数据库设计过程

需求分析 —- 数据流图(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、依赖-判断第几范式

关系模式 :R(A,B,C)

1)部分函数依赖

AB ->C, A ->C(主键的一部分可以确定C)

2)传递函数依赖

A->B,B->C === A->C

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提交了
  • 事务A第二次查出来了12条数据

    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、热备份

动态备份,利用备份软件,将数据库正常运行状态下,进行备份
缺点:不能出错,不然很麻烦

3、根据备份的数量

1)完全备份

备份所有数据

2)差量备份

仅备份上一次完全备份之后变化的数据(恢复方便)

3)增量备份

备份上一次备份之后变化的数据

4、转储

1)静态海量转储

在系统中无运行事务的时候,每次转储全部的数据库

2)静态增量转储

在系统中无运行事务的时候,每次转储上一次转存后更新过的数据

3)动态海量转储

转储期间允许对数据库进行存取或修改,每次转储全部的数据库

4)动态增量转储

,每次转储全部的数据库,每次转储上一次转存后更新过的数据

5、日志文件

十、数据仓库与数据挖掘