第三章、数据库系统(6分~8分)
1、主要考考察

2、ER模型有一个大题,15分。下午考
1、三级模式-两层映射
1、三级模式
- 外模式(视图级别):逻辑用户
- 概念模式(表级):模式
- 内模式(文件级):存储模式、主要是物理存储
2、两层映射
1、外模式和概念模式的映射(外模式映射)
2、概念模式和内模式的映射(内模式的映射)
3、这个独立是为了将数据独立。
4、用户只要改变映射的关系,不需要管上层和下层。
3、如图
1、

2、数据库设计过程
1、四个阶段
1、需求分析
- 产出
- 数据流图:数据的来龙去脉(下午大题会考15分)
- 数据字典:对数据流图的补充
- 需求规格说明书
2、概念结构设计
- 产出
- ER模型
3、逻辑结构设计
- 产出
- 关系模式
4、物理设计
- 产生
- 数据库和表。
5、图示

3、E-R模型
1、讲解图例
1、方框:实体
2、椭圆:属性
3、菱形:联系
4、方框中有两条竖线:弱实体
5、一条线上有一个实心圆点:特殊化
6、如图

2、联系
1、1—1联系(1:1)
1、如图有这样的一个联系需要转换

2、重点是1-1关系
3、我们这里的任职有三种方法
4、第一种(将1:1联系转换为一个独立的关系)
- 与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,且每个实体的码均是该关系的候选码。
- 就是单独建立一个任职表(任职时间,姓名,校名)。我们把联系两端的主键拿过来,和任职合并成一张表。
5、第二种(将1:1联系与某一端实体集所对应的关系合并)
- 则需要在被合并关系中增加属性,其新增的属性为联系本身的属性和与联系相关的另一个实体集的码。
- 我们把任职表和校长表一起合并,现在校长表(姓名,性别,职称,年龄,任职时间,学校)
6、答案
2、1—多联系(1:n)
0、例子

1、这里有两种方法
2、第一种
- 一种方法是将联系转换为一个独立的关系,其关系的属性由与该联系相连的各实体集的码以及联系本身的属性组成,而该关系的码为n端实体集的码;
- 就是说,关系自己建立一张表,表里存自己的属性,和关系两端的主键
3、第二种
- 另一种方法是在n端实体集中增加新属性,新属性由联系对应的1端实体集的码和联系自身的属性构成,新增属性后原关系的码不变
- 就是把关系的属性加到,N那头的表中。
4、答案

3、多—多的联系(n:m)
1、这里有一种方法
- 与该联系相连的各实体集的码以及联系本身的属性均转换为关系的属性,新关系的码为两个相连实体码的组合(该码为多属性构成的组合码)
- 说人话:就是把这个关系单独建一张表,加上自己的属性和关系两端的主键。
2、例子

3、答案

4、总结
1、一个实体型转换为一个关系模式
2、联系转关系模式:
- 1:1联系:可将联系合并至任意一端的实体关系模式中
- 1:n联系:可将联系合并至n端实体关系模式中
- m:n联系:联系必须单独转成关系模式
3、三个以上实体间的一个多元联系
- 例子
-
- D(A,B,C)。所以是至少4个
4、关系代数
1、并(Union)
1、 关系R和S有相同的n(n个属性),属性都来自同一个域
2、R与S的并运算表示:RUS
3、结果:n目关系,由属于R或属于S的元组组成(把不相同的放在一起,相同的只留一个)
4、说人话:就是把R、S相同的只保留一个,其他全部合并展出。
4、

2、差(except)
1、1、 关系R和S有相同的n(n个属性),属性都来自同一个域
2、R与S的原酸表示:R-S
3、运算结果:n目关系,由属于R而不属于S的所有元组组成
4、说人话:就是R-S,R有的而S没有的,作为结果。
4、例子

3、交(intersection)
1、关系R和S有相同的n(n个属性),属性都来自同一个域
2、R与S的交运算表示:R ∩ S
3、运算结果:n目关系,既属于R又属于S的元组组成
4、说如话:就是把R和S中相同的元组作为结果
4、笛卡尔积(Cartesian Product)
1、是广义的笛卡尔积
2、R:n目的关系(列),k1个元组(行)
3、S:m目关系(列),k2个元组
4、R与S的笛卡尔积运算表示:R X S
5、运算结果:行:k1*k2个元组;列:(m+n)列 元组的集合
6、其中元组的前n列是关系R的一个元组,后m列是关系S的一个元组
7、说人话:就是把R和S的每一条数据相乘。
7、例子

