第三章.数据库系统


第三章.数据库系统

该章内容在上午的综合题、下午的案例分析和论文都可能涉及到数据库系统相关知识。
重点:规范化理论(必考)、关系代数(必考)

第一节.三级模型——两级映射

层次性的架构设计,为我们应用的时候提供了很多方面的便利。让整个体系的可维护性、应变能力变得更好一些了。
在这里插入图片描述
从示意图上可以看到,物理数据库在系统和计算机上的表现形式往往就是一个文件,Access数据库、SQL Server数据库落最后还是一个文件。在SQL Server数据库中除了数据库文件以外,还有日志文件这些。

数据系统结构分成三个级别的层次,即:内模式、概念模式、外模式。

  1. 内模式(又称物理数据库模式):它是和物理层次数据库直接关联的,负责管理存储数据的方式,即数据应以什么格式存放在物理文件上面,以及如何优化这些存储方式;该模式的关注点在于数据如何存放在上面(这时内模式应该考虑的职责)。
  2. 概念模式(又称概念级数据库):即数据库中的“表”,在该模式中,根据业务以及应用,数据被分成了若干张”表“,表之间会有相应的关联。
  3. 外模式:处于用户的应用层次,即数据库中的“视图”,使用户在对数据的控制上有了更多的手段,以及更为灵活的处置方式。
  4. 用户的应用程序是用户级数据库。

对于三级模式,分为外模式,模式和内模式。
其中外模式对应视图级别,是用户与数据库系统的接口,是用户用到那部分数据的描述,比如说: 用户视图; 对于模式而言,又叫概念模式,对于表级,是数据库中全部数据的逻辑结构和特质的描述,由若干个概念记录类型组成,只涉及类型的描述,不涉及具体的值; 而对于内模式而言,又叫存储模式,对应文件级,是数据物理结构和存储方式的描述,是数据在数据库内部表示的表示方法,定义所有内部的记录类型,索引和文件的组织方式,以及数据控制方面的细节。例如:B树结构存储,Hash方法存储,聚簇索引等等。

应用:比方说在概念模式当中的一个存储用户信息的一张表,这个用户信息包含很多种信息,比方说用户的用户名密码等等很多很多的内容,在应用的过程中,如果说任何一个功能模块都能够直接去调用用户的所有的信息,我们觉得这可能不是很安全,另外一点,如果说概念模式里面这些表发生了变化,如果说应用程序是直接调用这些表的,那么应用程序也应该跟着变,但如果说加了外模式之后,我们可以把原来的数据表进行一定的处理之后,形成相应的数据,比如说登录时,我们不需要调用很多的信息,只需要调用用户名和密码然后形成一个视图,然后给登录模块去使用,在内部处理之后,我们只需调用一些用户的信息,不需要调用用户的密码,这就是增加了增加了安全性、也增加了灵活性,以后概念模式表这一级发生变化,比如说原来的所有用户信息都是通过表存储起来的,现在我们不这么做了,我们把有些字段分成一个表,另一些字段分成另一个表,你也可以通过一些视图然后把这些表整合起来,这些表中的那些列组合成一个视图,这也是可以的,这样子就增加了灵活性。

数据库系统结构分成两个级别的层次,即外模式-概念模式映射、概念模式-内模式映射。

  1. 外模式-概念模式映射:即“视图”和“表”之间的映射关系。咱们把表通过相应的操作就能得到视图。
  2. 概念模式-内模式映射:管理内部的存储形式和表的一种情况的映射关系。意思就是把存储的结构进行改变,我们只需要调整这种映射关系,而不需要修改用户的应用程序就能够应对这种变化。

第二节.数据库设计过程

在这张图中,我们能够理清楚设计思路是怎么样的,同时了解每一个阶段的产出物有哪些?
在这里插入图片描述
在整个数据库的设计过程中,首先是需求分析,需求分析做的整个系统对数据这一块有什么样的要求,有从用户那里收集过来的,同时由转换的过程中产生的一些需求,比如说关联性的需求,在这一个阶段,会产出相应的数据流图,数据字典和需求说明书等产物。当然严格来讲,需求分析是属于上一个阶段的需求阶段的任务。数据库结构设计具体来讲的话是从概念结构设计算起的,概念结构设计主要表达形式就是做E-R模型,E-R模型跟数据库管理系统没有关系的一种模型。就是你设计出这么一个E-R模型之后,最终你就能把E-R图转换为很多类型的数据库。所以在E-R模型的这一层次往往跟物理数据库还没有直接的关系,这就是一种数据的表达。其中包含看数据的实体会有哪些属性,实体之间会有一些什么样的联系,分析这些方面的问题,接下来就是E-R模型转换为关系模式,基本流程后边会讲到,其实就是把他们转成文字表达(一个一个表)的形式。在转换的过程中,就会涉及到规范化理论之类(必考),后面会详细讲到。概念结构设计完之后,就是进行逻辑结构设计,逻辑结构设计之后,就是转成关系模式。所以产出物就是关系模式。有了关系模式之后,进一步把DBMS(数据库管理系统),也就是把数据库管理系统的一些特性融入进去,也就是不同的数据库管理系统它的类型方面可能略有一些细微的差别,在设计的时候,可以注意可能有一些约束什么之类会存在一些小的差异,这些需要考虑进来,然后就形成了一种物理层次的设计,这是整个数据库设计的流程。


第三节.E-R模型

在这里插入图片描述
图注:在E-R模型中,使用方框表示实体(如学生、课程);椭圆表示属性(如学号、姓名、性别、年龄);菱形表示联系(如选课)。其中学生和课程之间具有多对多关系。

将局部E-R图合成全局E-R图,有存在两种集成的方法:

  • 多个局部E-R图一次集成。有可能会出现一些问题难以发现。
  • 逐步集成,用累加的方式一次集成两个局部E-R。耗时但简单不容易出错。

集成产生的冲突及解决办法:

  • 属性冲突。同一属性可能会存在于不同的分E-R图,由于设计人员不同或是出发点不同,对属性的类型、取值范围和数据单位等可能会不一致。
  • 命名冲突。相同意义的属性在不同的分E-R图中有着不同的命名,或是名词相同的属性在不同的分E- R图中代表这不同的意义。
  • 结构冲突。同一实体在不同的分E-R图中有不同的属性,同一对象在某一分E-R图中被抽象为实体,而在另一分E-R图中又被抽象为属性,需要统一。 本题属于结构冲突。

E-R模型转换为关系模式两条原则:

  1. 一个实体型转换为一个关系模式。有三种联系,1:1联系、1:n联系、m:n联系。
    1:1联系:即一 一对应的关系中,一个实体型转换为一个关系模式,联系可以转成一个单独的关系模式,当然也可以将该联系合并到与之相关联的实体当中。最少转换成2个关系模式,最多转换成3个关系模式。
    1:n联系:即一对多的关系中,仍然是一个实体型转换为一个关系模型,联系可以转成一个单独的关系模式,但不是必须的,也可以只能记录在多的那一边。如:部门实体与和员工实体之间,一个部门包含多个员工,一个员工只能属于一个部门。我们把联系记录在员工那一边,为什么?就是在员工表里面加上一个部门号,加上部门号就能对应到相应的部门上面了。如果你在部门中添加员工号到同一个记录中,那是没办法添的。
    m:n联系: 以上方E-R图为例,学生和课程两个实体都应该转换成关系模式,多对多的联系也必须转换成关系模型。最少转换成3个关系模式。
  2. 三个以上实体间的一个多元联系。
    在这里插入图片描述
    解:A、B、C三个实体分别转换成一个关系模式。而中间的多元联系也必须转换成一个关系模式,那么最少可转换为4个关系模式。

第四节.关系代数(必考)

以选择题的形式存在;关系代数基本的运算:并( ∪ \cup )、交( ∩ \cap )、差( − - )、笛卡尔积( × \times ×)、投影( π \pi π)、选择( σ \sigma σ)、联结。
在这里插入图片描述

  1. 差运算:即集合S1中有的而集合S2中没有的元素。
    在这里插入图片描述
  2. 笛卡尔积( × \mathbf{\times} ×):即笛卡尔积当中,会把两个参与笛卡尔积的集合的属性一一列举出来,成为笛卡尔积中最终的结果。前一部分是S1后一部分是S2。其实就是组合。
    注:笛卡尔积中的属性个数和是参与笛卡尔积的集合的属性个数之和,而实例是两个参与集合的实例之积。
    在这里插入图片描述
  3. 投影( π \pi π):投影是选列的操作。下图解释,对集合S1的Sno,Sname两列属性进行投影。
    在这里插入图片描述
  4. 选择( σ \sigma σ):选择是选列的操作。下图解释,对集合S1的属性Sno为No0003的行进行选择。
    在这里插入图片描述
    当然,投影和选择操作的列名和行名可以使用数字代替。如: π 1 , 2 ( S 1 ) {\pi}_{1,2}(S1) π1,2(S1) σ S n o = N o 0003 ( S 1 ) \sigma_{Sno=No0003}(S1) σSno=No0003(S1)
  5. 联结( ⋈ \Join ):一般联结操作下方写上联结的条件。比方说 ⋈ S 1. S n o = S 2. S n o \underset{S1.Sno=S2.Sno}{\Join} S1.Sno=S2.Sno
    有的时候,我们会发现联结符号下没有写条件,称为自然联结,那么自然联结的条件就是两个表中相同的字段做等值联结,不写条件的情况下默认就是 S 1. S n o = S 2. S n o S1.Sno=S2.Sno S1.Sno=S2.Sno
    联结跟笛卡尔积的区别:最大的区别就是联结会把S1、S2中相同的列只保留一个。
    在这里插入图片描述
    注意: π 1 , 2 , 4 ( S 1 ⋈ S 2 ) {\pi}_{1,2,4}(S1 \Join S2) π1,2,4(S1S2)就是对上图的Sno、Sname、Age列进行投影。而 π 1 , 2 , 5 ( S 1 × S 2 ) {\pi}_{1,2,5}(S1 \times S2) π1,2,5(S1×S2)就是对上图的S1.Sno、S1.Sname、S2.Age列进行投影。笛卡尔积没有去掉公共部分的列,而投影去掉了公共部分的列。

