第九章节------数据库技术基础
数据库技术基础
- 第九章节------数据库技术基础
- 一、基本概念
-
- [1. 数据库与数据库系统](#1. 数据库与数据库系统)
- [2. 数据库的三级模式](#2. 数据库的三级模式)
-
- [2.1 内模式](#2.1 内模式)
- [2.2 概念模式](#2.2 概念模式)
- [2.3 外模式](#2.3 外模式)
- [2.4 数据库的两级映射](#2.4 数据库的两级映射)
- [2.5 数据库设计的基本步骤](#2.5 数据库设计的基本步骤)
- 二、数据模型
-
- [1. 基本概念](#1. 基本概念)
- [2. E-R模型](#2. E-R模型)
-
- [2.1 实体](#2.1 实体)
- [2.2 联系](#2.2 联系)
- [2.3 属性](#2.3 属性)
- [3. 实体-联系方法](#3. 实体-联系方法)
- [4. 关系模型](#4. 关系模型)
- 三、关系代数
-
- [1. 关系数据库的基本概念](#1. 关系数据库的基本概念)
-
- [1.1 属性和域](#1.1 属性和域)
- [1.2 笛卡尔积与关系](#1.2 笛卡尔积与关系)
- [1.3 关系的相关名词](#1.3 关系的相关名词)
- [1.4 关系的三种类型](#1.4 关系的三种类型)
- [1.5 关系数据库模式](#1.5 关系数据库模式)
- [1.6 完整性约束](#1.6 完整性约束)
- [1.7 关系运算](#1.7 关系运算)
- [2. 五种基本的关系代数运算](#2. 五种基本的关系代数运算)
-
- [2.1 并(Union)](#2.1 并(Union))
- [2.2 差(Difference)](#2.2 差(Difference))
- [2.3 广义笛卡尔积(Extended Cartesian Product)](#2.3 广义笛卡尔积(Extended Cartesian Product))
- [2.4 投影(Projection)](#2.4 投影(Projection))
- [2.5 选择(Selection)](#2.5 选择(Selection))
- [3. 扩展的关系代数运算](#3. 扩展的关系代数运算)
-
- [3.1 交(Intersection)](#3.1 交(Intersection))
- [3.2 连接(Join)](#3.2 连接(Join))
- [3.3 除(Division)](#3.3 除(Division))
- [3.4 广义投影(Generalized Projection)](#3.4 广义投影(Generalized Projection))
- [3.5 外连接(Outer Join)](#3.5 外连接(Outer Join))
- 四、关系型数据库SQL语言简介
-
- [1. SQL简介](#1. SQL简介)
- [2. SQL数据定义](#2. SQL数据定义)
-
- [2.1 创建表(Create Table)](#2.1 创建表(Create Table))
- [2.2 修改(Alter Table)](#2.2 修改(Alter Table))
- [2.3 删除(Drop Table)](#2.3 删除(Drop Table))
- [2.4 索引](#2.4 索引)
- [2.5 视图](#2.5 视图)
- [3. SQL数据查询](#3. SQL数据查询)
-
- [3.1 Select基本结构](#3.1 Select基本结构)
- [3.2 连接查询](#3.2 连接查询)
- [3.4 子查询与聚集查询](#3.4 子查询与聚集查询)
- [3.5 分组查询](#3.5 分组查询)
- [3.6 更名运算](#3.6 更名运算)
- [3.7 字符串操作](#3.7 字符串操作)
- [3.8 视图查询](#3.8 视图查询)
- [4. 数据更新](#4. 数据更新)
-
- [4.1 插入](#4.1 插入)
- [4.2 删除](#4.2 删除)
- [4.3 修改](#4.3 修改)
- [5. 访问控制](#5. 访问控制)
-
- [5.1 授权](#5.1 授权)
- [5.2 收回授权](#5.2 收回授权)
- 五、关系数据库的规范化
-
- [1. 函数依赖](#1. 函数依赖)
-
- [1.1 函数依赖](#1.1 函数依赖)
- [1.2 部分函数依赖](#1.2 部分函数依赖)
- [1.3 传递函数依赖](#1.3 传递函数依赖)
- [1.4 函数依赖的公理系统(Armstrong公理系统)](#1.4 函数依赖的公理系统(Armstrong公理系统))
- [2. 规范化](#2. 规范化)
-
- [2.1 1NF(第一范式)](#2.1 1NF(第一范式))
- [2.2 2NF(第二范式)](#2.2 2NF(第二范式))
- [2.3 3NF(第三范式)](#2.3 3NF(第三范式))
- [2.4 BCNF(巴克斯范式)](#2.4 BCNF(巴克斯范式))
- [2.5 4NF(第四范式)](#2.5 4NF(第四范式))
- [3. 模式分解及分解特征](#3. 模式分解及分解特征)
-
- [3.1 分解](#3.1 分解)
- [3.2 无损链接](#3.2 无损链接)
- [3.3 保持函数依赖](#3.3 保持函数依赖)
- 六、数据库的控制功能
-
- [1. 事务管理](#1. 事务管理)
- [2. 数据库的备份与恢复](#2. 数据库的备份与恢复)
-
- [2.1 数据库故障类型](#2.1 数据库故障类型)
- [2.2 数据库的备份方法](#2.2 数据库的备份方法)
- [3. 并发控制](#3. 并发控制)
-
- [3.1 丢失修改(丢失更新)](#3.1 丢失修改(丢失更新))
- [3.2 不可重复读](#3.2 不可重复读)
- [3.3 读脏数据](#3.3 读脏数据)
- [3.4 并发控制技术](#3.4 并发控制技术)
一、基本概念
1. 数据库与数据库系统
数据库系统
(DataBase System,DBS
)由数据库、硬件、软件和人员组成。数据库管理系统
(DataBase Management System,DBMS
)主要实现对共享数据有效地组织、管理和存取。DBMS的功能:数据定义
(Data Definition Language,DDL
)、数据库操纵
(Data Manipulation
Language,DML
)、数据库运行管理、数据的组织、存储和管理、数据库的建立和维护、网络通信等。DBMS的分类:关系数据库系统
(Relation DataBase System,RDBS)、面向对象的数据库系统
(0bject-Oriented DataBase System,OODBS)、对象关系数据库系统(Object-Oriented RelationDataBase Svstem,ORDBS)
2. 数据库的三级模式
2.1 内模式
也称存储模式,是数据物理结构
和存储方式
的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式以及数据控制方面的细节。一个数据库只有一个内模式
。对应数据库中的物理存储文件
。
2.2 概念模式
也称模式,是数据库中全部数据的逻辑结构
和特征的描述。一个数据库只有一个概念模式
。对应数据库中的基本表
。
2.3 外模式
也称用户模式或子模式,是用户与数据库系统的接口,是用户用到的那部分数据的描述。一个数据库可以有多个外模式
。对应数据库中的视图
。
2.4 数据库的两级映射
(1) 模式/内模式映像
:实现了概念模式和内模式间的相互转换,是表和数据的物理存储之间的映射
,保证了数据的物理独立性。
(2) 外模式/模式映像
:实现了外模式和概念模式间的相互转换,是视图和表之间的映射
,保证数据的逻辑独立性
。
数据的独立性:
(1)物理独立性 。物理独立性是指用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的。当数据的物理存储改变时,应用程序不需要改变。物理独立性存在于概念模式和内模式之间的映射转换
,说明物理组织发生变化时应用程序的独立程度。
(2)逻辑独立性 。逻辑独立性是指用户的应用程序与数据库中的逻辑结构是相互独立的。当数据的逻辑结构改变时,应用程序不需要改变。逻辑独立性存在于外模式和概念模式之间的映射转换
,说明概念模式发生变化时应用程序的独立程度。

2.5 数据库设计的基本步骤
(1) 用户需求分析
。即分析数据存储的要求,产出物有数据流图、数据字典、需求说明书
。获得用户对系统的三个要求:信息要求、处理要求、系统要求。
(2) 概念结构设计
。就是设计E-R图
,也即实体-联系图
。工作步骤包括:选择局部应用、逐一设计分E-R图、E-R图合并。分E-R图进行合并时,它们之间存在的冲突主要有以下3类。
属性冲突
。同一属性可能会存在于不同的分E-R图中。命名冲突
。相同意义的属性,在不同的分E-R图上有着不同的命名,或是名称相同的属性在不同的分E-R图中代表着不同的意义。结构冲突
。同一实体在不同的分E-R图中有不同的属性,同一对象在某一分E-R图中被抽象为实体而在另分E-R图中又被抽象为属性。
(3)逻辑结构设计
。将E-R图,转换成关系模式。工作步骤包括:确定数据模型、将E-R图转换成为指定的数据模型、确定完整性约束和确定用户视图。
(4)物理结构设计
。是逻辑模型在计算机中的具体实现方案。步骤包括确定数据分布、存储结构和访问方式。
(5)数据库实施阶段
。根据逻辑设计和物理设计阶段的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
(6)数据库运行和维护阶段
。数据库应用系统经过试运行即可投入运行,但该阶段需要不断地对系统进行

二、数据模型
1. 基本概念
数据模型
是对现实世界数据特征的抽象。最常用的数据模型分为概念数据模型和基本数据模型
。
(1) 概念数据模型
:也称信息模型,是按用户的观点对数据和信息建模,是用户和数据库设计人员交流的语言,主要用于数据库设计
。这类模型中最著名的是实体-联系模型,简称E-R模型
。
(2) 基本数据模型:它是按计算机系统的观点对数据建模,是现实世界数据特征的抽象,用于DBMS的实现。
2. E-R模型
E-R模型
,就是实体-联系模型
,用来描述现实世界的概念模型(接近于人的思维方式,容易理解),其中有三个主要的概念:实体、联系和属性。
2.1 实体
用矩形
表示,每个实体由一组属性表示,包括候选键、主键、外键
。实体集是指具有相同属性的实体集合。
候选键
能唯一地标识一行元组的属性集。
主键
:从候选键中选一个作为主键。
外键
:在另一个关系模式中充当主键的属性。
2.2 联系
用菱形
表示,实体集之间的对应关系称为联系,分为一对一(1:1)、一对多(1:n或1:*)、多对多(m: n或*:*)。
①一对一联系(1:1)
。实体集A中的一个实体最多只与实体集B中的一个实体相联系,反之亦然。
②一对多联系(1:n或1:*)
。实体集A中的一个实体可与实体集B中的多个实体相联系。
③多对多联系(m:n或*.*)
。实体集A中的多个实体可与实体集B中的多个实体相联系。多对多的联系会产生一个新的关系模式
,此关系模式的属性
由联系的两个实体的主键以及自己的特有属性
所组成。
样例:
1:1
:一个学校只有一名校长,而每位校长只在一个学校工作。
1:n或1:*
:一个学校有很多学生,而每个学生只在一个学校上课。
m:n或*:*
:一名学生可以选修多门课程,而一门课程也可以由多名学生讲授
2.3 属性
用椭圆
表示,是实体某方面的特性。E-R模型中的属性分为:
①简单和复合属性: 简单属性是原子的、不可再分的,复合属性可以划分为多个子属性,如通信地址。
②单值和多值属性: 对于一个特定的实体都只有一个单独的值(单值属性)。例如,对于一个特定的员工,只对应一个员工号、员工姓名。而员工可能有0个、1个或多个亲属,那么员工的亲属姓名可能有多个,这样的属性称为多值属性。
③NULL属性: 某个属性没有值或属性值未知时,使用NULL值,表示无意义或不知道。
④派生属性: 派生属性可以从其他属性得来。例如,职工实体集中有"参加工作时间"和"工作年限""属性,那么"工作年限"的值可以由当前时间和参加工作时间得到。"工作年限"就是一个派生属性。
弱实体集: 一个实体的存在必须以另一个实体为前提,这类实体称为弱实体集。例如:职工的家属必须以职工在职为前提,依赖于职工。
3. 实体-联系方法
4. 关系模型
在数据库领域中常见的数据模型有层次模型、网状模型、关系模型
和面向对象模型。关系模型
是目前最常用的数据模型之一。在关系模型中用表格结构表达实体集以及实体集之间的联系。
三、关系代数
1. 关系数据库的基本概念
1.1 属性和域
一个现实中的实体(事物)常用若干特征来描述,这些特征称为属性
。每个属性的取值范围
对应的集合称为该属性的域
。
例如:员工(员工号,姓名,性别,参加工作时间,部门号)
1.2 笛卡尔积与关系
设D1,D2,..., Di...,Dn为任意集合,其笛卡尔积为:
D1× D2×...× Di×...× Dn = {(d1, d2,..., di,..., dn) l di ∈ Di, i = 1,2,3,...,n}
其中,每一个元素(d1,d2,..., di,..., dn)称为一个n元组。
1.3 关系的相关名词
(1)候选码
(Candidate Key):若关系中的某一属性或属性组的值能唯一地标识一个元组
,则称该属性或属性组为候选码。
(2)主码
(Primary Key):若一个关系有多个候选码,则选定其中一个为主码。
(3)主属性
(Non-Kcy attribute):包含在任何候选码中的诸属性称为主属性。不包含在任何候选码中的属性称为非码属性。
(4)外码
(Foreign Key):如果关系模式R中的属性或属性组不是该关系的主码,但它是其他关系的主码,那么该属性或属性组是关系模式R的外码。
员工 (++员工号++ ,姓名,性别,参加工作时间,部门号),部门(++部门号++,名称,电话,负责人)
1.4 关系的三种类型
(1)基本关系 。通常又称为基本表,它是实际存在的表,是实际存储数据的逻辑表示。
(2)查询表 。查询表是查询结果对应的表。
(3)视图表 。视图表是由基本表或其他视图表导出的表
。由于它本身不独立存储在数据库中,数据库中只存放它的定义
,所以常称为虚表
。
1.5 关系数据库模式
关系的描述称为关系模式
(Relation Schema),可以形式化地表示为: R(U , D,dom,F)
其中,R表示关系名;U是组成该关系的属性名集合;D是属性的域;dom是属性向域的映像集合;F为属性间数据的依赖关系集合。
通常将关系模式简记为:
R(U)或R(A~1~,A~2~,...,A~n~)
其中,R为关系名,A1,Ap,....An为属性名或域名,属性向域的映像常常直接说明属性的类型、长度
。通常在关系模式主属性上加下划线表示该属性为主码属性
。
员工(++员工号++,姓名,性别,参加工作时间,部门号)
1.6 完整性约束
完整性规则提供了一种手段来保证当用户对数据库做修改时不会破坏数据的一致性。防止对数据的意外破坏。关系模型的完整性规则是对关系的某种约束条件。关系的完整性分为三类:
①实体完整性
: 关系的主属性不能取空。
②参照完整性
: 外键的值或者为空,或者必须等于对应关系中的主键值。
员工(++员工号++ ,姓名,性别,参加工作时间,部门号),部门(++部门号++ ,名称,电话,负责人)
③用户定义完整性
: 根据语义要求所自定义的约束条件。
1.7 关系运算
关系操作的特点是操作对象和操作结果都是集合
。关系代数运算符有4类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符。
2. 五种基本的关系代数运算
2.1 并(Union)
关系模式在代数运算时可以理解为数据库表的运算
关系R与S的属性及属性的个数相同。并的结果为属于R或属于S的元组构成的集合(元组要去重
)。
R ∪ \cup ∪S = {t | t ∈ \in ∈R ∪ \cup ∪ t ∈ \in ∈s}
2.2 差(Difference)
关系R与S的属性及属性的个数相同。R一S差的结果为属于R但不属于S的元组构成的集合。
2.3 广义笛卡尔积(Extended Cartesian Product)
如果关系模式R中有n个属性,关系模式S中有m个属性,则广义笛卡尔积的结果中有 (n+m)个属性,其中前n个属性来自R,后m个属性来白S。如果R中有K1个元组,S中有K2个元组,则运算结果有K1×K2个元组。
2.4 投影(Projection)
从关系的垂直
方向进行运算。在关系R中挑选若干属性列
A组成新的关系。
2.5 选择(Selection)
从关系的水平方向进行运算,从关系R中选择满足条件的元组。
其中,F中运算对象是属性名(或列的序号)
或者常量(用单引号括起来,如'1'表示数字1)
、算术运算符(<、 ≤、>、≥、≠)、逻辑运算符( ∧ 、 ∨ 、 ¬ \wedge、 \vee、\lnot ∧、∨、¬)。
3. 扩展的关系代数运算
3.1 交(Intersection)
关系R与S的属性及属性的个数相同。关系R与S的交是由属于R同时又属于S的元组构成的集合。
显然,R ∩ \cap ∩S = R -(R - S),或者R ∩ \cap ∩S =S- (S - R)。
3.2 连接(Join)
连接分为$\theta$连接、等值连接和自然连接
3种。连接运算是从两个关系R和S的笛卡尔积中选取满足条件的元组。
-
$\theta$连接
:从关系R与S的笛卡尔积中选取属性间满足一定条件的元组
-
等值连接
:当 θ \theta θ为"="时,称之为等值连接。
-
自然连接
:是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,相同属性组的值要相等,并且在结果集中将重复属性列去掉
。
3.3 除(Division)
除运算是同时从关系的水平方向和垂直方向进行运算。
3.4 广义投影(Generalized Projection)
允许在投影列表中使用算术运算,是对投影运算的补充。
3.5 外连接(Outer Join)
在自然连接中关系R与S的一些元组因为没有公共属性会被抛弃。使用外连接就可以避免这样的丢失。外连接运算就是将自然连接时舍弃的元组也放入新关系,并在新增加的属性上填入空值。
- 左外连接(Left Outer Join): 记为R ⋊ \rtimes ⋊S,以左侧的关系R为主,保留左侧的关系R的所有元组右侧的关系S未等值的用NULL填充,加入到RvS中。
- 右外连接(Right Outer Join): 记为R ⋉ \ltimes ⋉S,以右侧的关系S为主,保留右侧的关系S的所有元组,左侧的关系R未等值的用NULL填充,加入到RS中。
- 全外连接(Full Outer Join): 记为R⟗S,左外连接和右外连接的并。
四、关系型数据库SQL语言简介
这里我只列举一些软考用的到的,我之前写了一篇更加详细的关于Mysql的sql语言:MySQL数据库总结
1. SQL简介
SQL
是结构化查询语言的简称,是关系数据库中最普遍使用的语言,包括数据查询、数据操纵、数据定义和数据控制,是一种通用的、功能强大的关系数据库标准语言。
SQL语言支持关系数据库的三级模式。基本表和视图都是表,基本表是存储在数据库中的表,而视图是虚表,是从基本表或其他视图导出的表。数据库中只存放视图的定义
,不存放视图的数据。.用户可用SOL语言对视图或表进行查询等操作。
关系数据库的三级模式:
2. SQL数据定义
SQL的数据定义包括对表、视图、索引的创建和删除,属于数据库定义语言(DDL)。
2.1 创建表(Create Table)
语句格式: CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件] [,<列名><数据类型[列级完整性约束条件]...[,<表级完整性约束条件>);
完整性约束 | 样例 | 列级/表级 |
---|---|---|
非空约束 | Not null | 列级 |
唯一约束 | Unique | 列级 |
主键约束 | Primary Key | 列级/表级 |
外键约束 | Foreign | 表级 |
2.2 修改(Alter Table)
语句格式: ALTER TABLE<表名>[ADD<新列名><数据类型>[完整性约束条件]][DROP<完整性约束名>][MODIFY<列名><数据类型];
2.3 删除(Drop Table)
语句格式: Drop Table <表名>;
2.4 索引
数据库中索引的作用:①通过创建唯一性索引,保证数据记录的唯一性;② 大大加快数据的检索速度; ③加速表与表之间的连接;④在使用Order By和Group By子句中进行检索数据时,可以显著减少查询中分组和排序的时间;⑤使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。
索引分为聚簇索引和非聚簇索引。聚簇索引是指索引表中索引项的顺序与表中记录的物理顺序一致的索引。
-
创建索引
语句格式: CREATE [UNIQUE][CLUSTER] INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]...); -
删除索引
语句格式: DROP INDEX<索引名>;
2.5 视图
视图是由一个或多个基本表或视图导出的表
,其结构和数据是建立在对表的查询
基础上的,是一张虚拟
的表。
- 视图的创建
语句格式: CREATE VIEW视图名(列表名) AS SELECT查询子句 [WITH CHECK OPTION];
注意: 在视图的创建中必须遵循以下规定。
- 子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。
- WITH CHECK OPTION表示对UPDATE、INSERT、DELETE操作时保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
- 组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由SELECT子查询目标列的主属性组成。
3. SQL数据查询
SQL的数据操纵功能包括Insert(插入)、Delete(删除)、Update(修改)、Select(查询),属于数据库操纵语言(DML)。
3.1 Select基本结构
语句格式: SELECT [ALL/DISTINCT]<目标列表达式[<目标列表达式>]...
FROM<表名或视图名>[,<表名或视图名>][WHERE<条件表达式>]
GROUP BY\<列名1\>\[HAVING\<条件表达式\>\]\]\[ORDER BY\<列名2\>\[ASC\|DESC\]...
其中Having只能与Group By搭配使用。
Where子句的条件表达式中可使用的运算符
类别 | 运算符 |
---|---|
集合运算符 | In(在集合中)、Not ln(不在集合中) |
字符串匹配运算符 | Like (与_和%进行单个或多个字符匹配) |
空值比较运算符 | Is Null(为空)、Is Not Null(不为空) |
算术运算符 | >、>=、<、<=、=、 |
逻辑运算符 | And(与)、Or(或)、Not(非) |
3.2 连接查询
连接查询涉及两个及以上表的查询。连接运算有=、>、<、>=、<=、!=等。
3.4 子查询与聚集查询
子查询: 子查询也称嵌套查询,是指一个SELECT-FROM-WHERE查询块可以嵌入另一个查询块之中。
聚集函数
聚集函数名 | 功能 |
---|---|
Count([Distinct | All]*) |
Count([Distinct | All]<列名>) |
Sum([Distinct | All]<列名>) |
Avg([Distinct | [All]<列名>) |
Max([Distinct/All]<列名>) | 求一列值的最大值 |
Min([Distinct | All]<列名>) |
3.5 分组查询
Group By <列名> [Having <条件表达式>]将查询结果按某一列或多列进行分组。
3.6 更名运算
SQL提供了可为关系和属性重新命名的机制,使用"As"实现。
3.7 字符串操作
对于字符串进行的最常用的操作是模式匹配LlKE。使用两个特殊的字符来描述模式:_"%"匹配任意字符串;"_"匹配任意一个字符。
模式匹配是大小写敏感的。
3.8 视图查询
系统执行该语句时,通常先将其转换成等价的对基本表的查询,然后执行查询语句。
示例:Select Sno,Sname,Sage From CS_Student_View Where Sage <20;
4. 数据更新
4.1 插入
语句格式: INSERT INTO基本表名(字段名[,字段名]...) VALUES(常量[,常量]...);
4.2 删除
语句格式:DELETE FROM基本表名[WHERE条件表达式];
4.3 修改
语句格式:UPDATE基本表名SET 列名=值表达式(,列名=值表达式...)[WHERE条件表达式];
5. 访问控制
SQL标准包括Insert、Delete、Update和lSelect权限。Select权限对应于Read权限。
5.1 授权
语句格式: GRANT<权限>[,<权限>]...[ON<对象类型<对象名] TO <用户>[<用户>]... [WITH GRANT OPTION];
对象 | 对象类型 | 操作权限 |
---|---|---|
属性列 | Table | Insert、Delete、Updatc、Sclect、All Privileges(4种权限的总和) |
视图 | Table | Inscrt、Deletc、Update、Select、All Privileges(4种权限的总和) |
基本表 | Table | Insert、Delete、Update、Select、Alter、Index、All Privileges (6种权限的总和) |
数据库 | DataBase | CreateTab建立表的权限,可由DBA授予普通用户 |
5.2 收回授权
语句格式:REVOKE<权限>[,<权限>]...[ON<对象类型><对象名>] FROM<用户>[<用户>]...;
五、关系数据库的规范化
1. 函数依赖
关系数据库设计的方法之一就是设计满足合适范式的模式。关系数据库规范化理论主要包括数据依赖 、范式和模式设计方法。其中核心基础是数据依赖,数据依赖中最重要、最基本的就是函数依赖。
1.1 函数依赖
设R(U)是属性集U上的关系模式,X、Y是U的子集。若对R(U)的任何一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y或Y函数依赖于X,记作X→Y
1.2 部分函数依赖
如果X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。
例子:(A,B)能确定C,A也能确定C,即(A,B)属性集中的部分属性(A)就可以确定C,则C部分函数依赖于(A,B)。
1.3 传递函数依赖
在R(U,F)中,如果X →Y,Y ⊊ \subsetneq ⊊ X,Y→Z,则称Z对X传递依赖。其中,U:属性集,F:是U上的一组函数依赖。
例子:若A→B,B→C,则A→C (B不能→A,防止直接A→C),则称C传递函数依赖A。
函数依赖求候选键
:从一个或一组属性出发,通过函数依赖集中的依赖关系,能决定关系模式中的其他所有属性
,则这个属性或属性组为候选键。
-
求候选键最稳靠的办法是
图示法
。图示法求候选键的过程如下:(1)将关系的函数依赖关系用"有向图"的方式表示。
(2)找出
入度为0的属性
,并以该属性集合为起点,尝试遍历有向图
,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键。(3)若入度为O的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并入度为0的属性集中,
直至该属性集合能遍历所有结点
,则该属性集合为候选键 -
函数依赖求候选键第二种方法:
根据依赖集,找出从未在右边出现过的属性,必然是候选键之一,以该属性为基础
,根据依赖集依次扩展,看能否遍历所有属性
,若无法遍历所有属性,将无法遍历的属性加入候选键中。
1.4 函数依赖的公理系统(Armstrong公理系统)
设关系模式R(U,F),其中U为属性集,F是U上的一组函数依赖,那么有以下推理规则。
- A1自反律: 若Y ⊆ \subseteq ⊆X ⊆ \subseteq ⊆U,则X→Y为F所蕴涵。
- A2增广律:若X→Y为F所蕴涵,且Z ⊆ \subseteq ⊆U,则XZ→ YZ为F所蕴涵。
- A3传递律:若X→Y, Y →Z为F所蕴涵,则X →Z为F所蕴涵。
根据以上三条推理规则,又可推出以下三条推理规则:
- 合并规则:若X→Y,X →z,则X→YZ为F所蕴含。
- 伪传递规则:若X →Y,wY →Z,则XW→Z为F所蕴含。
- 分解规则:若X →Y,Z ⊆ \subseteq ⊆ Y,则X→Z为F所蕴含。
2. 规范化
关系数据库设计的方法之一就是设计满足适当范式的模式,通常可以通过判断分解后的模式达到几范式来评价模式规范化的程度
。范式有: 5 N F ⊂ 4 N F ⊂ B C N F ⊂ 3 N F ⊂ 2 N F ⊂ 1 N F 5NF \subset 4NF\subset BCNF \subset 3NF \subset 2NF \subset 1NF 5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF,其中级别越高,模式规范化程度也就越高。
2.1 1NF(第一范式)
定义:若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式。即属性是原子不可再分的
。
1NF存在的问题:数据冗余、插入异常、删除异常等问题。
2.2 2NF(第二范式)
定义:若关系模式R ∈ \in ∈ 1NF,且每一个非主属性完全(函数)依赖于码,则关系模式R∈ 2NF。即每个非主属性都由整个码决定。当1NF消除了非主属性对码的部分函数依赖,则称为2NF。
2.3 3NF(第三范式)
定义:若关系模式R(U,F)中不存在这样的码X,属性组Y及非主属性Z(Z ⊊ \subsetneq ⊊Y)使得X→Y(Y ↛ \nrightarrow ↛X),Y→Z成立,则关系模式R ∈ 3NF。即当2NF消除了非主属性对码的传递函数依赖,则称为3NF。
2.4 BCNF(巴克斯范式)
BCNF是修正的第三范式。规定了每个属性(包括主属性)都不传递依赖于码。即当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。
2.5 4NF(第四范式)
4NF主要是消除了多值依赖。
3. 模式分解及分解特征
3.1 分解
模式分解:将一个关系模式分解为多个子模式。
模式分解就是模式规范化的工具,模式分解使用无损连接
和保持函数依赖
来衡量模式分解后是否导致原有模式中部分信息丢失。
3.2 无损链接
判定定理:关系模式R(U,F)的一个分解 ρ \rho ρ={R1(U1,F1),R2(U2,F2)...., Rk(Uk ,Fk)}具有无损连接的充分必要条件是U1 ∩ \cap ∩U2→ U1 - U2 ∈ F+ 或 U1 ∩ \cap ∩ U2→U2 - U1∈ F+。
F是模式分解后子模式函数依赖集的并集。
3.3 保持函数依赖
定义:关系模式R(U,F)的一个分解 ρ \rho ρ={R1(U1,F1),R2(U2,F2)...., Rk(Uk ,Fk)},如果F+ =(Uki=1 π \pi πRi(F+)),则称分解 ρ \rho ρ保持函数依赖。(分解后的子模式函数依赖集的并集是否保持了原来的函数依赖集
,即F+= F )
保持函数依赖,就是模式分解后的
F+(各个子模式函数依赖集的并集)是否与F(原有的函数依赖集)等价。
F+包含所有F中的函数依赖,则可以得出保持函数的依赖性(充分条件)
。如果F+不显式包含F中的函数依赖,还需进一步判断,判断方法有两条:
- 第一种是通过F+中的属性闭包去求,是否蕴含函数依赖(这种方法要求做函数投影时,不能缺项);
- 第二种使用给定的算法去求,对投影要求简单,但过程特别麻烦。
六、数据库的控制功能
1. 事务管理
事务是DBMS的基本工作单位,是由用户定义的一个操作序列。
事务的定义语句有:Begin Transaction(事务开始)、Commit(事务提交,表示事务成功
地结束)、Rollback
(事务回滚,表示事务非成功
地结束〉。
事务的ACID性质:
(1)原子性(Atomicity)
:要么都做,要么都不做。
(2)一致性(Consistcncy)
:事务执行的结果必须从一个一致性状态转到另一个一致性状态。中间状态对外不可见。
(3)隔离性(Isolation)
:事务之间相互隔离,互不干扰。
(4)持久性(Durability)
:事务成功提交后,对数据库的更新操作是永久有效的。
2. 数据库的备份与恢复
2.1 数据库故障类型
①事务内部故障: 如运算溢出、除零错误、并发事务发生死锁等
②系统故障: 也称为软故障,是指造成系统停运的事件,如CPU故障、OS故障、突然停电等
③介质故障: 也称为硬故障,如磁盘损坏等
④计算机病毒
2.2 数据库的备份方法
数据库的转储分为静态转储和动态转储,海量转储、增量转储和差量转储,以及日志文件。
-
静态转储: 即
冷备份
,指在转储期间不允许对数据库进行任何存取、修改操作。优点是非常快速、容易归档(直接物理复制操作)。
缺点是只能提供到某一时间点上的恢复,不能做其他工作,不能按表或按用户恢复。
-
动态转储: 即
热备份
,在转储期间允许对数据库进行存取
、修改操作,因此,转储
和用户事务
可以并发执行。优点是可在表空间或数据库文件级备份,数据库仍可使用,可达到秒级恢复。缺点是不能出错,否则后果严重,若热备份不成功,所得结果几乎全部无效。
-
海量转储(完全转储): 是指每次转储全部数据库。
-
增量转储: 是指每次只转储上次转储后更新过的数据,用于数据库很大,事务处理频繁的场景。·差量转储:是对最近一次数据库完全备份以来发生的数据变化进行备份,优点是速度快,占用较小的时间和空间。
-
日志文件: 在事务处理过程中,DBMS把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。
3. 并发控制
并发操作就是在多用户系统中,可能出现多个事务同时操作同一数据
的情况。并发操作会导致3种数据不一致的问题:
3.1 丢失修改(丢失更新)
把两个事务T1和T2读入同一数据做修改,并发执行时,T1把T2,或T2把T1,的修改结果覆盖掉,造成了数据的丢失更新问题,导致数据不一致。
3.2 不可重复读
事务T1读取了数据R,事务T2读取并更新了数据R。当事务T1再读取数据R以进行核对时,得到的两次读取数据不一致。
3.3 读脏数据
事务T1更新了数据R,事务T2读取了更新后的数据R,事务T1由于某种原因被撤销,进行了事务回滚,数据R恢复原值,事务T2读取了脏数据。

造成以上3种数据不一致的主要原因是事务的并发操作破坏了事务的隔离性
。
3.4 并发控制技术
并发控制的主要技术是封锁
(Lock)技术
基本锁类型 | 特点 |
---|---|
排他锁(X锁) | 事务T对数据A加X锁: (1)只允许务T读取、修改数据A; (2)只有等该锁解除之后,其他事务才能够对数据A加任何锁类型。解决了X锁太严格,不允许其他事务并发读的问题。 |
共享锁(S锁) | 事务T对数据A加S锁,则: (1)只允许事务T读取数据A但不能够修收; (2)可允许其他事务对其加S锁,但不允许加X锁。 |