5、选择
1、用σ xxx = yyy 就是了
2、看图就懂了,这有两个关系,S1,S2

2、求S1关系中的Sno=3的选择

6、投影
1、用π xxx,xxx 就可以展示
2、如图还是以上关系表
3、求π sno,sname的投影

7、自然连接
1、自然连接的符号:▷◁
2、就相当于进行了:先笛卡尔积,再做选择,再做投影
3、这里把两个关系相同的属性,只保留一个。然后进行投影
4、如图例子
- 以下两个关系
-
- 答案:
-
5、规范化
1、函数依赖
1、定义一
1、设R(U)是属性集U上的关系模式,X、Y是U的子集。对于R(U)的任意一个可能的关系r,r中不可能存在两个元组以上的属性值相对,而在Y上的属性值不等。称为“X函数确定Y"、或者”Y函数依赖于X"。记作X->Y(就是相当于两行中的,一个唯一id只能对应一个名字,不能出现两个名字,这个就是依赖)
2、有主码或关键字关系:肯定有函数依赖
2、定义二(部分、完全函数依赖)
1、、在R(U)中,如果X->Y,并且X中的任何一个真子集都推不出Y(必须要全部X的真子集才能推出Y),则称为Y对X完全依赖关系,
-
说人话就是X里面所有一起,才能推出来Y,其中任何一个单独都推不出来,才是完全函数依赖。
-
记作:
2、如果X->Y,但Y不完全函数依赖于X(就是只要X中有一个或几个和Y有依赖,就不是完全函数依赖),则称为Y对X的部分函数依赖
-
就是只要X中有一个或几个和Y有依赖,就不是完全函数依赖
-
记作:
3、定义三(传递函数依赖)
1、就是说X能推出Y,Y不能推出X,但是Y可以推出Z。所以Z对X传递函数依赖
2、如果X能推出Y,Y也能推出X,那么Z直接依赖于X,就不是传递函数了
3、例子

2、键
1、候选键(候选码):只要一个关系中,一个属性能唯一确定一个值或一行,就都叫候选码
2、主键(主码):任选一个候选键,就可以作为主码
3、外键(外码):其他关系的主键(主码)
1、图示法求候选键
1、将关系的函数依赖关系,用“有向图”的方式进行表示。
2、找出入度为0,(就是只有出,没有进),并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集,就是关系模式的候选键
3、若入度为0的属性集不能遍历图中所有节点,则需要尝试性的将一些中间节点(既有入度又有出度的结点)并入,入度为0的属性集化总,直至该集合能遍历到所有节点,集合为候选码。
4、例子

3、主属性和非主属性
1、组成候选码的属性就是主属性,其他的就是非主属性
4、范式
1、第一范式
1、一个关系中,不可再分隔的独立的单元格数据就是第一范式
2、说人话:就是每个属性都不可再分的数据项,就是第一范式
2、第二范式
1、若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式
2、第二范式是指每个表必须有一个(有且仅有一个)数据项作为关键字或主键(primary key),其他数据项与关键字或者主键一一对应,即其他数据项完全依赖于关键字或主键。由此可知单主属性的关系均属于第二范式
3、就是没有部分函数依赖
4、例子(理解)
- SC表(学号,课程号,成绩,学分) // 着重的是候选码
- 其中(学号,课程号)—>成绩。这个没有部分函数依赖,所以是第二范式
- 但是:(学号,课程号)—>成绩,课程号—>学分。这个就有部分函数依赖了,学分没有完全函数依赖于学号这个候选码
- 我们可以修改两张表,只能拆啊
- (学号,课程号,成绩),(课程号,学分)
5、如果在第二范式就解决了
- 插入异常
- 修改异常
- 删除异常
3、第三范式
1、满足第二范式,而且没有传递函数依赖候选码。
4、BC范式
1、设关系模式R<U,F>∈1NF,若X推出Y,Y不属于X时,X必须有个主码,则表示R<U,F>∈BCNF
2、换句话说,就是在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R属于BCNF
5、范式总结