第五节.规范化理论

函数依赖

设 R ( U ) 是 属 性 U 上 的 一 个 关 系 模 式 , X 和 Y 是 U 的 子 集 , r 为 R 的 任 一 关 系 , 如 果 对 于 r 中 的 任 意 两 个 元 组 u , v , 只 要 有 u [ X ] = v [ X ] , 就 有 u [ Y ] = v [ Y ] , 则 称 X 函 数 决 定 Y , 或 称 Y 函 数 依 赖 于 X , 记 为 X → Y 。 设 R(U) 是属性 U 上的一个关系模式, X 和 Y 是 U 的子集, r 为 R 的任一关系, 如果对于 r 中 的任意两个元组 u, v , 只要有 u[X]=v[X] , 就有 u[Y]=v[Y] , 则称 X 函数决定 Y , 或称 Y 函数依赖于 X , 记为 X \rightarrow Y 。 R(U)U,XYU,rR,ru,v,u[X]=v[X],u[Y]=v[Y],XY,YX,XY

从数学方面来看,对于函数 f ( x ) = x 2 f(x)=x^2 f(x)=x2来说,给定一个 x x x的值,就能得到唯一确定的 f ( x ) f(x) f(x)的值。该函数只能够通过x确定y,不能通过y确定x。为什么?因为 y = 1 y=1 y=1对应的 x x x只存在两个值。
反过来从数据库方面来看, 学 号 ⟶ 姓 名 学号 \longrightarrow 姓名 表示根据学号能够确定唯一的一个姓名,而不能通过姓名确定学号。
在这里插入图片描述
图解:部分函数依赖就是组合键中部分键能够确认其它键。 ( 学 号 , 课 程 号 ) ⟶ 姓 名 (学号,课程号) \longrightarrow 姓名 ()表示学号和课程名能够确定姓名,与此同时,只有学号能够确定姓名。
传递函数依赖就是A确定B,B确定C,那么就能由A确定C。这里需要注意B不能确定A,如果B能够确定A,那么A和B等价,就不能说是传递的了。


价值与用途

非规范化的关系模式, 可能存在的问题包括:数据冗余、更新异常、插入异常、删除异常。
规范化理论想要做的事情就是存在的这些问题。
在这里插入图片描述
图注:数据冗余问题,DNO和DNAME冲突了,只需要DNO就行了,DNAME不需要。
更新异常,比方说改系名,就需要全部改掉,如果只改一部分出现更新异常了。
插入异常和删除异常后面会提到的。


在这里插入图片描述
数据库系统中的键包括:超键,候选键,主键,外键。
1.键:属性的集合
2.超键:唯一能够标识元组(实体,即数据库的一行)的键,可以是单个的属性,也可以是属性的组合。
3.候选键:是一种特殊的超键,它是在超键的基础上消除多余属性后的键,可以有多个。
求候选键步骤:
(1)将关系模式的函数依赖关系用“有向图”的方式表示。
(2)找入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能遍历图中所有结点,则该属性集即为关系模式的候选键。注:入度即为第一个只有指向箭头,没有被指箭头的属性。
(3)若入度为0的属性集不能遍历图中所有结点(或没有入度为0的属性),则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至该集合能遍历所有结点,该集合即为候选键。
4.主键:从候选键中选择一个作为主键。如学号和身份证号都能标识一个学生,而主键则是在两个属性集合之中则其一。
5.外键:外键是其他关系的主键,因为许多时候我们需要对表进行关联。也就是关联查询的时候使用。
在这里插入图片描述
解:例1选择A。因为就A1的入度为0并且能够遍历所有结点。例2的候选码是一个集合(ABCD)。例3中入度没有为0的结点,那么就尝试的找既有出度又有入度的中间结点,比如:B和A,然后都能遍历全部结点,那么R关系的候选关键字为A和B。


范式(NF)(必考)

在这里插入图片描述
注:所谓原子值就是该属性不能够拆分成其它属性。
1.范式:范式符号为NF;范式分为一级范式、二级范式、三级范式以及BC范式,当然还有更高的范式。随着范式等级的提高,规范程度就会越高,数据表的拆分也将越来越细,而数据表拆分过细会造成性能方面的问题,因此,我们通常对范式的等级采取折中的方式,即做到三级范式。
要达到第二范式就需要先达到第一范式。

2.第一范式(1NF):在关系模式R中,当且仅当所有域()只包含原子值,即每个分量都是不可再分的数据项,则称R是第一范式。
例:下表所示的关系R是否满足1NF,如果不满足,应如何调整?
将高级职称人数去除即可满足1NF。
在这里插入图片描述
3.第二范式(2NF):当且仅当R是1NF,且每一个非主属性完全依赖主键(不存在部分依赖)时,则称为第二范式。
思考题: 请思考该关系模式会存在哪些问题(从数据冗余、更新异常、揷入㫒常、删除 㫒常这几个方面来考虑),解决方案是什么?
数据冗余:比如说每一门课都有一个CREDIT(学分),故CNO和CREDIT之间的关系存储一个就可以了。
更新异常:我们要更新学分时不能更新一两条,需要更新同一科目的所有学分。
插入异常:比如说现在录入一门课程,只知道学号和学分 C o 8 ⟶ 6 Co8 \longrightarrow 6 Co86,但是录入不了,因为主键是SNO和CNO的集合,而系统是不让录的,因为学号是主键,主键不能为空。
删除异常:这一届学生毕业了,我们把学生信息全部清除,包括学分也一并清除,这就是删除异常。
解决方案就是将CNO和CREDIT提取出来做一个新的关系模式就行了。即重新构造一个表。
在这里插入图片描述
3.第三范式(3NF):当且仅当R是2NF,且E中没有非主属性传递依赖于码时,则称R是第三范式。
思考题: 请思考该关系模式会存在哪些问题(从数据冗余、更新异常、揷入异常、删 除异常这几个方面来考虑), 解决方案是什么?
单属性是不可能有部分函数依赖存在的,故该表达到了第二范式。
数据冗余:系名和系所在的位置都存在冗余。
更新异常:更新系名,系号和楼层也都需要更新,这期间就会出现异常。
插入异常:如果说没有学生到这个系来,需要新建一个系,那么就没办法插入这个系。
有插入异常,那么自然也有删除异常。
解决方案就是将DNO、DNAME、LOCATION独立出来构成一个关系模式即可,这样子就打破了传递依赖了,原来的关系模式就剩下前三个字段(SNO、SName、DNO)了。
在这里插入图片描述
4.BC范式(BCNF):设R是一个关系模式,F是它的(函数)依赖集,R属于BCNF当且仅当其F中每一个依赖的决定因素必定包含R的某个候选码。
例: 关系模式STJ(S, T, J)中, S表示学生, T表示老师, J表示课程。每一老师只 教一门课程。每门课程有若干老师, 某一学生选定某门课, 就对应一个固定老师。
SJ和ST都是候选键,这样子我们就能确定STJ都是主属性,没有非主属性。
R的依赖集有 S J ⟶ T 、 T ⟶ J SJ \longrightarrow T、T \longrightarrow J SJTTJ
R的关系模式中 S J ⟶ T SJ \longrightarrow T SJT依赖的决定因素为SJ包含在候选键中,而 T ⟶ J T \longrightarrow J TJ依赖的决定因素为T不包含在候选键中,故不满足BC范式。
在这里插入图片描述

范式练习题

在这里插入图片描述
(1)选择C,一开始我选择B,后来发现负责人和电话没有依赖关系。故已经消除了非主属性对码的部分函数依赖。
(2)(3)选择DA,目前来讲,部门号和职工号之间没有关联,我们无法看出哪些职工属于哪些部门,而职工与部门之间是一种多对一的关系,应该把关系保存在多的一端,故需要在职工表上加上部门号。月销售额是目前三个表无法表达的,部门号是没有必要添加的,因为表3中已经建立了部门号和职工号,而表2的商品号和商品名称也已经建立了联系,故选择A。


当范式级别不够时,我们可以通过分解关系模式来提高范式级别。
在分解的过程中需要遵循不同的机制和原则。

模式分解

模式的分解主要讲两个方面的分解要求。
1.保持函数依赖分解
所谓保持函数依赖分解,就是分解之前有哪些函数依赖,分解之后这些函数依赖仍然存在,这就叫保持函数依赖分解。当然,对于冗余性质的函数依赖不要求保留。
举例:
已知 R ( A , B , C ) R(A,B,C) R(A,B,C)存在两个函数依赖( A ⟶ B 、 B ⟶ C A \longrightarrow B、B \longrightarrow C ABBC),那么将关系模式拆分成 R 1 ( A , B ) 、 R 2 ( B , C ) R_{1}(A,B)、R_{2}(B,C) R1(A,B)R2(B,C),这时函数依赖还是 A ⟶ B 、 B ⟶ C A \longrightarrow B、B \longrightarrow C ABBC,这就叫保持函数依赖分解。如果将关系模式拆分成 R 1 ( A , B ) 、 R 3 ( A , C ) R_{1}(A,B)、R_{3}(A,C) R1(A,B)R3(A,C),这就不能拆分了。如果 R ( A , B , C ) R(A,B,C) R(A,B,C)的依赖中再添加一个函数依赖 A ⟶ C A \longrightarrow C AC,这是一个冗余的函数依赖,那么 R 1 ( A , B ) 、 R 2 ( B , C ) R_{1}(A,B)、R_{2}(B,C) R1(A,B)R2(B,C)依然成立。

2.无损分解
什么是有损,什么又是无损?
有损:不能还原。 无损:可以还原。
举例:
有损和无损不仅仅是在分解的时候需要使用,还有在压缩的时候使用。比方说平常对数据的压缩是比较常见的活动,因为原始数据会比较大,所以经过压缩之后存储空间能够得到更好的利用,故我们经常使用 R A R RAR RAR这种压缩包。
有损在生活中也应用的比较广泛,就是我们平常用到的图片格式 j p g jpg jpg,图片就用到了这种格式,这种格式就是对原始文件的有损压缩。从哪里可以看出是有损压缩呢?放大几倍的图片之后,你看到图片是糊的,而我们缩小数倍看到的就是清晰的图片了。

:无损联接分解:指将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的模式。


模式分解——例题讲解

在这里插入图片描述
图注:该分解是无损分解。“所以”表示表的联结操作。

判断是否满足无损分解的方法:

  1. 表格法:
    在这里插入图片描述
    图注:第一列表示分解后的关系模式,而第一行表示分解后关系模式的属性之和。a表示该模式拥有该属性,底数表示第几列;b表示该该模式不拥有该属性,底数表示第几行第几列。

根据 学 号 ⟶ 姓 名 学号 \longrightarrow 姓名 做联结操作,对上表进行处理,将 b 12 b_{12} b12改成符号a_{2};然后考虑 课 程 号 ⟶ 课 程 号 课程号 \longrightarrow 课程号 做联结操作,将 b 14 ⟶ a 4 b_{14} \longrightarrow a_{4} b14a4,得下表:
在这里插入图片描述
从上图中可以看出,第1行已全部为a,因此本次R分解是无损联接分解。

  1. 计算法,局限性比较强,只需所以说这种方法的局限性比较强,是因为只适用于一分为二的情况。
    在这里插入图片描述
    解: R 1 ∩ R 2 = A R 1 − R 2 = B R 2 − R 1 = C A → B  或  A → C  。  推 出 的 依 赖 关 系 中 还 原 了 R 的 依 赖 关 系 , 故 为 无 损 分 解 。 R 1 ∩ R 3 = B R 1 − R 3 = A R 3 − R 1 = C B → A  或  B → C  。  推 出 的 依 赖 关 系 中 没 有 还 原 了 R 的 依 赖 关 系 , 故 为 有 损 分 解 。 \begin{array}{lll} \mathrm{R}_{1} \cap \mathrm{R}_{2}=\mathrm{A} & \mathrm{R}_{1}-\mathrm{R}_{2}=\mathrm{B} & \mathrm{R}_{2}-\mathrm{R}_{1}=\mathrm{C} \\ \mathrm{A} \rightarrow \mathrm{B} \text { 或 } \mathrm{A} \rightarrow \mathrm{C} \text { 。 } & & 推出的依赖关系中还原了R的依赖关系,故为无损分解。\\ \mathrm{R}_{1} \cap \mathrm{R}_{3}=\mathrm{B} & \mathrm{R}_{1}-\mathrm{R}_{3}=\mathrm{A} & \mathrm{R}_{3}-\mathrm{R}_{1}=\mathrm{C} \\ \mathrm{B} \rightarrow \mathrm{A} \text { 或 } \mathrm{B} \rightarrow \mathrm{C} \text { 。 } & & 推出的依赖关系中没有还原了R的依赖关系,故为有损分解。 \end{array} R1R2=AAB  AC  R1R3=BBA  BC  R1R2=BR1R3=AR2R1=CRR3R1=CR

第六节.并发控制

首先了解事务是怎么一回事,其次在了解并发是怎么一回事,同时并发过程中可能产生一些什么样的问题,既然产生问题,那么就需要解决方案,有了解决方案又会产生新的问题。
在这里插入图片描述


事务

事务概念:把多个操作封装起来,将其看成一个整体来进行操作,可以便于并行并发的处理一些事情。
具有的特性:
(1)原子性:即事务的内容操作要么全部做,要么全不做。
(2)一致性:在事务执行之前,数据保持一致的状态,执行之后数据也是一致的状态。
(3)隔离性:事务之间的执行是独立进行的。
(4)持续性:事务执行之后,其结果造成的影响是持续的,即使数据库崩溃,其对数据库的更新操作也永久有效。
事务的提出使得我们在操作的过程中对很多操作能够更加好的去控制他们。但更多的时候是把事务作为并行执行的前提条件执行,便于并行并发的处理一些事情。


并发以及并发存在的问题示例

并发概念:在关系数据库中,允许多个用户同时访问和更改共享数据的进程。SQL Server使用锁定以允许多个用户同时访问和更改共享数据而彼此之间不发生冲突。
并发并行带来的问题:
(1)丢失更新
在这里插入图片描述
图注:在两个事务中,T1执行的结果为5,T2执行的结果为2,我们想要得到的是A减5在减去8的结果,但是这里的最终结果为2,因为上一个事务执行的结果会被下一个执行的事务结果覆盖掉。
(2)不可重复读
在这里插入图片描述
图注:在T1运算中,求A与B的和时,为了提高准确率,程序会再次进行验算,但在第一次运算和第二次运算的间隙,将进行T2运算,T2运算的结果会将A与B的值进行覆盖,这将会产生死锁问题。
(3)读“脏”数据
所谓脏数据不是真正的数据,不是我们执行过程中真的应该产生的数据,只是一个临时值,这个值是真正没有起到作用的一个值。
在这里插入图片描述


封锁协议

  1. 一级封锁协议。事务T在修改数据R之前必须先对其加X(写锁或排他锁)锁,直到事务结束才释放。可防止丢失修改,该锁可以使得除了T以外的所有事务将不能访问R,而事务T则可以阅读或者修改R。
  2. 二级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S(读锁或共享锁)锁,读完后即可释放S锁。可防止丢失修改,还可防止读"脏"数据。该锁的作用是,所有的事务都可以访问R,但包括T在内的所有事务都不能修改R。
  3. 三级封锁协议。一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。可防止丢失修改,防止读"脏"数据与防止数据重复读
  4. 两段锁协议。可串行化(通过加锁解锁两个阶段使并发事务排队进行)的。可能发生死锁。

补充

  1. 如果事物T对数据加上X锁后,就只允许事务T读取和修改数据,其他事务对数据A不能再加任何锁,从而也不能读取和修改数据,直到事务T释放数据上的锁
  2. 如果事务T对数据加上了S锁后,事务T就只能读数据但不可以修改,其他事务可以再对数据A加S锁来读取,只要数据上有S锁,任何事务都只能再对其加S锁,而不能加X锁

第七节.数据库完整性约束

主要有三种约束:实体完整性约束、参照完整性约束、用户自定义完整性约束。这些约束的作用是提高数据的可靠性,如果数据存在问题,我们就不能将其录入进去。

  1. 实体完整性约束。即我们在使用数据库时,需要给数据表定义了主键。
  2. 参照完整性约束。即外键的完整性约束。如:我们设置了一个员工表,其中含有一个字段名(部门号),若部门号设置了参照完整性约束,参照表是部门表,则在员工表中填部门号时不能乱填,其内容必须是参照表的主键内容,若不是,则系统会报错。当然也允许为空。即外键的值要么是参照表中的值或者为空值。
  3. 用户自定义完整性约束。就是用户可以设置属性的值的情况和要求。如:属性“年龄”,用户可以自行设置“不能输入负数”、“不能输入两百岁以上的值”。
  4. 这三种约束不能够应对复杂的情况,那么这个时候就有一种新的机制——触发器。它可以通过写脚本来约束数据库,用来设置更为复杂的约束。

第八节.数据库安全

在数据库领域应用安全性的一些措施来提高数据库的安全性。
在这里插入图片描述


第九节.数据备份

数据备份按备份方式可分为热备份和冷备份;按备份的量可分为 完全备份、差量备份、增量备份。

冷备份与热备份

1.冷备份也称静态备份,是将数据库正常关闭,在停止状态下,将数据库的文件全部备份(复制)下来。因为数据库是为应用提供服务的,如果你把数据库关闭意味着所有应用也应该暂停,接下来直接拷贝文件就行了。

2.热备份也称动态备份,是利用备份软件,在数据库正常运行的状态下,将数据库中的数据文件备份出来。
在这里插入图片描述

完全备份、差量备份、增量备份

1.完全备份:备份整个数据库的内容

2.差量备份:仅备份上一次完全备份之后变化的数据(可以解决增量备份可能出现的错误)

3.增量备份:备份上一次备份之后变化的数据。增量备份速度很快,因为它就针对上一个版本把变化的量保存起来。
举例说明差量备份和增量备份的区别:

如果周三出现故障,我们需要恢复周日、周一、周二、周三备份。如果周四出现故障,我们只需要恢复周日和周四备份即可。所以差量和增量备份有机结合形成整体的方案是有利于进行备份和恢复的。

四种转储方式

转储其实就是在做备份,就是我们将数据从一个地方转到另一个地方存储起来。
1.静态海量转储:在系统中无事务运行时进行,每次转储全部数据库

2.静态增量转储:在系统中无事务运行时进行,每次只转储上一次转储后更新过的数据

3.动态海量转储:转储期间允许对数据库进行存取或修改,每次转储全部数据库

4.动态增量转储:转储期间允许对数据库进行存取或修改,每次只转储上一次转储后更新的内容

日志文件。事务日志是针对数据库改变所做的记录,它可以针对数据库的任何操作(如插入,更新),并将记录结果保存在独立的文件中。
为什么会有日志文件这个概念呢?
做了完全备份、增量备份、差量备份还是不能保证系统出现故障后仍然不能保证找回所有数据。

数据库故障与恢复

数据库可能出现的故障与恢复办法。
在这里插入图片描述
图注:事务本身的可预期故障,可以通过回滚来解决的,也就是使用Rollback语句。


第十节.数据仓库与数据挖掘

数据仓库与数据挖掘这两种技术广泛的运用到非常流行的 商 业 智 能 ( B I ) \mathbf{商业智能(BI)} (BI)当中。这可以将是一种新瓶装老酒的一种做法,因为这两种技术是在20世纪提出来的,BI的核心技术就是数据仓库与数据挖掘。

数据仓库与数据库之间的联系
数据库是根据业务的需求,就是处理哪项业务需要记录哪些数据,我们就把它们记录并存储起来就形成了数据库。数据库出现之后发现很多应用系统都离不开数据库了。比如超市离不开收银员系统,收银员通过扫描商品的条码然后计算出商品的价格这些内容。像一个收银员系统往往建立起来之后,往往运行速度很快,但是运行一段时间之后,它的运行速度越来越慢,这是因为系统中积累的数据越来越多了,就导致整体的性能逐渐下降了,降到一定程度之后,用户就难以忍受难以这么低的效率这么慢的速度,在这种情况下,如何优化这些系统呢?简单的方式就是删除一些数据,因为对于收银员而言,除了当月的数据存在价值,之前的已经结算的数据没有太大的价值,因为他们用不到,当时优化的主流做法就是删除历史数据,这一删除引起了某些人的反思,这一删除比较可惜啊,虽然收银员用不上,但是对于企业决策它们是存在很多价值。我们就将其存放到另一个地方,一开始是存储到普通的数据库中,后来发现这些数据存储到这里,从应用层面来讲,和不同业务系统存在很大差别,因为这些数据存储之后就不需要添加删除修改他们了,而是更主要的是大规模的查询统计这一块的,所以人们发现要对这样的数据库进行优化走的思路是不一样的,所以就将特殊的数据库提取出来了,提取出来后将这种数据库的名字起做数据仓库。
数据仓库的特点

  1. 首先它是面向主题的,而不是面向应用的,我们要分析商品这个主题,那么我们就会把商品这个主题抽取出来,把流水的一些销售数据提取出来。比如说在库存系统中提取库存,在采购系统中提取采购的一些信息等,按主题组合这些数据。一般的数据库都是按照业务(应用)组合数据。
  2. 特点二就是一般数据仓库会记录一些集成式的数据,比如说他们会将超市的日报表、周报表都存储下来。而普通的数据库不会这么干。
  3. 相对稳定性(非易失的)就是指存储的数据就不会做修改删除这些操作了。
  4. 反映历史变化(随着时间变化)就是指隔那么久会将一些数据导入进来。

数据仓库的建立的几个阶段
在这里插入图片描述
图注

  1. 数据源。首先是从数据源中去抽取(抽取数据是从不同的数据源中抽取出来的,可以是不同的业务系统,也可以是商业数据)、清理(清理数据就是做数据格式的统一,冗余数据的取出之类的)、装载(就是将数据放入到数据仓库中去)、刷新(定期的刷新数据就是往里面添加一些数据)数据。
  2. 数据仓库层次,其中存在数据集市,其实就是部门级的数据仓库,为什么要存在数据集市?是因为数据仓库的建立从企业全局来讲是一个风险很高的事情。那么我们分期分部来建,那么可能会低一些,所以就提出了数据集市,先建部门级的数据集市,建好了我们就整合形成部门级的数据仓库。
  3. OLAP服务器层次。所谓OLAP服务器就是联机分析处理服务器,它是做分析处理工作的。
  4. 最表层是数据的前端工具,前端工具有最为普通的查询工具、报表工具、分析工具还有比较独特的数据挖掘工具。数据挖掘工具之所以这么特殊是因为数据挖掘工具和查询报表的是有区别的,比方说查询报表工具往往是有非常明确的目标去做的,而数据挖掘工具这一块就不是这么明确,因为数据挖掘工具能够挖掘出人类所未知的事物和特性,挖到的信息能够运用在商业领域。比方说我们可以做饮料销量的挖掘,看什么地段的什么超市的饮料比较畅销。我们可以做一些老用户的数据分析和挖掘,看哪些用户的偏好和营销方案能够更加打动用户。

