三. 数据库系统
1. 数据库的根本概念
(1)数据库系统的体系结构
数据是会合的,数据管理也是会合的,数据库系统的素有功能都会合在 DBMS 所在的盘算机。
即客户端和系统端,客户端负责数据表现服务,服务器负责数据库服务,数据库系统分为前端和后端。如 ODBC、JDBC。
物理上分布、逻辑上会合;物理上分布,逻辑上分布;特点;透明性。
共享内存式和无共享式。
分布式数据库特点:
- 数据独立性:除了数据的逻辑独立性与物理独立性外,尚有数据分布独立性。
- 会合与自治共享结合的控制结构:各局部的 DBMS 可以独立地管理局部数据库,具有自治的功能。同时,系统又设有会合控制机制,协调各局部 DBMS 的工作,执行全局应用。
- 适当增加数据冗余度:在不同的园地存储同一数据的多个副本,可以提高系统的可靠性和可用性,同时也能提高系统性能。
(提高系统的可用性是指,当系统中某个节点发生故障时,因为数据有别的副本在非故障园地上,对别的所有园地来说,数据仍旧是可用的,从而包管数据的完备性。)
分布式数据库透明性:
- 分片(分块)透明:用户不必关心数据是如何分片的,它们对数据的操作在全局关系上进行。
- 复制透明:用户不用关心数据库在网络中各个节点的复制情况,被复制的数据的更新都由系统自动完成。
- 位置透明:用户不必知道所操作的数据放在何处,即数据分配到哪个或哪些站点存储。
- 局部映像透明性(逻辑透明):最低条理的透明性,该透明性提供数据到局部数据库的映像,即用户不必关心局部 DBMS 支持哪种数据模子、使用哪种数据利用语言,数据模子和利用语言的转换是由系统完成的。因此,局部映像透明性对异构型和同构异质的分布式数据库系统黑白常紧张的。
例题1:
在分布式数据库中有分片透明、复制透明、位置透明和逻辑透明等根本概念,其中:()是指局部数据模子透明,即用户或应用程序无需知道局部使用的是哪种数据模子;()是指用户或应用程序不需要知道逻辑上访问的表具体是如何分块存储的。
A.分片透明 B.复制透明 C.位置透明 D.逻辑透明
A.分片透明 B.复制透明 C.位置透明 D.逻辑透明
解析1:
根据数据库透明性的界说可知,局部数据模子透明是指逻辑透明,选 D。用户无需知道逻辑上访问的表具体是如何分块存储的,这是指分片透明。选 A。
例题2:
当某一园地故障时,系统可以使用其他园地上的副本而不至于使整个系统瘫痪。这称为分布式数据库的()。
A.共享性 B.自治性 C.可用性 D.分布性
解析2:
由分布式数据库特点可知,这是分布式数据库的可用性,选 C。共享性是指数据库系统所有数据都是共享的,没有完全分隔;自治性指的是各局部的 DBMS 可以独立地管理局部数据库;分布性指的是物理节点上的分布。
(2)三级模式和两级映像
外模式也称为用户模式,概念模式也称为模式,内模式也称为存储模式。
逻辑独立性:数据的逻辑结构发生变化后,用户程序不用修改。但是为了包管应用程序可以或许正确执行,需要修改外模式和概念模式之间的映射。
物理独立性:数据的物理结构发生变化后,应用程序不用修改。但是为了包管应用程序可以或许正确执行,需要修改内模式和概念模式之间的映射。
例题1:
数据库系统通常采用三级模式结构:外模式、模式和内模式。这三级模式分别对应数据库的()。
A.根本表、存储文件和视图。
B.视图、根本表和存储文件。
C.根本表、视图和存储文件。
D.视图、存储文件和根本表。
解析1:
由图示可知,外模式对应视图,模式对应根本表,内模式对应文件,选 B。
例题2:
以下关于数据库两级映像的叙述中,正确的是()。
A.模式/内模式映像实现了外模式到内模式之间的相互转换。
B.模式/内模式映像实现了概念模式到内模式之间的相互转换。
C.外模式/模式映像实现了概念模式到内模式之间的相互转换。
D.外模式/内模式映像实现了外模式到内模式之间的相互转换。
解析2:
由两种映像的界说可知,B 选项正确。其中,没有 D 选项这种映射关系。
例题3:
数据的物理独立性和逻辑独立性分别是通过修改()来完成的。
A.外模式与内模式之间的映像、模式与内模式之间的映像。
B.外模式与内模式之间的映像、外模式与模式之间的映像。
C.外模式与模式之间的映像、模式与内模式之间的映像。
D.模式与内模式之间的映像、外模式与模式之间的映像。
解析3:
由物理独立性和逻辑独立性的界说可知,D 选项正确。
(3)数据仓库
数据仓库的范围通常比数据库大得多。
数据仓库的特点:
- 面向主题:数据按主题组织。
- 集成的:消除了源数据中的不一致性,提供整个企业的一致性全局信息。
- 相对稳定的(非易失的):主要进行查询操作,只有少量的修改和删除操作。
- 反映汗青变化(随着时间变化):记载了企业从过去某一时刻到当前各个阶段的信息,可对发展历程和将来趋势做定量分析和猜测。
OLAP:联机分析
OLTP:联机事务
例题:
某集团公司下属有多个超市,每个超市的所有销售数据最终要存入公司的数据仓库中。假设该公司高管需要从时间、地区和商品种类三个维度来分析某家电商品的销售数据,那么最适合采用()来完成。
A.Data Extraction B.OLAP C.OLTP D.ETL
解析:
从三个维度去分析商品的销售数据,采用 OLAP 联机分析更合适,它侧重于数据后期的处理过程。A 项数据提取是在数据预处理阶段,D 项就是数据预处理,C 项 OLTP 联机事务就是我们常用的数据库的数据处理方式,从数据的记载到增删改查等操作,侧重于事务。因此选 B。
2. 数据库设计过程
记住需求分析、概念结构设计、逻辑结构设计三个阶段的产物,以及规范化理论的应用是在逻辑结构设计阶段。
在物理设计阶段,聚簇索引会涉及到物理特性的修改。
例题:
关系规范化在数据库设计的()。
A.需求分析 B.概念设计 C.逻辑设计 D.物理设计
解析:
根据数据库设计过程图示可知,关系规范化的应用是在数据库设计的逻辑设计阶段,选 C。
3. 概念结构设计
(1)概念设计过程
合并(集成) 局部模子的方法:
- 多个局部 E-R 图一次集成。
- 逐步集成,用累加的方式一次集成两个局部 E-R。
合并产生的辩论:(针对同一对象)
- 属性辩论:包罗属性域辩论和属性取值辩论。
- 定名辩论:包罗同名异义和异名同义。
- 结构辩论:包罗同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部 E-R 图中所包含的属性个数和属性排列次序不完全相同。
(2)E-R 图
实体:实体是现实世界中可以区别于别的对象的事件或事物。(实体集是实体的集合)
属性:属性是实体某方面的特性。
联系:实体的联系分为实体内部的联系和实体与实体间的联系。实体间的联系类型有:1:1, *:1, *:*
属性的分类:
简单属性是原子的,不可再分的;复合属性可以细分为更小的部分(即分别为别的属性)。
界说的属性对于一个特定的实体都只有单独的一个值,称为单值属性;
在某些特定情况下,一个属性可能对应一组值,称为多值属性。
- NULL 属性:表现无意义或不知道。
- 派生属性:可以从其他属性得来。
联系的类型:
一对一(1:1);一对多(1:n);多对一(n:1);多对多(m:n)
一对多和多对一有方向性,应注意区分两个实体之间谁是一谁是多。
三元联系:
两个以上不同实体集之间的联系(三元联系);多重度的确定(可根据语义直接转换)
以三元关系中的一个实体作为中心,假设另两个实体都只有一个实例:
- 若中心实体只有一个实例能与另两个实体的一个实例进行关联,则中心实体的连通数为 "一"。
一个病房有多个病人和多名医生,一名医生只负责一个病房,一个病人只属于一个病房。
- 若中心实体有多于一个实例能与另两个实体的实例进行关联,则中心实体的连通数为 "多"。
供应商为多个项目供应多种零件,每个项目可用多个供应商的零件,每种零件可由不同的供应商供应。
同一个实体集内的二元联系:
扩充的 E-R 模子:
弱实体:在现实世界中有一种特别的依赖联系,该联系是指某实体是否存在对于另一些实体具有很强的依赖关系,即一个实体的存在必须以另一个实体为条件,而将这类实体称为弱实体,如眷属与职工的联系,附件与邮件。
特别化:在现实世界中,某些实体一方面具有一些共性,另一方面还具有各自的特性,一个实体集可以按照某些特性区分为几个子实体。
聚集:一个联系作为另一个联系的一端。
4. 逻辑结构设计
(1)关系模式相关概念
从概念结构设计到逻辑结构设计实则就是转换为数据模子。
数据模子三要素:数据结构、数据操作、数据的束缚条件。
常见的数据模子:条理模子;网状模子;关系模子;面向对象模子等
关系模子的结构:关系模式名称(属性 1,属性 2,……)
关系模子相关概念:
- 目或度:关系模式中属性的个数。
- 候选码(候选键):唯一标识元组,且无冗余。它可以有一个,也可以有多个,可以是单属性,也可以是多属性集合。
- 主码(主键):任选一个候选码。
- 主属性与非主属性:构成候选码的属性就是主属性,别的的就黑白主属性。
- 外码(外键):别的关系的主键。
- 全码:关系模式的所有属性组是这个关系的候选码。
比方,学校中有关系模子:学生(学号,姓名,身份证号),结果(学号,课程号,结果)。
那么学生关系模子的目是 3,结果关系模子的目是 3;学生关系模子的候选码有两个,学号和身份证号,为了减少冗余,任选其一即可,比方选学号。结果关系模子的候选码是(学号,课程号)的组合键(注意:多个候选键和多个属性的组合候选键不同);那么学生关系模子中的主键就是学号,结果关系模子的主键就是(学号,课程号);学生关系模子中,学号和身份证号是主属性,姓名黑白主属性,结果关系模子中,学号和课程号是主属性,结果黑白主属性;结果中的学号是学生关系模子中的主键,是自己的外键;全码应当是所有属性组都是候选码。
关系的三种类型:
根本关系;查询表;视图表
完备性束缚:
- 实体完备性束缚:主键唯一,非空。
- 参照完备性束缚:外键要么是别的关系的主键,要么为空(还未分配)。
- 用户自界说完备性束缚:不同用户有不同的界说,比方男女性别表现、年龄段等。
触发器可以完成复杂的完备性束缚条件的设定。
(2)E-R 图转关系模式
一个实体型必须转换为一个关系模式。
联系转关系模式:
独立的关系模式:并入两端主键及联系自身属性。(主键:任一端主键)
归并(任意一端):并入另一端主键及联系自身属性。(主键:保持不变)
比方:
实体型必须转换为一个关系模式:(下划线表现主键)
校长(姓名,性别,职称,年龄)
学校(校名,地址,电话)
任职(任职时间,姓名,校名):联系转换为独立的关系模式,自身属性和两端主键,主键任选其一即可。
归并:两种归并方式
校长(姓名,性别,职称,年龄,任职时间,校名)
学校(校名,地址,电话)/
校长(姓名,性别,职称,年龄)
学校(校名,地址,电话,任职时间,姓名)
独立的关系模式:并入两端主键及联系自身属性。(主键:多端主键)
归并(多端):并入另一端主键及联系自身属性。(主键:保持不变)
比方:
实体型转关系模式:
客户(客户名,身份证号,地址,电话)
账户(账户号,余额)
存款者(开户时间,身份证号,账户号) :主键为多端的主键。
归并:一种方式,向多端归并
客户(客户名,身份证号,地址,电话)
账户(账户号,余额,开户时间,身份证号)
独立的关系模式:并入两端主键及联系自身属性。(主键:两端主键的组合键)
比方:
实体型转关系模式:
学生(学号,姓名,性别,年龄)
课程(课程号,课程名,老师)
考试(结果,学号,课程号):主键为两端主键的组合键
无法进行归并。
总结:
联系类型 | 实体(独立关系模式)
| 联系(独立关系模式) | 联系(归并关系模式) | 归并特点 | 一对一 | √ | √ | √ | 并入任一端 | 一对多 | √ | √ | √ | 并入多端 | 多对多 | √ | √ | × | 无法归并 | 5. 关系代数
关系 S1 | Sno | Sname | Sdept | No0001 | Mary | IS | No0003 | Candy | IS | No0004 | Jam | IS | 关系 S2 | Sno | Sname | Sdept | No0001 | Mary | IS | No0008 | Katter | IS | No0021 | Tom | IS | 简单的关系代数运算:交集、并集、差集
并集:
S1 ∪ S2(并) | Sno | Sname | Sdept
| No0001 | Mary | IS | No0003 | Candy | IS | No0004 | Jam | IS | No0008 | Katter | IS | No0021 | Tom | IS | 交集:
S1 ∩ S2 (交) | Sno | Sname | Sdept
| No0001 | Mary | IS | 差集:(有方向)
S1 - S2(差) | Sno | Sname | Sdept
| No0003 | Candy | IS | No0004 | Jam | IS | S2 - S1(差) | Sno | Sname | Sdept
| No0008 | Katter | IS | No0021 | Tom | IS | 复杂的关系代数运算:笛卡尔积、投影、选择
笛卡尔积:
S1 × S2(笛卡尔积) | Sno | Sname | Sdept
| Sno | Sname | Sdept
| No0001 | Mary | IS | No0001 | Mary | IS | No0001 | Mary | IS | No0008 | Katter | IS | No0001 | Mary | IS | No0021 | Tom | IS | No0003 | Candy | IS | No0001 | Mary | IS | No0003 | Candy | IS | No0008 | Katter | IS | No0003 | Candy | IS | No0021 | Tom | IS | No0004 | Jam | IS | No0001 | Mary | IS | No0004 | Jam | IS | No0008 | Katter | IS | No0004 | Jam | IS | No0021 | Tom | IS | 投影:
(投影) | Sno | Sname | No0001 | Mary | No0003 | Candy | No0004 | Jam | 选择:
(选择) | Sno | Sname | Sdept
| No0008 | Katter | IS | 关于列名称的表达:S1.1 = S2.1 等价于 S1.No0001 = S2.No0001,如果要表达第一列的取值,使用 S1 = '1' 表达,加引号。
关系代数运算之自然毗连:
关系 S1 | Sno | Sname | Sdept | No0001 | Mary | IS | No0003 | Candy | IS | No0004 | Jam | IS | 关系 S2 | Sno | Age | No0001 | 23 | No0008 | 21 | No0021 | 22 | | Sno | Sname | Sdept
| Age | No0001 | Mary | IS | 23 | 属性列数:二者之和减去重复列数。3 + 2 - 1 = 4(重复的是 Sno 列)
元组行:同名属性列取值相等。(Sno 列的 No0001)
等价于
S1 × S2(笛卡尔积) | Sno | Sname | Sdept | Sno | Age | No0001 | Mary | IS | No0001 | 23 | No0001 | Mary | IS | No0008 | 21 | No0001 | Mary | IS | No0021 | 22 | No0003 | Candy | IS | No0001 | 23 | No0003 | Candy | IS | No0008 | 21 | No0003 | Candy | IS | No0021 | 22 | No0004 | Jam | IS | No0001 | 23 | No0004 | Jam | IS | No0008 | 21 | No0004 | Jam | IS | No0021 | 22 | 先辈行笛卡尔积运算,得到的结果进行选择,第 1 列即是第 4 列(元组行),然后对第 1、2、3、5 列进行投影(属性列数),即可得到结果。
二者的性能对比: 与 S1 × S2
前者自然毗连的性能要更优。
在实际运算过程中,两侧的表格要只管先辈行压缩,再运算。即如果有筛选过程,就先辈行筛选,然后再进行自然毗连或笛卡尔积运算。
以是如果考虑性能,两侧运算表格要尽可能小。
在 SQL 语句中的表现:
SELECT(某属性列)FROM(某表)WHERE(判断条件)
选择的属性列是投影的结果;对应的表格如果有多个,则是笛卡尔积的结果;判断条件是选择。
如果 WHERE 有多个,可以用 AND 或 表现,如果满足一个即可,可以用 OR 或 表现。
例题1:
给定关系R(A,B,C,D)和关系S(A,C,E,F),对其进行自然毗连运算 后的属性列为()个;与 等价的关系代数表达式为()。
A.4 B.5 C.6 D.8
A.
B.
C.
D.
解析1:
自然毗连运算后属性列为二者之和减去重复列,即 4 + 4 - 2 = 6,以是第一个空选 C。自然毗连运算等价于经过筛选的笛卡尔积运算,以是起首进行笛卡尔积 R × S,然后看标题给出的条件是,选择关系R中的B列大于关系S中的E列,也就是笛卡尔积结果表中第 2 列大于第 7列,2>7,但不要忘记同名列取值相等,即对元组行的选择,也就是第 1 列即是第 5 列(R.A = S.A),第 3 列即是第 6 列(R.C = S.C),1=5 和 3=6,末了进行投影,即二者之和减去重复列,投影第 1、2、3、4、7、8 列。这些条件需同时满足,以是用 AND 毗连,或 ,选项 B 正确。选项 A 没有考虑自然毗连到笛卡尔积转换的条件,选项 CD 中 '7' 代表取值为 7,不是第 7 列。或者直接根据之前例子中自然毗连与笛卡尔积之间的等价换算,快速排除 AC 项,D 项加引号的 7 代表取值,以是选 B。
例题2:
下列查询 B = "大数据"且 F = "开发平台",结果集属性列为 A、B、C、F 的关系代数表达式中,查询效率最高的是()。
A.
B.
C.
D.
解析2:
如果考虑性能,两侧运算表格要尽可能小。以是将关系R和S都经过筛选后再进行运算,表格会比只筛选一个关系或者不筛选要小得多,以是选项 D 正确。
6. 规范化理论
(1)规范化理论根本概念
函数依赖:
设 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(A,B,C)
依赖集1:{AB -> C,A -> C},称为部分函数依赖。
依赖集2:{A -> B,B -> C},可得出 A -> C,称为传递函数依赖。通常情况下,将 A -> C 称为冗余依赖,因为无需声明,可推导得到。
Amstrong 公理体系:
关系模式 R<U,F> 有以下的推理规则,
- A1.自反律:若 ,则 X → Y 成立。
- A2.增广律:若 且 X → Y,则 XZ → YZ 成立。
- A3.传递律:若 X → Y 且 Y → Z,则 X → Z 成立。
根据 A1,A2,A3 三条推理规则可以得出以下三条推论,
- 合并规则:由 X → Y,X → Z,有 X → YZ。(A2,A3)
- 伪传递规则:由 X → Y,WY → Z,有 WX → Z。(A2,A3)
- 分解规则:由 X → Y 且 ,有 X → Z。(A1,A3)
图示法求候选键:
- 将关系的函数依赖关系,用有向图的方式表现。
- 找收支度为 0 的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键。
- 若入度为 0 的属性集不能遍历图中所有结点,则需要尝试性的将一些中心结点(既有入度,也有出度的结点)并入入度为 0 的属性会合,直至该集合能遍历所有结点,集合为候选键。
例题1:
给定关系 R(A1,A2,A3,A4)上的函数依赖集 F = {A1 -> A2,A3 -> A2,A2 -> A3,A2 -> A4} ,R 的候选键为()。
A.A1 B.A1A3 C.A1A3A4 D.A1A2A3
解析1:
可根据函数依赖画出有向图,
有图可知,A1 收支度分别是 1/0,A2 是 2/2,A3 是 1/1,A4 是 0/4。以是根据图示法求候选键的步骤,找收支度为 0 的结点,即 A1 结点,并且通过 A1 可以或许遍历别的所有结点,以是候选键是 A1,选 A。
例题2:
关系模式 P(A,B,C,D,E,F,G,H,I,J)满足下列函数依赖:FD = {ABD -> E,AB -> G,B -> F,C -> J,CJ -> I,G -> H},求候选码。
解析2:
如果也画有向图的话会比较贫苦,而且可能出错,因为涉及到的结点较多,相对复杂。以是直接看依赖关系,E、F、G、H、I、J 入度都是 1,入度为 0 的属性是 ABCD 集合,通过集合 ABCD 可以或许遍历全图,通过 ABD 遍历 E,AB 遍历 G,B 遍历 F,C 遍历 J,CJ 遍历 I,G 遍历 H,以是集合(ABCD)就是候选键。
例题3:
关系 R(A,B,C)满足下列函数依赖:F {B -> C,B -> A,A -> BC},关系 R 的候选键为()。
A.AB B.A和B C.A和BC D.AC和AB
解析3:
起首看收支度情况,A 收支度为 1/1,B 为 2/1,C 为 0/2,所有结点既有入度也有出度,以是找中心结点(既有出度也有入度),中心结点为 A和B。通过 A 可以或许找到 BC,通过 B 可以或许找到 A 和 C,以是 A 和 B都能遍历全图,它们都是候选键,以是选 B。
例题4:
关系模式 CSZ(CITY,ST,ZIP),其属性组上的函数依赖集为:F = {(CITY,ST)-> ZIP,ZIP -> CITY},问关系 CSZ 的候选键。
解析4:
函数依赖集用有向图表现如下所示,
其中,CITY 的收支度为 1/1,ST 的为 1/0,ZIP 的为 1/1,以是尝试将入度为 0 的 ST 遍历全图,但并不能,因为(CITY,ST)-> ZIP,以是候选键包含 ST,应该为(ST,CITY),以及(ST,ZIP)两个。因此所有属性都是主属性,无非主属性,是全码。
例题5:
若给定的关系模式为 R,U = {A,B,C},F = {AB -> C,C -> B},则关系 R()。
A.有两个候选键 AC 和 BC,并且有三个主属性。
B.有两个候选键 AC 和 AB,并且有三个主属性。
C.只有一个候选键 AC,并且有一个非主属性和两个主属性。
D.只有一个候选键 AB,并且有一个非主属性和两个主属性。
解析5:
先看各属性的收支度,A 为 1/0,B 为 1/1,C 为 1/1,入度为 0 的 A 无法独立遍历全图,以是候选键是包含 A 的集合,AB 可以或许遍历全图,AC 也能遍历全图,以是 AB 和 AC 是候选键,因此有三个主属性,选 B。
例题6:
给定关系模式 R(U,F),其中:U 为关系模式 R 中的属性集,F 是 U 上的一组函数依赖。假设 U = {A1,A2,A3,A4},F = {A1 -> A2,A1A2 -> A3,A1 -> A4,A2 -> A4},那么关系 R 的主键为()。函数依赖集 F 中的()是冗余的。
A.A1 B.A1A2 C.A1A3 D.A1A2A3
A.A1 -> A2 B.A1A1 -> A3 C.A1 -> A4 D.A2 -> A4
解析6:
起首看各属性的收支度,入度为 0 的是 A1,并且发现通过 A1 可以或许遍历全图,以是 A1 是主键,第一个空选 A。然后进一步推理发现,通过 A1 能遍历到 A2,然后 A2 又能遍历到 A4,A1A2 又能遍历到 A3,通过 A1 -> A2 和 A2 -> A4,可以或许推导得到 A1 -> A4,以是 A1 -> A4 依赖是冗余的,第二个空选 C。
例题7:
给定关系模式 R<U,F>,其中 U 为属性集,F 是 U 上的一组函数依赖,那么 Amstrong 公理系统的伪传递律是指()。
A.若 X -> Y,X -> Z,则 X -> YZ 为 F 所蕴含。
B.若 X -> Y,WY -> Z,则 XW -> Z 为 F 所蕴含。
C.若 X -> Y,Y -> Z 为 F 所蕴含,则 X -> Z 为 F 所蕴含。
D.若 X -> Y 为 F 所蕴含,且,则 XZ -> YZ 为 F 所蕴含。
解析7:
观察 Amstrong 6 条规则的界说。C 为传递律,D 为增广律,由二者可得出 B,伪传递律,选 B。A 为合并律。
(2)范式判断
在一些关系模式中可能会存在数据冗余、修改非常、插入非常、删除非常等问题,为了办理这些问题需要将关系进行分解。
第一范式(1NF):在关系模式 R 中,当且仅当所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式 R 是第一范式。
比方,关系模式 R(系名称,高级职称人数)不满足 1NF,因为高级职称人数不是原子属性,仍旧可以再分为教授、副教授等职称人数。
系名称 | 高级职称人数 | 教授 | 副教授 | 盘算机系 | 8 | 10 | 电子系 | 6 | 5 | 第二范式(2NF):当且仅当关系模式 R 是第一范式,且每一个非主属性完全依赖候选键(没有不完全依赖)时,则称关系模式 R 是第二范式。
比方,关系模式 SC(学号,课程号,结果,学分),其中:(学号,课程号)-> 结果,课程号 -> 学分。
候选键是(学号,课程号),非主属性是结果和学分,存在非主属性学分不完全依赖于候选键,而是依赖于课程号,以是不满足第二范式。要办理这个问题,需要对关系进行拆分,即如果拆分成SC1(课程号,学分)和 SC2(学号,课程号,结果),则满足第二范式。关系模式 SC1,候选键是课程号,非主属性学分完全依赖于课程号,关系模式 SC2,候选键是(学号,课程号),非主属性结果完全依赖于候选键,都属于 2NF。
第三范式(3NF):当且仅当关系模式 R 是第二范式,且 R 中没有非主属性传递依赖于候选键时,则称关系模式 R 是第三范式。
比方,学生关系(学号,姓名,系号,系名,系位置),其中:学号 -> 姓名,学号 -> 系号,系号 -> 系名,系号 -> 系位置。
候选键是学号,只有一个,以是一定满足第二范式,因为不存在部分函数依赖(单属性候选键至少是 2NF)。但是有学号 -> 系号,系号 -> 系名,系号 -> 系位置的非主属性传递依赖于候选键,以是不满足第三范式。因此进行拆分,那里不满足就拆那里,即学生关系1(学号,姓名,系号)和学生关系2(系号,系名,系位置),两个关系均满足 3NF。
BC范式(BCNF):设 R 是一个关系模式,F 是它的依赖集,R 属于 BCNF 当且仅当其 F 中每个依赖的决定因素必定包含 R 的某个候选键。
比方,关系模式 STJ(S,T,J),分别表现学生,老师和课程。其中,每一名老师只教一门课程,每门课程有若干老师,某一学生选定某门课,就对应一个固定老师。其依赖关系为:T -> J,(S,J)-> T。候选键为(S,J)和(S,T),并且没有非主属性,以是满足第二三范式(没有非主属性,至少满足 3NF)。根据界说,F 中每个依赖的决定因素必定包含 R 的某个候选键,(S,J)包含(S,J),但 T 不包含(S,T),以是不满足 BC范式。
逐步优化,以办理插入非常、删除非常、数据冗余等问题。
范式 | 属性不可再分 | 非主属性部分函数依赖于候选键 | 非主属性传递函数依赖于候选键 | 函数依赖左侧决定因素包含候选键 | 1NF | √ | 存在 | | | 2NF | √ | 不存在 | 存在 | | 3NF | √ | 不存在 | 不存在 | 不满足 | BCNF | √ | 不存在 | 不存在 | 满足 | 例题:
某公司数据库中的元件关系模式为 P(元件号,元件名称,供应商,供应商所在地,库存量),函数依赖集 F 如下所示:F = {元件号 -> 元件名称,(元件号,供应商)-> 库存量,供应商 -> 供应商所在地} 。元件关系模式的主键为(),该关系存在冗余及插入删除非常等问题,为了办理这一问题需要将元件关系分解为(),分解后的关系模式可以到达()。
A.元件号,元件名称 B.元件号,供应商 C.元件号,供应商所在地 D.供应商,供应商所在地
A.元件1(元件号,元件名称,库存量);元件2(供应商,供应商所在地)
B.元件1(元件号,元件名称);元件2(供应商,供应商所在地,库存量)
C.元件1(元件号,元件名称);元件2(元件号,供应商,库存量);元件3(供应商,供应商所在地)
D.元件1(元件号,元件名称);元件2(元件号,库存量);元件3(供应商,供应商所在地);元件4(供应商所在地,库存量)
A.1NF B.2NF C.3NF D.4NF
解析:
起首找候选键,入度为 0 的属性,即(元件号,供应商)的集合,第一个空选 B。第二个空是拆分元件关系,但没有告诉是需要满足什么范式,起首看到标题中给出的依赖关系存在非主属性部分函数依赖于候选键,元件号 -> 元件名称,供应商 -> 供应商所在地,以是不满足 2NF。以是先将这部分进行拆分,得到(元件号,元件名称)和(供应商,供应商所在地),因此可以排除 AB 选项。A 选项中非主属性库存量完全依赖于(元件号,供应商),不完全依赖于元件号,以是不符合,B 选项同理。又由于存在依赖(元件号,供应商)-> 库存量,以是另一个拆分出的关系应该是(元件号,供应商,库存量),D 项是将(元件号,供应商)-> 库存量 依赖进行了拆分,如许就无法满足依赖条件,因为元件号自身无法决定库存量,同理供应商所在地也是,使得无法还原为最初的依赖关系,因此第二个空选 C。C 选项中,三个依赖关系,元件1 满足 3NF,元件2 满足 3NF,元件3 满足 3NF,以是分解后的关系模式可以到达 3NF。也是满足 BCNF 的。
(3)模式分解
保持函数依赖:
设数据库模子 ρ = {R1,R2,……,Rk} 是关系模式 R 的一个分解,F 是 R 上的函数依赖集,ρ 中每个模式 Ri 上的 FD 集是 Fi。如果 {F1,F2,……,Fk} 与 F 是等价的(即相互逻辑蕴含),那么称分解 ρ 保持 FD。
比方,设关系模式 R(U,F),其中 U = {A,B,C,D,E},F = {A -> BC,C -> D,BC -> E,E -> A},则分解 ρ1 = {R1(ABCE),R2(CD)}是否保持函数依赖?而分解 ρ2 = {R1(ABE),R2(CD)}是否保持函数依赖?
一个特性是,属性保存下来,那么响应的函数依赖也会随之保存下来。如 ρ1,R1 函数依赖是 ABCE,那么就存在依赖关系 A -> BC,BC -> E,E -> A,R2 函数依赖是 CD,那么就存在依赖关系 C -> D,以是分解的两个关系中函数依赖与原依赖是等价的,以是 ρ1 保持函数依赖。同理,ρ2的两个关系中函数依赖与原依赖不等价,缺少 A -> BC,BC -> E的依赖关系,以是 ρ2 不保持函数依赖。
但需要注意,冗余函数依赖不需要保存。
比方,关系模式 R(U,F),其中 U = {A,B,C},F = {A -> B,B -> C,A -> C},则分解 ρ = {R1(AB),R2(BC)}是否保持函数依赖?
由 ρ 的两个函数依赖可得,A -> B 和 B -> C 两个依赖关系,但可以根据传递律推导出依赖 A -> C,以是 A -> C 属于冗余函数依赖,不需要保存。因此 ρ 也是保持函数依赖的。
无损分解:
所谓无损分解就是可以还原,有损分解就是无法还原。
无损毗连分解是指将一个关系模式分解成若干个关系模式后,通过自然毗连等运算仍能还原到原来的关系模式。
比方,有关系模式:结果(学号,姓名,课程号,课程名,分数),函数依赖:学号 -> 姓名,课程号 -> 课程名,(学号,课程号)-> 分数。
将其分解为:结果(学号,课程号,分数);学生(学号,姓名);课程(课程号,课程名)。
可以或许进行分解并还原的条件是:
- 存在同名属性列
- 该属性列为左侧决定因素的函数依赖保存下来
也就是说,起首看是否有同名属性列,是学号,并且以学号为左侧决定因素的函数依赖,学生(学号,姓名),学号 -> 姓名,保存下来了,以是可以还原为,结果(学号,课程号,分数,姓名);继续看同名属性列,是课程号,并且以课程号为左侧决定因素的函数依赖,课程(课程号,课程名),课程号 -> 课程名,也保存下来了,以是可以继续还原,结果(学号,课程号,分数,姓名,课程名)。因此是无损分解。
无损分解(表格法):(通用)
还是上述的关系模式,画出初始表如下,
| 学号 | 姓名 | 课程号 | 课程名 | 分数 | 结果 | √ | √ | √ | √ | √ | 学生 | √ | √ | | | | 课程 | | | √ | √ | | 依然是先找同名属性列,找到学号,存在以学号为左侧决定因素的依赖关系且保存,学号 -> 姓名,以是可以还原结果关系中的姓名属性;再继续找同名属性列,下一个是姓名,但没有以姓名为左侧决定因素的依赖关系,以是跳过,下一个是课程号,存在依赖关系并且保存,课程号 -> 课程名,以是可以继续还原结果关系中的课程名属性。如许就还原了所有初始的依赖关系,因此是无损分解。
下面再举一个保持函数依赖但是是有损分解的例子,
设 R = ABC,F = {A -> B},则分解 ρ = {R1(AB),R2(BC)},是否是无损分解?
依然是图示法,如下图:
起首看是否保持函数依赖,F = {A -> B},R1(AB),以是保持函数依赖。再来看是否是无损分解,先找到同名属性列 B,然后看是否存在以 B 为左侧决定因素的函数依赖并且保存(F 中只有 A -> B),发现并没有,以是无法继续还原,因此是有损的。
如果分解 ρ = {R1(A),R2(BC)},那么 ρ 就是不保持函数依赖且有损。
如果存在 R = ABCD,F = {A -> B,B -> C,C -> D},ρ = {R1(ABD),R2(BC)},那么 ρ 就是不保持函数依赖且无损。
因此是否保持函数依赖和是否无损两个维度是独立的,可以形成四种情况。
无损分解(公式法):(仅限于分解只有两个子模式)
如果 R 的分解为 ρ = {R1,R2},F 为 R 所满足的函数依赖集合,分解 ρ 具有无损毗连性的充分必要条件是:
或者
如果 R1 和 R2 的公共属性可以或许函数决定 R1 或 R2 中的别的属性,分解就具有无损毗连性。
比方,设 R = ABC,F = {A -> B},则分解 ρ1 = {R1(AB),R2(AC)}与分解 ρ2 ={R1(AB),R2(BC)}是否都为无损分解?
先看 ρ1, = A,R1 - R2 = B,R2 - R1 = C,并且有 决定(R1 - R2),即 A -> B,也有 决定(R2 - R1),即 A -> C,以是 ρ1 是无损毗连。再看 ρ2, = B,R1 - R2 = A,R2 - R1 = C,并不存在 决定(R1 - R2)和(R2 - R1),即 B -> A 和 B -> C,以是 ρ2 是有损分解。
例题:
设关系模式 R(U,F),其中:U = {A,B,C,D,E},F = {A -> B,DE -> B,CB -> E,E -> A,B -> D}。()为关系模式 R 的候选键,分解()是无损毗连,并保持函数依赖。
A.AB B.DE C.DB D.CE
A.ρ = {R1(AC),R2(ED),R3(B)}
B.ρ = {R1(AC),R2(E),R3(DB)}
C.ρ = {R1(AC),R2(ED),R3(AB)}
D.ρ = {R1(ABC),R2(ED),R3(ACE)}
解析:
求候选键的话先找入度为 0 的属性,是 C,因此没有 C 的选项都可以排除,第一个空选 D。第二个空答案都错误,但可以找一个相对接近的。ABCD 四个选项都是不保持函数依赖的,并且看到 AB 选项中不存在同名属性列,以是一定是有损的,先排除 AB。再看 CD 选项,由于分解有三个子模式,以是无法使用公式法,需要用图示法,如下图所示,
选项C | A | B | C | D | E | R1(AC) | √ | | √ | | | R2(ED) | | | | √ | √ | R3(AB) | √ | √ | | | | 先找同名属性列 A,存在并且保存以 A 为左侧决定因素的依赖关系,A -> B,以是可以还原 R1 中的 B 属性,下一个同名属性列是 B,但不存在以 B 为左侧决定因素的依赖关系 B -> D,以是无法继续还原,C 项为有损分解。
选项D | A | B | C | D | E | R1(ABC) | √ | √ | √ | √ | √ | R2(ED) | √ | √ | | √ | √ | R3(ACE) | √ | √ | √ | √ | √ | 先找同名属性列 A,存在且保存了 A -> B,以是可以还原 R3 中的 B 属性,下一个同名属性列是 B,不存在 B -> D 的依赖关系,以是继续看下一个 C,存在 BC -> E 的依赖关系且在 R3 中保存,以是可以还原 R1 中的 E 属性,继续看 E,存在 E -> A 的依赖关系,并且 R1 和 R3 中均保存了下来,以是可以继续还原 R2 中的 A 属性,然后在 R2 中可以继续利用之前的存在关系还原 B 属性,然后存在关系 DE -> B,且在 R2 中保存,因此可以还原 R1 和 R3 中的 D 属性,如许 R1 和 R3 都全部还原,以是选项 D 是无损毗连。选择 D 更好。
7. SQL 语言
分类 | 动词 | 数据查询 | SELECT | 数据界说 | CREATE、DROP、ALTER
| 数据利用 | INSERT、UPDATE、DELETE | 数据控制 | GRANT、REVOKE | (1)平凡查询
SELECT [ALL | DISTINCT] <目的列表达式> [,<目的列表达式>] …
FROM <表名>[,<表名>]…
[WHERE<条件表达式>]
[GROUP BY<列名1> [HAVING<条件表达式>]]
[ORDER BY<列名2>[ASC | DESC]…]
其中,SELECT 语句对应关系代数中的投影运算 ;FROM 语句对应笛卡尔积;WHERE 语句对应选择运算 。
比方,一个典范的 SQL 查询具有以下形式:
SELECT A1,A2,…,An
FROM R1,R2,…,Rm
WHERE P
对应关系代数表达式为 。
例题:
给定关系 R(A,B,C,D,E)与 S(B,C,F,G),那么与表达式等价的 SQL 语句如下:
SELECT()FROM R,S WHERE();
A.R.B,D,F,G
B.R.B,E,S.C,F,G
C.R.B,R.D,S.C,F
D.R.B,R.C,S.C,F
A.R.B = S.B OR R.C = S.C OR R.B<S.G
B.R.B = S.B OR R.C = S.C OR R.B<S.C
C.R.B = S.B AND R.C = S.C AND R.B<S.G
D.R.B = S.B AND R.C = S.C AND R.B<S.C
解析:
根据 查询 SQL 语句与关系代数表达式的对应关系,SELECT 子句对应投影,投影第 2、4、6、7 列,即 R.B,R.D,S.F,S.G,不要忘记排除重复的 S.B 和 S.C,那么在投影时就是 R.B,D,F,G,因为 B 列有重复,以是需要标识所在关系,别的列不重复,无需标志。因此第一个空选 A。WHERE 子句对应选择,第 2 列小于第 7 列,即 R.B <S.G,但需注意表达式中使用了毗连运算,以是不要忘记毗连运算与笛卡尔积之间的转换条件,同名属性列取值相等,以是 R.B = S.B 和 R.C = S.C,同时满足以上条件,用 AND 毗连,以是第二个空选 C。
(2)分组查询
[GROUP BY<列名1> [HAVING<条件表达式>]]
HAVING 条件子句只能与 GROUP BY 搭配使用。
处理类型 | 处理子类 | 语法 | 结果排序 | 升序或降序 | ORDER BY 字段名 ASC | DESC | 集函数 | 统计 | COUNT([DISTINCT | ALL] <列名>) | 盘算一列值的总和 | SUM([DISTINCT | ALL] <列名>) | 盘算一列值的均匀值 | AVG([DISTINCT | ALL] <列名>) | 求一列值的最大值 | MAX([DISTINCT | ALL] <列名>) | 求一列值的最小值 | MIN([DISTINCT | ALL] <列名>) | 对结果分组 | 将查询结果按列值分组 | GROUP BY <列名> | 对分组结果筛选 | 对分组结果筛选 | HAVING <条件表达式> | 其中,DISTINCT 代表统计不重复的记载,只使用 COUNT 则是对全部记载的统计。
例题:
某企业的工程项目管理系统的数据库中供应商关系 Supp、项目关系 Proj 和零件关系 Part 的 E-R 模子和关系模式如下:
Supp(供应商号,供应商名,地址,电话)
Proj(项目号,项目名,负责人,电话)
Part(零件号,零件名)
其中,每个供应商可以为多个项目供应多种零件,每个项目可由多个供应商供应多种零件。SP_P 需要天生一个独立的关系模式,其联系类型为()。给定关系模式 SP_P(供应商号,项目号,零件号,数量)查询至少供应了 3 个项目的供应商,输出其供应商号和供应零件数量的总和,并按供应商号降序排列。
SELECT 供应商号,SUM(数量)FROM()
GROUP BY供应商号
()
ORDER BY 供应商号 DESC;
A.*:*:* B.1:*:* C.1:1:* D.1:1:1
A.Supp B.Proj C.Part D.SP_P
A.HAVING COUNT(项目号)>2
B.HAVING COUNT(DISTINCT(项目号))>2
C.WHERE COUNT(项目号)>2
D.WHERE COUNT(DISTINCT(项目号))>2
解析:
由每个供应商可以为多个项目供应多种零件,每个项目可由多个供应商供应多种零件可得,该关系模式的联系类型为多对多对多,选 A。SQL 语句的填写,要查供应商号和数量,以是只查一个表是不敷的,因此查给定的新关系模式 SP_P,选 D;要查询至少供应了 3 个项目的供应商,因为有可能存在一个供应商供应了 2 个项目但是给其中一个项目供应了 2 次,以是如果只用 COUNT 查出来的结果还是 3,但此处需要查到供应了至少 3 个项目,以是需要 DISTINCT 制止统计重复项,并且 GROUP BY 与 HAVING 搭配使用,以是选 B。
(3)权限控制
授权:
GRANT <权限 >[, …n]
ON <对象类型><对象名>
TO <用户>[, …n]
WITH GRANT OPTION(指定了该语句,代表获得了权限的用户还可以将权限赋给别的用户。)
收回权限:
REVOKE <权限 >[, …n]
ON <对象类型><对象名>
FROM <用户>[, …n]
[RESTRICT | CASCADE]
CASCADE 代表级联收回,即将被赋予权限的用户又赋予给别的对象的权限收回。
8. 并发控制
关于数据库的并发控制部分,可以参考之前的文章:Java知识点整理 3 — 数据库
(1)事务的特性
事务是逻辑上的一组操作,要么都执行,要么都不执行。
四个特性:(ACID)
- 原子性(Atomicity):事务是最小的执行单元,不允许分隔,要么都做,要么都不做。
- 一致性(Consistency):事务执行的结果必须包管数据库从一个一致性状态变成另一个一致性状态。如转账,转帐前两个账户都有1000元,转账100元后,应该为一个900一个1100。
- 隔离性(Isolation):多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对别的事务是不可见的。
- 持久性(Durability):一旦事务成功提交,纵然数据库崩溃,其对数据库的更新操作也永久有用。
事务在执行过程中的四种状态:BEGIN、END、COMMIT、ROLLBACK。
数据库中写数据时是先写入日志,然后再写入数据库,有 COMMIT 标志代表已经将数据成功写入数据库。如果在这个过程中数据库发生崩溃,重启后数据库管理系统会去扫描日志,会将有 COMMIT 提交标志的事务放到 REDO 队列中,进行重新执行。
例题:
事务的()是指,当某个事务提交(COMMIT)后,对数据库的更新操作可能还停顿在服务器磁盘缓冲区而未写入到磁盘时,纵然系统发生故障,事务的执行结果仍不会丢失。
A.原子性 B.一致性 C.隔离性 D.持久性
解析:
根据事务四大特性的界说可知,此处应为持久性,选 D。
(2)并发问题
并发事务可能产生的问题有:
事务 A 读取数据并对数据进行了修改,这个修改对其他事务来说是可见的,纵然当前事务没有提交。这时事务 B 读取了这个还未提交的数据,但事务A突然回滚,导致数据没有提交到数据库,那事务 B 读到的就是脏数据。
比方:事务 A 读取数据 X = 20,并执行修改操作,X = X - 1,即现在 X = 19,此时事务 B 读取了数据 A,并读到 X = 19,但此时事务 A 还未提交,并进行 ROLLBACK,规复为 20,导致事务 B 读到的就是脏数据 19。
事务 A 读取一个数据时,事务 B 也读取了该数据,在事务 A 修改了这个数据后,事务 B 也随之修改了这个数据。如许事务 A 的修改结果就被覆盖(丢失)。
比方:事务 A 读取表中的数据 X = 20,事务 B 也读取 X = 20,事务 A 先修改 X= X - 2,事务 B 后来也修改 X = X - 1,最终结果 X = 18,事务 A 的修改被丢失。
事务 A 多次读同一数据。在这个事务还没结束时,事务 B 也访问该数据。那么,在事务 A 中的两次读数据之间,由于事务 B 的修改导致事务 A 两次读取的数据不一样。
比方:事务 A 读取表中的数据 A = 20,事务 B 也读取 X = 20,事务 B 修改 X = X - 1,事务 A 再次读取 X = 19,此时读取的结果和第一次读取的结果不同。
这其中还涉及到并发事务的控制方式与 SQL 的隔离级别等内容,详情可以参考文章:Java知识点整理 3 — 数据库
(3)封锁协议
针对并发过程中产生的问题,可以对数据进行加锁来处理。
- 共享锁(S 锁):又称读锁,事务在读取记载的时间获取共享锁,允很多个事务同时获取(锁兼容),也就是一个事务对数据添加了 S 锁后,别的事务也能继续添加 S 锁。
- 排他锁(X 锁):又称写锁/独占锁,事务在修改记载的时间获取排他锁,不允很多个事务同时获取。如果一个记载已经被加了排他锁,那别的事务不能再对这条记载加任何类型的锁(锁不兼容)。
两段封锁协议,是指所有事务必须分两个阶段对数据项加锁和解锁。第一阶段是获得封锁,事务可以获得任何数据项上的任何类型的锁,但不能释放;第二阶段是释放封锁,事务可以释放任何数据项上的任何类型的锁,但不能申请。
数据库部分的内容至此结束,后续如果有补充或修改会直接添加。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |