作者:Gakki
考点
- 三级模式 - 两级映像
- 数据库设计
- E - R模型
- 关系模型
- 关系代数的运算
- 规范化基础
- 函数依赖
- 键与约束
- 范式
- 模式分解
- 开发控制
- 数据库安全
- 分布式数据库
- 数据仓库
- 反规范化技术
- 大数据
- SQL 语言
1、数据库系统 DBS
-
是一个采用了数据库技术,有组织地、动态地存储大量相关数据,方便多用户访问的计算机系统。由四个部分组成:
- 数据库:统一管理、长期存储在计算机内的,有组织的相关数据的集合;
- 硬件:构成计算机系统包括存储数据所需的外部设备;
- 软件:操作系统、
数据库管理系统及应用程序;
- 人员:系统分析和数据库设计人员、应用程序员、最终用户、
数据库管理员DBA。
-
数据库管理系统DBMS功能
-
DBMS即DBS中的软件之一,具有以下功能:
- 实现对共享数据有效的组织、管理和存取;
- 包括数据定义、数据库操作、数据库运行管理、数据的存储管理、数据库的建立和维护等。
1.1、三级模式 - 两级映像
-
三级模式:
- 内模式:管理如何存储物理的数据,对应具体物理存储文件。物理级数据库(内模式)是可观存在的,是进行数据库操作的基础;(物理)
- 模式:又称为概念模式,通常指使用的基本表,根据应用,需求将物理数据划分成一张张的数据表。概念级数据库,是物理数据库的中逻辑、抽象的描述;
- 外模式:对应数据库中的视图这个级别,将表进行一定的处理后在提供给用户使用。用户级数据库时用户与数据库的接口,是概念级数据库的一个子集。(逻辑)
-
两级映像:
- 外模式 - 模式映像:是表和视图之间的映射,存在于概念级和外部级之间,若表中数据发生了修改,只需要修改此映射,而无需修改应用程序;
- 模式 - 内模式映像:是表和数据的物理存储之间的映射,存在于概念级和内部级之间,若修改了数据存储方式,只需要修改此映射,而不需要去修改应用程序;
![](https://img.haomeiwen.com/i19189112/3b8fa23bbdbd84ed.png)
1.2、数据库设计
- 需求分析:分析数据存储的要求,
产出物有数据流图,数据字典、需求说明书
。 - 概念结构设计:就是设计E - R图,实体-属性图,与物理实现无关,说明有哪些实体,实体有哪些属性
- 逻辑结构设计:将 ER 图,转换成关系模式,也即转换成实际的表和表中的列属性,这里要考虑很多规范化的东西
- 物理设计:根据生成的表等概念,生成物理数据库
![](https://img.haomeiwen.com/i19189112/367f518bc1469754.png)
1.3、E - R模型
- 数据模型三要素:数据结构(所研究的对象类型的集合)、数据操作(对数据库中各种对象的实例允许执行的操作的集合)、数据的约束条件(一组完整性规则的集合)。
- E-R模型:即实体-联系模型,使用椭圆表示属性(一般没有),长方形表示实体,菱形表示联系、联系两端要标志联系类型。
- 联系类型:一对一1:1、一对多1:n、多对多m:n。
- 属性分类:简单属性和复合属性(属性是否可以分割)、单值属性和多值属性(属性有多个取值),Null 属性(无意义)、派生属性(可由其他属性生成)。
![](https://img.haomeiwen.com/i19189112/16b4be676e5cc8eb.png)
1.4、关系模型
- 关系模型也即数据库中常用的表,包括实体的属性,标识出实体的主键和外键,如下:
![](https://img.haomeiwen.com/i19189112/a8672d969bbb096f.png)
- E - R 模型转换为关系模型:每个实体都对应一个关系模式;联系分为三种:
- 1:1 的联系中,联系可以放到任意的两端实体,作为一个属性(要保证 1:1 的两端关联);
- 1:N 的联系中,联系可以单独作为一个关系模式,也可以在 N 端中加入 1 端实体的主键;
- M:N 的联系中,联系必须作为一个单独的关系模式,其主键是 M 和 N 段的联合主键。
1.5、关系代数运算
- 并:结果是两张表中所有记录数合并,相同记录只显示一次
- 交:结果是两张表中相同的记录
- 差 S1 - S2,结果是 S1 表中有而 S2 表中没有的那些记录
![](https://img.haomeiwen.com/i19189112/43444e6f61daf38d.png)
- 笛卡尔积:S1 * S2,产生的结果包括 S1 和 S2 的所有属性列,并且 S1 中每条记录依次和 S2 所有记录组合成一条记录,最终属性列为 S1+S2 属性列,记录数为 S1 * S2 记录数。
- 投影:实际是按条件选择某关系模式中的
某列,列也可以用数字表示。
- 选择:实际是按条件选择某关系模式中的
某条件记录。
![](https://img.haomeiwen.com/i19189112/a6b3899e2d21f18c.png)
-
自然连接
:自然连接的结果显全部的属性列,但是相同属性列只显示一次,显示两个关系模式中属性相同且值相同的记录。 - 设有关系 R、S 如图 1 所示,自然连接结果如图 2 所示。
![](https://img.haomeiwen.com/i19189112/915ec0817f94d826.png)
![](https://img.haomeiwen.com/i19189112/77c1a6a37425067d.png)
1.6、函数依赖
- 给定一个 X,能唯一确定一个 Y,就称 X 确定 Y,或者说 Y 依赖于 X ,例如 Y = X * X 函数。
- 函数依赖又可扩展以下两种规则:
- 部分函数依赖:A 可确定 C,(A,B) 也可确定 C,(A,B) 中的一部分 (即 A )可以确定 C,称为部分函数依赖。
- 传递函数依赖:当 A 和 B 不等价时,A 可确定 B,B 可确定 C,则 A 可确定 C,是传递函数依赖;若 A 和 B 等价,则不存在传递,直接就可确定 C。
![](https://img.haomeiwen.com/i19189112/60628aac664aa50f.png)
1.7、键与约束
- 超键:能够唯一标识出此表属性的组合。
- 候选键:超键中去掉冗余的属性,剩余的属性就是候选键。
- 主键:任选一个候选键,即可作为主键。
- 处键:其他表中的主键。
- 主属性:候选键内的属性为主属性,其他属性为非主属性
- 实体完整性约束:即主键约束,主键值不能为空,也不能重复。
- 参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值,或者为空
- 用户自定义完整性约束:自定义表达式约束,如设定年龄属性的值必须在0到150之间。
1.8、范式
1.8.1、第一范式1NF
- 第一范式1NF:所有属性都不可以再分割为两个或多个分量。
- 关系中每一个分量必须是一个不可分的数据项。通俗地说:第一范式就是表中不允许有小表的存在。比如:对于如下的员工表,就不属于第一范式:
![](https://img.haomeiwen.com/i19189112/556bb5baefc4165d.png)
- 实例:用一个单一的关系模型学生来描述学校的教务系统:学生(学号、学生姓名、系号、系主任姓名、课程号、成绩)
![](https://img.haomeiwen.com/i19189112/b0c64f22d5aed86a.png)
- 主键:(学号,课程号)
- 依赖关系():学号 --> 学生姓名;学号 --> 系号;系号 --> 系主任姓名;学号 --> 课程号;(学号,课程号) --> 成绩。
1.8.2、第二范式 2NF
-
第二范式 2NF:如果关系 R 属于 1NF,且每一个非主属性
完全函数
依赖于任何一个候选码,则 R 属于 2NF。
注:只是依赖其中某个候选码就不属于 2NF。 -
通俗地说,2NF 就是在 1NF 地基础上,表中的
每一个非主属性不会依赖复合主键中的某一个列。
-
按照定义,上面的学生表就不满足 2NF,因为学号不能完全确定课程号和成绩(每个学生可以选多门课)。
-
将学生表分解为:
- 学生(学号【主键】,学生姓名,系编号,系名,系主任)。(学号 --> 系编号 --> 系名 / 系主任,属于传递依赖,见 3NF)
- 选课(学号【主键】,课程号,成绩)
- 每张表均属于 2NF。
1.8.3、第三范式 3NF
- 第三范式 3NF:在满足 2NF 的基础上,表中不存在非主属性对码的
传递依赖
。 - 继续上面的实例,学生关系模式就不属于 3NF,因为学号无法直接决定系主任和系名,是由学号 --> 系编号,再由系编号 --> 系主任,系编号 --> 系名。因此存在非主属性对主属性的传递依赖。
- 将学生表进一步分解为:
- 学生(学号,学生姓名,系编号)
- 系(系编号,系名,系主任)
- 选课(学号,课程号,成绩)
- 每张表都属于 3NF。
1.8.4、BC 范式
- BC 范式 BCNF,是指在第三范式的基础上进一步消除主属性对于候选码的部分函数依赖和传递依赖,
- 判别法:通俗的来说,就是在每一种情况下 ,每一个依赖的左边决定因素都必然包含候选键。如下:
![](https://img.haomeiwen.com/i19189112/be8c93f2f07c3ef4.png)
- 上图中,候选键有两种情况:组合键(S,T)或者(S,J),依赖集为{SJ-T,T-J},可知,STJ 三个属性都是主属性,因此其达到了 3NF (无非属性),然而,第二种情况,即(S,J)为候选键的时候,对于依赖 T --> J,T 在这种情况下不是候选键,即 T --> J 的决定因素不包含任何候选码,因此上图不是 BCNF。
- 要使上图关系模式转换为 BCNF 也很简单,只需要将依赖 T --> J 变为 TS --> J 即可。这样其左边决定因素就包含了候选键之一 S。
1.9、模式分解
-
范式之间的转换一般都是通过拆分属性,即模式分解,将具有部分函数依赖和传递依赖的属性分离出来,达到一步步优化,一般分为以下两种:
- 保持函数依赖
- 对于关系模式 R,偶依赖集 F,若对 R 进行分解,分解出来的多个关系模式,保持原来的依赖集不变,则为保持函数依赖的分解,另外,注意要消除冗余依赖(传递依赖)。
-
实例:设原关系模式 R(A,B,C),依赖集 F(A --> B,B --> C,A --> C),将其分解为两个关系模式 R1(A,B)和 R2(B,C),此时 R1 中保持依赖 B --> C,R2 保持依赖 B --> C,说明分解后的 R1 和 R2 是保持函数依赖的分解,因此 A --> C 这个函数依赖实际是一个冗余依赖,可以由前两个依赖传递得到,因此不需要管。
-
无损分解:分解后的关系模式能够还原出原关系模式,就是无损分解,不能还原就是有损。可以通过表格法求解,如下:
![](https://img.haomeiwen.com/i19189112/1f61a5b1418dbc44.png)
![](https://img.haomeiwen.com/i19189112/efb32d33fce4c3f4.png)
![](https://img.haomeiwen.com/i19189112/dc43f6b411136a5f.png)
- 当分解为两个关系模式,除了表格法外,还可以通过定理判断。
- 定理:如果 R 的分解为 P={R1,R2},F 为 R 所满足的函数依赖集合,分解 P 具有无损连接性的充分必要条件 R1∩R2 --> (R1-R2) 或者 R1∩R2 --> (R2-R1)。
1.10、事务管理
- 事务提交 commit,事务回滚 rollback.
- 事务:由一系列操作组成,这些操作,要么全做,要么全不做,拥有四种特性,详解如下:
- (操作)原子性:要么全做,要么全不做。
- (数据)一致性:事务发生后数据是一致的,例如银行转账,不会存在A账户转出,但是B账户没收到的情况。
- (执行)隔离性:任一事务的更新操作直到其成功提交的整个过程对其他事务都是不可见的,不同事务之间是隔离的,互不干涉。
- (改变)持续性:事务操作的结果是持续性的。
1.10.1、 并发控制
- 事务是并发控制的前提条件,并发控制就是控制不同的事务并发执行,提高系统效率,但是并发控制中存在下面三个问题:
- 丢失更新:事务 1 对数据 A 进行了修改并写回,事务 2 也对 A 进行了修改并写回,此时事务 2 写回的数据会覆盖事务 1 写回的数据,就丢失了事务 1 对 A 的更新。即对数据 A 的更新会被覆盖。
- 不可重复读:事务 2 读 A ,而后事务 1 对数据 A 进行了修改并写回,此时若事务 2 再读 A ,发现数
据不对。即一个事务重复读 A 两次,会发现数据 A 有误。 - 读脏数据:事务 1 对数据 A 进行了修改后,事务 2 读数据 A ,而后事务 1 回滚,数据 A 恢复了原来
的值,那么事务 2 对数据 A 做的事是无效的,读到了脏数据。
![](https://img.haomeiwen.com/i19189112/d3b712f945b55bfb.png)
1.10.2、 封锁协议
-
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 锁,直到事务结束才释放。可解决丢失更新、读脏数据、数据重复读问题。
1.11、数据库安全
1.11.1、安全措施和级别
措施 | 说明 |
---|---|
用户标识和鉴定 | 最外层的安全保护措施,可以使用用户账号、口令及随机数检验等方式 |
存取控制 | 对用户进行授权,包括操作类型(如查找、插入、删除、修改等动作)和数据对象(主要是数据范围)的权限 |
密码存储和传输 | 对远程终端信息用密码传输 |
视图的保护 | 对视图进行授权 |
审计 | 使用一个专用文件或数据库,自动将用户对数据库的所有操作记录下来 |
1.11.2、数据故障
故障关系 | 故障原因 | 解决方法 |
---|---|---|
事务本身的可预期故障 | 本身逻辑 | 咋程序中预先设置Rollback语句 |
事务本身的不可预估故障 | 算术溢出、违反存储保护 | 由DBMS的恢复子系统通过日志,撤销事务对数据库的修改,回退到事务初始状态 |
系统故障 | 系统停止运转 | 通常使用检查点法 |
介质故障 | 外存被破坏 | 一般使用日志重做业务 |
1.11.3、数据库备份
-
静态转储:即冷备份,指在转储期间不允许对数据库进行任何存取、修改操作。
- 优点是非常快速的备份方法、容易归档(直接物理复制操作)。
- 缺点是只能提供到某一时间点上的恢复,不能做其他工作,不能按表或按用户恢复。
-
动态转储:即热备份,在转储期间允许对数据库进行存取、修改操作,因此,转储和用户事务可并发执行。
- 优点是可在表空间或数据库文件级备份,数据库扔可使用,可达到秒级恢复。
- 缺点是不能出错,否则后果严重,若热备份不成功,所得结果几乎全部无效。
-
完全备份:备份所有数据。
-
差量备份:仅备份上一次完全备份之后变化的数据。
-
增量备份:备份上一次备份之后变化的数据。
-
日志文件:在事务处理过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入 日志文件。一且发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。
1.12、分布式数据库
- 局部数据库位于不同的物理位置,使用一个全局 DBMS 将所有局部数据库联网管理,这就是分布式数据库。其体系结构如下图所示:
![](https://img.haomeiwen.com/i19189112/5dd8b9769ec74b7f.png)
-
分片模式
- 水平分片:将表中水平的记录分别存放在不同的地方。
- 垂直分片:将表中的垂直的列值分别存放在不同的地方。
-
分布透明性
- 分片透明性:用户或应用程序不需要知道逻辑上访问的表具体是如何分块存储的。
- 位置透明性:应用程序不关心数据存储物理位置的改变。
- 逻辑透明性:用户或应用程序无需知道局部使用的是哪种数据模型。
- 复制透明性:用户或应用程序不关心复制的数据从何而来。
1.13、数据仓库
-
数据仓库是一种特殊的数据库,也是按数据库形式存储数据的,但是目的不同:数据库经过长时间的运行,里面的数据会保存的越来越多,就会影响系统运行效率,对于某些程序而言,很久之前的数据并非必要的,因此,可以删除掉以减少数据,增加效率,考虑到删除这些数据比较可惜,因此,一般都将这些数据从数据库中提取出来保存到另外一个数据库中,称为数据仓库。
-
由此,可知,数据仓库的目的不是为了应用,是
面向主题的
,用来做数据分析,集成不同表,
而且是相对稳定
的,一般不会做修改,同时会在特定的时间点,做大量的插入,反映历史的变化。
-
依据上述,可以提炼出数据仓库的形成过程,如下图所示:
![](https://img.haomeiwen.com/i19189112/21777c5851e002f2.png)
1.13.1、数据挖掘
-
由上图可知,形成数据仓库后,有两个作用,一个是用来做数据的查询、分析、生成报表。另一个是使用数据挖掘工具对这些历史数据进行挖掘,查找数据间的关系,发现剩余价值。
-
数据挖掘的分析方法:
- 关联分析:关联分析主要用于发现不同事件之间的关联性,即一个事件发生的同时,另一个事件也经常发生。
- 序列分析:序列分析主要用于发现一定时间间隔内接连发生的事件,这些事件构成一个序列,发现的序列应该具有普遍意义。
- 分类分析:分类分析通过分析具有类别的样本特点,得到决定样本属于各种类别的规则或方法。分类分析时首先为每个记录赋予一个标记(一组具有不同特征的类别),即按标记分类记录,然后检查这些标定的记录,描述出这些记录的特征。
- 聚类分析:聚类分析是根据“物以类聚”的原理,将本身没有类别的样本聚集成不同的组,并且对每个这样的组进行描述的过程。
1.13.2、商业智能
-
BI 系统主要包括数据预处理、建立数据仓库、数据分析和数据展现四个主要阶段。
-
数据预处理是整合企业原始数据的第一步,它包括数据的抽取(Extraction) 、转换(Transformation)和加载(Load) 三个过程(ETL过程)。
-
建立数据仓库则是处理海量数据的基础。
-
数据分析是体现系统智能的关键,一般采用联机分析处理(OLAP) 和数据挖掘两大技术。联机分析处理不仅进行数据汇总/聚集,同时还提供切片、切块、下钻、上卷和旋转等数据分析功能,用户可以方便地对海量数据进行多维分析。数据挖掘的目标则是挖掘数据背后隐藏的知识,通过关联分析、聚类和分类等方法建立分析模型,预测企业未来发展趋势和将要面临的问题。
-
在海量数据和分析手段增多的情况下,数据展现则主要保障系统分析结果的可视化。
1.14、反规范化技术
- 由前面介绍可知,规范化操作可以防止插入、更新、删除异常和数据冗余,一般是通过模式分解,将表拆分,来达到这个目的。
- 但是表拆分后,解决了上述异常,却不利于查询,每次查询时,可能都要关联很多表,严重降低了查询效率,因此,有时候需要使用反规范化技术来提高查询效率。
- 技术手段包括:增加派生性冗余列,增加冗余列,重新组表,分割表。
- 主要就是增加冗余,提高查询效率,为规范化操作的逆操作。
1.15、大数据
- 特点:大量化、多样化、价值密度低、快速化。
- 大数据和传统数据的比较如下:
比较维度 | 传统数据 | 大数据 |
---|---|---|
数据量 | GB或TB | PB或以上 |
数据分析需求 | 现有数据分析与检测 | 深度分析(关联分析、回归分析) |
硬件平台 | 高端服务器 | 集群平台 |
- 要处理大数据,一般使用集成平台,称为大数据处理系统,其特征为:
- 高度可扩展性、高性能、高度容错、支持异构环境、较短的分析延迟、易用且开放的接口、较低成本、向下兼容性。
1.16、SQL语言
- SQL语言中的语法关键字,不区分大小写。
- 创建表:create table;
- 指定主键:primary key();
- 指定外键:foreign key();
- 修改表:alter table;
- 删除表:drop table;
- 索弓:lindex,视图:view;
CREATE TABLE S( Sno CHAR(5) NOT NULL UNIQUE,
Sname CHAR(30) UNIQUE,
Status
CHAR(8),
City CHAR(20)
PRIMARY KEY(Sno));
ALTER TABLE S ADD Zap CHAR(6);
DROP TABLE Student
CREATE UNIQUE INDEX S-SNO ON S(Sno);
CREATE VIEW CS-STUDENT
- 数据库查询:select...from...where;
- 分组查询:group by,分组时要注意 select 后的列名要适应分组,having为分组查询附加条件:select sno,avg(score) from student group by sno having(avg(score)>60)。
- 更名运算 as: select sno as “学号” from t1。
- 字符串匹配:like, “%“ 匹配多个字符串,““ 匹配任意一个字符串:select * from t1 where sname like 'a '。
- 数据库插入:insert into...values():insert into t1 values('a' ,66)。
- 数据库删除:delete from...where:delete t1 where sno=4。
- 数据库修改:update...where:update t1 set sname='aa' where sno=3。
- 排序:order by,默认为升序,降序要加关键字 DESC:select * from t1 order by sno desc。
SELECT [ALL[DISTINCT]<目标列表达式>[,<目标列表达式>]...
FROM <表名或视图名>[,<表名或视图名>]
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING<条件表达式>]]
[ORDER BY <列名2>[ASCIDESC]...]
- DISTINCT:过滤重复的选项,只保留一条记录。
- UNION:出现在两个SQL语句之间,将两个SQL语句的查询结果取或运算,即值存在于第一句或第二句都会被选出。
- INTERSECT:对两个SQL语句的查询结果做与运算,即值同时存在于两个语句才被选出。
- MIN、AVG、MAX:分组查询时的聚合函数。
网友评论