数据挖掘
数据挖掘往往会应用到一些方法。方法分为决策树、神经网络、遗传算法、关联规则挖掘算法。

数据挖掘方法的分类

  • 关联分析 : 挓掘出隐藏在数据间的相互关系。
  • 序列模式分析 : 侧重点是分析数据间的前后关系 (因果关系)。
  • 分类分析 : 为每一个记录赋予一个标记再按标记分类。
  • 聚类分析:分类分析法的逆过程。

第十一节.反规范化

为什么要做规范化的逆过程——反规范化呢?应了我们的一句老话“物极必反”。当初提出规范化是为了解决数据冗余、更新异常、插入异常、删除异常等问题。但是在规范化提高的过程中,就会遇到一些新的问题。
新的问题
由于规范化会使表不断的拆分,从而导致数据表过多。这样虽然减少了 数据冗余,提高了增、删、改的速度,但会增加查询的工作量。系统需要进行多次连接,才能进行查询操作,使得系统效率大大下降。
那么反规范化具体的技术手段有哪些呢?
增加派生性冗余列、增加冗余列、重新组表、分割表。

  • 增加派生性冗余列。现在为了查询方面,需要增加一些冗余列,比方说在一个订单当中,会有单价和数量,这明显可以计算出总额,但这个时候可以增加一个派生性的冗余列,把总额和总价写上,这样子也就避免了你要用到总数和总额时,你要去计算。这其实就是以空间换时间的思路去进行的。
  • 增加冗余列。比方说成绩表,成绩表只要学号、课程号、成绩这些信息,现在我们为了快速地查询到哪个人哪个成绩是多少分,就会把姓名和课程名写进去,查到的记录就能直接显示了,否则还要做两次关联查询才能将信息显示完整。
  • 重新组表。就是依据查询系统效率的原则来重新组表。
  • 分割表包括垂直分割和水平分割,也是从效率的角度来看是不是把一个表拆分成多个表,这样子拆分的速度更快一些。

所以反规范化就是查询效率这一块的内容。以牺牲一些空间以及规范程度为代价来提高查询的速度。


第十二节.大数据

大数据其实就是对海量数据处理的一些相关技术。
这些数据具有什么样的特点呢?
数据量极大,要求处理的速度要快,数据应该具有多样性,数据具有一定的价值。
那么我们接触到的大数据,比较多的是什么呢?
对于很多的不同类别的数据进行联合分析得到一些结论。比方说百度搜索引擎就是根据你平时浏览的信息给你推送一些网站广告。
为什么大数据相关的一些操作跟传统数据会存在一些区别?
其中一个很核心的原因就是大数据的数据量很大,关系极其复杂。这也就是量变引起质变,当量积累到一定程度之后,你再去处理这些数据用传统的方式就已经不适用了。而且大数据要求分析的细度比传统数据要高很多,所以大数据就需要借助集群平台去完成一系列的工作。
大数据处理系统应该具有的重要特征
高度可扩展性、高性能、高度容错 这三种特种集群系统都能够满足。
支持㫒构环境。就是分析起来要快,整体的性能要提高,同时成本还要低,所以现在的大数据往往是通过云计算、虚拟化等技术结合起来分析和探讨。即较短的分析延迟、易用且开放的接口、较低成本、向下兼容性。


第十三节.分布式数据库

分布透明性是指用户不必关心数据的逻辑分片,不必关心数据存储的物理位置分配细节,也不必关心局部场地上数 据库的数据模型。分布透明性包括分片透明性、位置透明性和局部数据模型透明性。

(1)分片透明性。分片透明性是分布透明性的最高层次,它是指用户或应用程序只对全局关系进行操作而不必考虑数据的分片。当分片模式改变时,只要改变全局模式到分片模式的映射,而不影响全局模式和应用程序。全局模式不变,应用程序不必改写。
(2)位置透明性。位置透明性是指用户或应用程序应当了解分片情况,但不必了解片段的存储场地。当存储场地改变时,只要改变分片模式到分配模式的映射,而不影响应用程序。同时,若片段的重复副本数目改变了,数据的冗余改变了,但用户不必关心如何保持各副本的一致性,这也提供了重复副本的透明性。
(3)局部数据模型透明性。局部数据模型透明性是指用户或应用程序应当了解分片及各片断存储的场地,但不必了解局部场地上使用的是何种数据模型。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值