13、数据库技术(重点、考点)
1、三级模式-两级映像(考点)
内模式:管理如何存储物理的数据,对应具体物理存储文件。
**模式:**又称为概念模式,就是我们通常使用的基本表,根据应用、需求将物理数据划分成一张张表。
**外模式:**对应数据库中的视图这个级别,将表进行一定的处理后再提供给用户使用。
**外模式-模式映像(逻辑上):**是表和视图之间的映射,存在于概念级和外部级之间,若表中数据发生了修改,只需要修改此映射,而无需修改应用程序。
**模式-内模式映像(物理上):**是表和数据的物理存储之间的映射,存在于概念级和内部级之间,若修改了数据存储方式,只需要修改此映射,而不需要去修改应用程序。
表:是行列组成,比如
年龄 | 性别 | 学历 |
---|---|---|
22 | 女 | 本科 |
25 | 男 | 硕士 |
27 | 女 | 博士 |
视图:是业务需要的通过 SQL 语句筛选、查询出来的表的数据的一部分,这部分正是业务需要的。即视图是表的一部分,比如业务需要知道表中女性员工的信息,于是得到:
年龄 | 性别 | 学历 |
---|---|---|
22 | 女 | 本科 |
27 | 女 | 博士 |
视图是一张假表,筛选、查询出来的临时表,修改此临时表,不会影响数据库中的表。
模式映像的目的是数据库数据修改后,业务/应用层数据不需要修改。即无论数据库数据怎么变,业务层的代码、SQL语句不需要变。因为数据库中的数据是频繁变动的。
2、数据库设计(考点、掌握)
需求分析:即分析数据存储的要求,产出物有数据流图、数据字典、需求说明书。
概念结构设计:就是设计E-R图,也即实体-联系图,与物理实现无关,说明有哪些实体,实体有哪些属性。
逻辑结构设计:将E-R图,转换成关系模式,也即转换成实际的表和表中的列属性,这里要考虑很多规范化的东西。
物理设计:根据生成的表等概念,生成物理数据库。
3、数据模型
关系模型是二维表的形式表示的实体-联系模型,是将实体-联系模型转换而来的,经过开发人员设计的;
概念模型是从用户的角度进行建模的,是现实世界到信息世界的第一抽象,是真正的实体-联系模型。
数据模型三要素(考过):数据结构(所研究的对象类型的集合)、数据操作(对数据库中各种对象的实例允许执行的操作的集合,比如增删改查)、数据的约束条件(一组完整性规则的集合,比如小于150)。
1、E-R 模型(必考)
用 E-R 图描述概念数据模型,世界是由一组称作实体的基本对象和这些对象之间的联系构成的。
在E-R模型中,使用
椭圆表示属性(一般没有)、
长方形表示实体、
菱形表示联系,联系的两端要填写联系类型,
示例如下图:
弱实体依赖于强实体,带两道杠的长方形就是弱实体,单纯的长方形就是强实体,部门经理也是员工,部门经理一定是员工,员工不一定是经理。
联系类型:1:1、1: * 、 * :*
两个以上实体型的联系:
教师使用了参考书来教授课程。
2、关系模型(重要)
关系模型中数据的逻辑结构是一张二维表,由行列组成。用表格结构表达实体集,用外键标识实体间的联系。如下图:
表的列称之为属性
表的行称之为元组
3、E-R模型转换为关系模型
E-R模型转换为关系模型:每个实体都对应一个关系模式;联系分为三种:
1:1 联系中,联系可以放到任意的两端实体中,作为一个属性(要保证1:1的两端关联),也可以转换为一个单独的关系模式;
1:N的联系中,联系可以单独作为一个关系模式,也可以在N端中加入1端实体的主键;
员工 部门 是典型的N:1
员工有(学号,姓名)属性
部门有(部门号,名称)属性
员工(N端) 部门(1端)
所以在N端中加入1端的实体的主键的意思就是:
员工(学号,姓名,部门号)
部门(部门号,名称)
即在员工(N端)加入了部门(1端)的实体的主键:部门号
这样就知道员工属于部门且属于哪个部门。这就体现了联系(属于)。
这就形成了关系模式的转换。
M:N的联系中,联系必须作为一个单独的关系模式,其主键是M和N端的联合主键。
家长、学生属于弱实体对强实体的依赖联系,而(学生、教师)、(学生、学院)、(教师、学院)都不是这样的依赖。
因为只有学生存在,其家长信息才会存在,否则单独的家长信息无意义。
4、关系代数(重点)
并:结果是两张表中所有记录数合并,相同记录只显示一次。
交:结果是两张表中相同的记录
差:S1-S2,结果是S1表中有而S2表中没有的那些记录。
笛卡尔积:S1*S2,产生的结果包括 S1 和 S2 的所有属性列,并且 S1 中每条记录一次和 S2 中所有记录组合成一条记录,最终属性列为 S1 + S2 属性列,记录数为 S1 * S2 记录数。
投影:实际是按条件选择某关系模式中的某列,列也可以用数字表示。
选择:实际是按条件选择某关系模式中的某条记录。(行)
上图中的选择条件可以为:S1 的 Sno = No0003,即
σ1 = No0003
上图中的投影条件可以为:S1 的 π1 & π2
自然连接的结果显示全部的属性列,但是相同属性列只显示一次,显示两个关系模式中属性相同且值相同的记录。
设有关系 R、S如下左图所示,自然连接结果如下右图所示:
5、函数依赖
给定一个 X,能唯一确定一个 Y,就称 X 确定 Y,或者说 Y 依赖于 X,例如 Y = X * X 函数。
函数依赖又可扩展以下两种规则:
部分函数依赖:A可确定C,(A,B)也可确定 C,(A,B)中的一部分(即A)可以确定C,称为部分函数依赖。
A 决定 B 的表示:A -> B
传递函数依赖:当 A 和 B 不等价时,A可确定B,B可确定C,则A可确定C,是传递函数依赖;若A和B等价,则不存在传递,直接就可确定C。
6、键与约束
超键:能唯一表示此表的属性的组合。
比如学生表有学号、姓名、年龄,那么学号是唯一标识的,所以(学号)、(学号、姓名)、(学号、年龄)、(学号、姓名、年龄)都是该表的超键。
候选键:超键中去掉冗余的属性,剩余的属性就是候选键。
即学生表中的(学号)就是候选键。
主键:任选一个候选键,即可作为主键。
即学生表中的(学号)就是主键。
外键:其他表中的主键。
比如学生表中的学院号,而学院号是学院表的主键。
主属性:候选键内的属性为主属性,其他属性为非主属性。
即学生表中的(学号)就是主属性。
比如学号、身份证号,学生表中的学号、身份证号都可以唯一标识,所以学号、身份证号也都是主属性。
实体完整性约束:即主键约束,主键值不能为空,也不能重复。
参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值,或者为空。
用户自定义完整性约束:**自定义表达式约束,**如设定年龄属性的值必须在0到150之间。
7、范式
1、第一范式 1NF
关系中的**每一个分量必须是一个不可分的数据项。**通俗的说,第一范式就是表中不允许有小表的存在。比如,对于如下的员工表,就不属于第一范式:
因为 薪资/月 是复合属性。所以不属于第一范式。
上图的表可以用(学号,课程号)来唯一区分每条记录。
2、第二范式 2NF
如果关系R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码(而不是部分函数依赖于),则R属于2NF。
完全函数依赖:
X->Y,X决定Y,则Y完全函数依赖于 X。
AB->C,AB 决定 C,且 A 或 B 都不能单独决定C,则 C 完全函数依赖于 AB。
部分函数依赖:AB->C,且A->C,且B->C,则 C 部分依赖于 AB。
通俗地说,2NF就是在1NF的基础上,表中的每一个非主属性不会依赖符合主键中的某一个列。(即每一个非主属性都被某个主属性决定)
按照定义,上面的学生表就不满足2NF,因为学号不能完全确定课程号和成绩(每个学生可以选多门课)。
将学生表分解为:
学生(学号,学生姓名,系编号,系名,系主任)
选课(学号,课程号,成绩)
则每张表均属于 2NF。
为什么这么拆呢?
因为学生决定了学号(学号是唯一标识),学生决定了学生姓名,学生决定了系号,进而学生决定了系主任。
因此这张学生表里,所有非主属性都被学生/学号所决定。
而选课表里,因为 学号、课程号共同决定了成绩,即学号、课程号都是主属性,非主属性 成绩 被 学号、课程号两列共同决定。
3、第三方式 3NF
在满足2NF的基础上,表中不存在非主属性对码的传递依赖。
继续上面的实例,学生关系就不属于3NF,因为学生无法直接决定系主任和系号,是由学号->系编号,再由系编号->系主任,系编号->系名,因此存在非主属性对主属性的传递依赖。
将学生表进一步分解为:
学生(学号,学生姓名,系编号)
系(系编号,系名,系主任)
选课(学号,课程号,成绩)
则每张表都属于3NF
4、BC 范式
BC 范式 BCNF,是指在第三范式的基础上进一步消除主属性对于码的部分函数依赖和传递依赖。
通俗的来说,就是**在每一种情况下,每一个依赖的左边决定因素都必然包含候选键,**如下:
候选关键字的求法:
根据依赖集,找出从未在右边出现过的属性,必然是候选键之一(候选键可以唯一标识),以该属性为基础,根据依赖集依次扩展,看能否遍历所有属性,将无法遍历的加入候选键中。
1、找出从未在右边出现过的属性:
AB->C,CD->B,右侧中 A、D 都未在右侧出现过,所以 A、D必是候选键之一。
2、看1得出的候选键能否推出其他所有属性:
得知 AB 才能推出 C,CD 才能推出 B,所以A、D 不能推出其他。所以还需要加关键字。
3、添加关键字:
比如这里加 B,则 AB 可以推出 C,已经得到所有了,所以 A、D、B 为候选关键字。
比如这里加 C,则 CD 可以推出B,已经得到所有了,所以 A、D、C 为候选关键字。
所以答案为:有2个候选关键字 ACD 和 ABD
候选关键字中的所有属性都是主属性:所以 A、B、C、D都是主属性,所以有 0个非主属性和4个主属性。
第二题:
第二范式:任何非主属性都完全依赖于任何一个候选码,不存在部分函数依赖。
第三范式:不存在非主属性对于候选码的传递依赖
BCNF:每一个依赖左边决定因素都包含候选键或候选键之一。
所以要先算出候选键:
1、右边未出现过的:E、M
2、E、M 可以推出所有键,且只有(E,M)可以推出,所以候选键为(E、M)
3、N完全依赖于E,但候选键为(E,M)所以部分依赖于(E,M),Q完全依赖于 EM,L 完全依赖于 M,但候选见我诶(E,M)所以部分依赖于(E,M)。所以没有达到第二范式。
4、所以只达到了第一范式,没有达到第二范式。
所以关系模式达到了第一范式,需要进行分解,因为存在冗余、修改操作的不一致性、插入和删除异常。
解题关键:
第二范式:没有部分依赖
第三范式:没有传递依赖
BCNF范式:左侧决定因素都在候选码之中
8、模式分解
范式之间的转换一般都是通过拆分属性,即模式分解,将具有部分函数依赖和传递依赖的属性分离出来,来达到一步步优化,一般分为以下两种:
-
保持函数依赖分解:
对于关系模式R,有依赖集F,若对R进行分解,分解出来的多个关系模式,保持原来的依赖集不变,则为保持函数依赖的分解。另外,注意要消除掉冗余依赖(如传递依赖)。
-
实例:设原关系模式R(A,B,C),依赖集F(A->B,B->C,A->C),将其分解为两个关系模式R1(A,B)和R2(B,C),此时R1中保持依赖A->B,R2保持依赖B->C,说明分解后的R1和R2是保持函数依赖的分解,因为A->C这个函数依赖实际是一个冗余依赖,可以由前两个依赖传递得到,因此不需要管。
U1={A,B},保持了 A->B的依赖;但没有保持B->C的依赖;
所以不保持函数依赖;
1、无损分解
无损分解:分解后的关系模式能够还原出原关系模式,就是无损分解,不能还原就是有损。
当分解为两个关系模式,可以通过以下定力判断是否无损分解:
定理:如果R的分解为p={R1,R2},F 为 R 所满足的函数依赖集合,分解p具有无损连接性的充分必要条件式R1∩R2->(R1-R2) 或者 R1∩R2->(R2-R1) .
当分解为**三个及以上关系模式时,可以通过表格法求解,**如下:
1、右边未出现过的:C、D
2、C、D 可以推出所有,候选键为 (C、D)
连接性:
R1∩R2->(R1-R2) :
R1∩R2 = ABCE ∩ CD = C
R1-R2 = ABCE - CD = ABE
C -> ABE ? 可以得到 C 是推不出来 ABE的
R1∩R2->(R2-R1)
R2-R1 = CD-ABCE = D
C -> D? C 也推不出来D
所以是有损连接。
函数依赖:
ABCE 保持了 A->E、AC->B、B->A,但没有保持 D->A,所以不保持函数依赖。
所以答案是:不具有无损连接性,也不保持函数依赖。
9、并发控制(不难)
事务:由系列操作组成,这些操作,要么全做,要么全不做,拥有四种特性,详解如下:
(操作)原子性:要么全做,要么全不做。比如做了查询等,突然断电了,则已经做的就全都撤销。
(数据)一致性:事务发生后数据是一致的,例如银行转账,不会存在A账户转出,但是B账户没收到的情况。
(执行)隔离性:任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的,不同事务之间是隔离的,互不干涉。
(改变)持续性:事务操作的结果是持续性的。
事务是并发控制的前提条件,并发控制就是控制不同的事务并发执行,提高系统效率,但是并发控制中存在下面三个问题:
丢失更新:对一个数据进行更新,但最后丢失了。比如 T1 修改数据1,但T2先修改了数据1,T1修改的数据后发现修改后的结果不对。
**不可重复读:**事务1读A,但事务2对A修改了并保存了,事务1再读A,发现数据不对。
**读脏数据:**事务1修改了数据A,事务2读取数据A,而后事务1回滚,数据A恢复了原来的值,此时事务2对数据A做的事是无效的,读到了脏数据。
1、封锁协议
X锁是排它锁(写锁)。若事务T对数据对象A加上X锁,则只允许T读取和修改A,**其他事务都不能再对A加任何类型的锁,**直到T释放A上的锁。
**S锁是共享锁(读锁)。**若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁(也即能读不能修改),直到T释放A上的S锁。
共分为三级封锁协议,如下:
一级封锁协议:事务再修改数据R之前必须先对其加X锁,直到事务结束才释放。可解决丢失更新问题。
二级封锁协议:一级封锁协议的基础上加上事务T在读数据R之前必须先对其加S锁,读完后即可释放S锁。可解决丢失更新、读脏数据问题。
三级封锁协议:一级封锁协议加上事务T在读取R之前先对其加S锁,直到事务结束才释放。可解决丢失更新、读脏数据、数据重复读的问题。
即:写数据前加写锁(X锁),读数据前加读锁(S锁)。
也即需要写就加写锁,需要读就加读锁。
ROLLBACK:就是恢复到没有加锁的原始状态。
10、数据库安全(了解即可,考的不多)
措施:用户标识和鉴定、存取控制、密码存储和传输、视图的保护、审计(使用一个专用文件或数据库,自动将用户对数据库的所有操作记录下来)
静态转储:即冷备份。指在转储期间不允许对数据库进行任何存取、修改操作;优点是非常快速的备份方法、容易归档(直接物理复制操作);确定是只能提供某一时间点上的恢复,不能做其他工作,不能按表或按用户恢复。
动态转储:即**热备份。**在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可并发执行;优点是可在表空间或数据库文件级备份,数据库仍可使用,可达到秒级恢复;缺点是不能出错,否则后果很严重,若热备份不成功,所得结果几乎全部无效。
1、分布式数据库
局部数据库位于不同的物理位置,使用一个全局DBMS将所有局部数据库联网管理,这就是分布数据库。
分片模式:
水平分片:将表中水平的记录分别存放在不同的地方。
垂直分屏:将表中垂直的列值分别存放在不同的地方。
分布透明性:
分片透明性:用户或应用程序不需要知道逻辑上访问的表具体是如何分块存储的。
位置透明性:应用程序不关心数据存储物理位置的改变。
逻辑透明性:用户或应用程序无需知道局部使用的是哪种数据模型。
复制透明性:用户或应用程序不关心复制的数据从何而来。
2、数据仓库技术
数据仓库时一个面向主题的、集成的、非易失的、且随时间变化的数据集合,用于支持管理决策。
**面向主题:**按照一定的主题域进行组织的。
**集成的:**数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致性的全局信息。
**相对稳定的:**数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
**反映历史变化:**数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
数据仓库的结构通常包含四个层次:(经常考、需要记住)
**1、数据源:**是数据仓库系统的基础,是整个系统的数据源泉。
**2、数据的存储与管理:**是整个数据仓库系统的核心。
**3、OLAP(联机分析处理)服务器:**对分析需要的数据进行有效集成,按多维模型组织,以便进行多角度、多层次的分析,并发现趋势。
**4、前端工具:**主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库货数据集市的应用开发工具。
3、BI(商业智能):数据仓库技术的应用
BI 系统主要包括数据预处理、建立数据仓库、数据分析和数据展现四个主要阶段。
数据预处理时整合企业原始数据的第一步,它包括数据的抽取(Extraction)、转换(Transformation)和加载(Load)三个过程(ETL)。
建立数据仓库则是处理海量数据的基础。
数据分析时体现系统智能的关键,一般采用联机分析处理(OLAP)和数据挖掘两大技术。联机分析处理不仅进行数据汇总/聚集,同时还提供切片、切块、下钻、上卷和旋转等数据分析功能,用户可以方便地对海量数据进行多维分析。数据挖掘的目标则是挖掘数据背后隐藏的知识,通过关联分析、聚类和分类等方法建立分析模型,预测企业未来发展趋势和将要面临的问题;
在海量数据和分析手段增多的情况下,数据展现则主要保障系统分析结果的可视化。
4、反规范化技术(了解即可,考的不多)
反规范化技术:规范化设计后,数据库设计者希望牺牲部分规范化来提高性能。
采用反规范化技术的益处:降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,能够提高查询效率。(具体操作上:比如规范情况下分为了五张表;反规范情况下将五张表合并成一张表等)
可能带来的问题:数据的重复存储,浪费了磁盘空间;可能出现数据的完整性问题,为了保障数据的一致性,增加了数据维护的复杂性,会降低修改速度。
具体方法:
(1)增加几余列:在多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作。
(2)增加派生列: 在表中增加可以由本表或其它表中数据计算生成的列,减少查询时的连接操作并避免计算或使用集合函数。
(3)重新组表:如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
(4)水平分割表:根据一列或多列数据的值,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。
(5)垂直分割表:对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中,在查询时减少I/O次数。
5、大数据
特点:大量化、多样化、价值密度低、快速化。
大数据和传统数据的比较如下:
比较维度 传统数据 大数据
数据量 GB或TB级 PB级或以上
数据分析需求 现有数据的分析与检测 深度分析( 关联分析、回归分析 )
硬件平台 高端服务器 集群平台
要处理大数据,一般使用集成平台,称为大数据处理系统,其特征为:
高度可扩展性、高性能、高度容错、支持异构环境、较短的分析延迟、易用且开放的接口、较低成本、向下兼容性。
“啤酒和尿布”的故事:全球零售业巨头沃尔玛对顾客的行为分析发现,年轻的父亲在购买婴儿尿片的时候,经常会购买几瓶瓶酒犒劳犒劳自己,于是店员便将啤酒和尿布这两款完全风马牛不相及的产品放到了一起,作为促销手段。没想到,这个小小的改变却让两种产品的销量都大大提高。
日志文件:只记录操作,不记录数据。
数据文件:记录数据。
11、SQL 语言
下图需要掌握:(考点)
GROUP BY 是跟 SELECT 中的内容对应的,比如 SELECT 零件号,ADV(库存量) as 平均库存量,则后面的 GROUP BY 后面的一定是 零件号,即 SELECT 中可用于分组的内容。
SELECT 中有 AVG、MAX、MIN 等,则后面一定是 GROUP BY,而不会是 ORDER BY。