5、模式分解
1、保持函数依赖分解
1、概念:
- 设数据库模式ρ={R1,R2,…,Rk}是关系模式R的一个分解,F是R上的函数依赖集,ρ中每个模式Ri上的FD集是Fi。
- 如果{F1,F2,…,Fk}与F是等价的(即相互逻辑蕴涵),那么称分解ρ保持FD。
2、例子
-
例1:有关系模式R(A,B,C),F={A→B,B→C},将其拆分为:R1{A,B},R2{B,C},是否保持函数依赖。
-
R1{A,B},F1{A→B}
-
R2{B,C},F2{B→C}
-
F1,F2与F是等价的,所以保持函数依赖分解。
2、无损分解
1、有损:不能还原
2、无损:可以还原
3、无损联接
- 指将一个关系模式分解成若干关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式
3、无损分解——公式法(只能适用于两个)
1、理解

2、例子

3、答案:是无损分解
- R1∩R2 = A
- R1 - R2 = B
- R2 - R1 = C
- 又因为A—>B,所以是无损分解
4、无损分解—表格法
6、SQL语句
1、建表
1、语句
- creat table <表明>
2、完整格式

3、例子

2、修改与删除表
1、

3、查询

4、操作总和

7、并发控制
1、事务
1、原子性
2、一致性
3、隔离性
4、持续性
2、并发产生的问题
1、丢失更新
2、不可重复读问题
3、读“脏”数据
4、图示

3、解决方法
1、封锁协议
- S封锁(共享锁)
- X封锁(排它锁)
- 两段锁协议
2、死锁
- 预防死锁
- 死锁的解除
8、数据库完整性约束
1、实体完整性约束
1、主键
- 非空
- 唯一
2、主码是否唯一,不唯一就错误或拒绝
3、主码的属性值,是否为空,有就直接拒绝或修改掉
2、参照完整性约束
1、FOREIGN KEY 定义
2、用REFERENCES短语知名这些外码是参照哪些表的主码
3、例子

3、用户自定义完整性约束
1、列值非空(NOT NULL)、唯一(UNIQUE)、是否满足一个表达式(CHECK)
2、例子

4、触发器
1、介绍
1、触发器是用户定义在关系表上的一类由事件驱动的特殊过程
2、说明
1、触发器保存在数据库服务器中
2、任何用户的增删改操作,由服务器自动激活触发器
3、触发器可以实施更为复杂的检查和操作,具有更精细和强大的数据控制能力
3、定义触发器
1、触发器又叫事件-条件-动作
2、格式
CREATE TRIGGER <触发器名称>
{BEFORE |AFTER} <触发事件> ON <表名>
REFERENCING NEW | OLD ROW AS <变量>
FROM EACH {ROW | STATEMENT}
[WHEN <触发条件>] <触发动作提>
4、定义触发器语法说明
1、必须是表的拥有者
2、触发器名
1、触发器可以包含模式名,也可以不包含
2、在同一模式下触发器必须唯一
3、表名
1、触发器只能定义在基本表上,不能定义在视图
2、如果基本表发生变化,则对应的触发器也会被激活
4、事件触发
1、insert/delete/update这几个事件组合
2、update of<触发列,…>,即进一步知明修改哪些列时机会触发器
3、AFTER:事件完成后才激活触发器
4、BEFORE:时间触发前,激活触发器
5、触发器类型
1、行级触发器(FOR EACH ROW)
2、语句级触发器(FOR EACH STATEMENT)
3、例子

6、触发条件
1、触发体动作为真时,触发动作体才执行,否则触发动作体不执行
2、如果没有WHEN触发条件,则触发体动作在触发器激活后立即执行
7、触发动作体
1、可以是匿名PL/SQL过程块,也可以是对自己创建存储过程的调整
2、如果是行级触发器,用户都可以在过程体中使用new 和old引用事件之后的新值和事件之前的旧值
3、如果语句触发器,则不能在触发动作提化总使用new和old
4、如果触发器动作体执行失败,激活触发器的事件就会终止执行,触发器的目标表或触发器可能影响其他对象不发生任何变化
5、注意:不同的RDBMS产品触发器语法各部相同





