第 4章 数据管理技术
4.1 数据管理技术的发展
4.2 数据描述与数据模型
4.3 数据库体系结构
4.4 关系代数
4.5 关系模式的规范化
4.6 数据库设计
4.7 关系数据库语言
4.1 数据管理技术的发展
4.1.1 数据管理技术发展的三个阶

1.人工管理阶段
2.文件系统管理阶段
3.数据库管理阶段
数据的数据库管理具有以下三个主要
特点。
① 数据是结构化的,是面向系统的。
② 数据具有独立性。
③ 保证了数据的完整性、安全性和并
发性。
4.1.2 数据库管理系统
为了实现数据的共享,保证数据的独
立性、完整性和安全性,需要有一组软件
来管理数据库中的数据,处理用户对数据
库的访问,这组软件就是数据库管理系统
( DBMS)。
数据库管理系统具有以下功能。
① 定义数据库。
② 管理数据库。
③ 建立和维护数据库。
数据库管理系统中的主要程序模块可
以划分成以下三大部分。
1.语言处理部分
① 数据描述语言解释程序
② 数据操纵语言处理程序
③ 终端询问解释程序
④ 数据库控制命令解释程序
2.系统运行控制程序
系统运行控制程序又分为以下几
个模块。
① 系统总控程序
② 访问控制程序
③ 并发控制程序
④ 保密控制程序
⑤ 数据完整性控制程序
⑥ 数据访问程序
⑦ 通信控制程序
3.系统建立与维护程序
① 数据装入程序
② 工作日志程序
③ 性能监督程序
④ 系统恢复程序
⑤ 重新组织程序
4.2 数据描述与数据模型
4.2.1 数据描述
1.信息
现实生活中反映客观事物的信息是各
种各样的,在计算机中都是以二进制数据
的形式表示的。
信息世界中所涉及到的几个基本概念。
( 1)属性
属性是指事物在某一方面的特性。
( 2)实体
若干属性的属性值的集合称实体。
( 3)实体型
表征某一类实体的属性的集合。
( 4)实体集
同一类型实体的集合。
2.数据
数据世界中的对象是数据。
现实世界中的客观事物及其联系在
数据世界中是用数据模型来描述的。
( 1)数据项(字段)
数据项( field)相应于观念世界中
的属性。
( 2)记录
记录( record)是每一个实体所对
应的数据。
( 3)记录型
记录型( record type)相应于观
念世界中的实体型。
( 4)文件
文件( file)相应于观念世界中的
实体集。
( 5)关键字
关键字( key)是能够惟一标识一个
记录的字段集。
描述信息是为了更好地处理信息,计
算机所处理的信息形式是数据。
因此,为了用计算机来处理信息,首
先必须将现实世界中的客观事物转换为信
息,然后将这些信息数据化。
3.实体间的联系
客观事物之间的联系包括两个方面:
一是实体内部的联系,二是实体与实体之
间的联系 。
( 1)一对一( 1,1)的联系
( 2)一对多( 1,n)的联系
( 3)多对多( m,n)的联系
由上述叙述可以看出,一对一的
联系是最简单的一种实体联系,它是
一对多的联系的一种特殊情况。
一对多的联系是比较常见的一种
实体联系,它又是多对多的联系的一
种特殊情况。
4.2.2 数据模型
1.层次模型
在层次模型中,实体之间的联系是
用树结构来表示的,其中实体集(记录
型)是树中的结点,而树中各结点之间
的连线表示它们之间的关系。
建立数据的层次模型需要满足下
列两个条件:
① 有一个数据记录没有“父亲”,
这个记录即是根结点。
② 其他数据记录有且只有一个
“父亲”。
2.网状模型
网状数据模型是以记录型为结点的网
状结构,它的特点是:
① 可以有一个以上的结点无“父亲”。
② 至少有一个结点有多于一个的“父
亲”。
网状模型可以描述数据之间的复杂关
系。
用网状模型设计出来的数据库称为网
状数据库。
3.关系模型
关系模型是与格式化模型完全不同的
数据模型,它与层次模型、网状模型有着
本质的区别。
关系模型是用表格数据来表示实体本
身及其相互之间的联系的,它是建立在数
学理论基础上的。
关系模型较之格式化模型有以下几方
面的优点。
( 1)数据结构比较简单
( 2)具有很高的数据独立性
( 3)可以直接处理多对多的联系
4.3 数据库体系结构
数据库系统的层次结构如
图 4.10所示。
数据库管理系统( DBMS)是整个数
据库系统的核心,它对数据库中的数据进
行管理,还在用户的个别应用与整体数据
库之间起接口作用。
数据库管理员 DBA负责整个数据库系
统的建立、维护和协调工作。
在数据库中,数据模型可以分为三个
层次:外层、概念和内层;分别称为外模
型、概念模型和内模型。
图 4.11所示的表示用户访问数据库中
数据时的主要步骤。
4.4 关系代数
4.4.1 关系代数运算
将关系(即二维表)看成是元组的集
合,这些运算主要是从二维表的行的方向
来进行的;后者主要是从二维表的列的方
向来进行运算的。
两者统称为关系代数。
1.并运算( union)
例 4.1 设关系 R和关系 S分别如图
4.12( a)和( b)所示,则关系 R∪ S
如图 4.12( c)所示。
2.差运算( difference)
例 4.2 设关系 R和关系 S分别如图
4.13( a)和( b)所示,则关系 R – S
如图 4.13( c)所示。
3.交运算( intersection)
例 4.3 设关系 R和关系 S分别如图
4.14( a)和( b)所示,则关系 R∩S
如图 4.14( c)所示。
4.笛卡尔积
( Cartesian product)
例 4.4 设关系 R和关系 S分别如图
4.15( a)和( b)所示,则其笛卡尔
积 R× S如图 4.15( c)所示。
5.选择运算( selection)
例 4.5 设关系 R如图 4.16所示。
6.投影运算( projection)
投影运算是在给定关系的某些域上进
行的运算。
例 4.6 设关系 R如图 4.18所示。
运算结果如图 4.19所示。
7.联接运算( join)
联接运算是对两个关系进行的运算,
其意义是从两个关系的笛卡尔积中选出满
足给定属性间一定条件的那些元组。
例 4.7 设关系 R和 S如图 4.20所示。
8.自然联接运算
( Natural join)
自然联接运算是对两个具有公共属性
的关系所进行的运算。
例如,对如图 4.20所示的两个关系 R和
S做自然联接 R|× |S的结果如图 4.22所示。
例 4.8 设有一个关系 R如图 4.23所示。
最后结果如图 4.24所示。
4.4.2 关系模型的查询优化
关系模型的主要特点是数据结构简单、
数据的独立性高,用户在数据描述中,可
以仅采用“关系”这个单一的结构,而完
全不涉及数据的物理结构。
查询优化要解决的核心问题是选择最
佳存取路径和操作顺序。
而关系模型的各种查询语言就基本操
作而言,都可以转换为关系代数表达式,
因此,关系代数表达式的优化是查询优化
的基本课题。
下面列出一些优化的基本策略。
( 1)尽早执行选择运算
( 2)为联接运算做适当的预处理
( 3)把选择运算和投影运算同时
进行
( 4)把选择与笛卡尔积结合起来
运算
( 5)把投影运算与其后的其他运
算同时进行
( 6)尽量利用公共子表达式
4.4.3 关系代数的等价变换
所谓关系代数表达式的等价,是指用
相同的关系代替两个表达式中相应的关系
后其运算结果是一样的。
4.5 关系模式的规范化
图 4.27所示的是某合同管理系
统中的一个关系。
1.第一范式( 1NF)
将图 4.27中的关系表分解为“用户信
息”和“产品信息”两个关系,分别如图
4.28和图 4.29所示。
2.第二范式( 2NF)
将图 4.29中所示的产品信息关系分解
为如图 4.30和图 4.31所示的两个关系。
3.第三范式( 3NF)
进一步将图 4.28所示的用户信息关系
表分解为如图 4.32和图 4.33所示的两个关
系表,形成第三范式。
4.6 数据库设计
数据库设计是指在已有数据库管理系
统的基础上建立数据库的过程。
数据库的设计过程要经历三个大的阶
段,即可行性分析与研究阶段、系统设计
阶段、设计实施与系统运行阶段。
可行性分析与研究阶段是整个设计过
程的前期工作。
在这个阶段中,主要是对已有的计算
机系统(包括数据库管理系统)和实际应
用两方面做尽可能详细的调查,对数据库
设计中的问题,建成以后的性能、效益以
及为此所需要的投资等进行分析和研究,
从而作出可行性报告。
系统设计阶段主要包括概念设计、逻
辑结构设计和物理结构设计三个步骤。
设计实施与系统运行阶段是对系统的
正确性进行验证和总调试,并且正式启动
系统运行的阶段。
4.6.1 数据库设计的过程
1.需求分析
需求分析是整个数据库设计过程中最
重要的一步,它是全部设计工作的基础。
( 1)了解组织机构。
( 2)了解具体的业务现状,即
了解各部门的业务活动情况。
( 3)了解外部要求。
( 4)了解长远规划中的应用范
围和要求。
2.概念结构设计
可以把概念模型设计看成是逻辑设
计的开始。
概念模型有以下几个主要特点:
① 能充分反映实际应用中的实体及
其相互之间的联系,是现实世界的一个
真实模型。
② 由于概念模型独立于具体的计算
机系统和具体的数据库管理系统,因此,
便于用户理解,有利于用户积极参与设
计工作。
③ 概念模型容易修改。
④ 便于向各种模型转换。
概念结构设计要借助于某种方便
又直观的描述工具,E-R(实体 -联系,
Entity-Relationship)图是设计概念模
型的有力工具。
在 E-R图中,用三种图框分别表
示实体、属性和实体之间的联系,其
规定如下:
? 用矩形框表示实体,框内标明实
体名;
? 用椭圆状框表示实体的属性,框
内标明属性名;
? 用菱形框表示实体间的联系,框
内标明联系名;
? 实体与其属性之间以无向边联接,
菱形框与相关实体之间也用无向边联接,
并在无向边旁标明联系的类型。
利用 E-R图可以很方便地进行概念结
构设计。
概念结构设计是对实体的抽象过程,
这个过程一般分三步来完成:
( 1)建立分 E-R图
( 2)设计初步 E-R图
( 3)设计基本 E-R图
3.逻辑结构设计
为了建立用户所要求的数据库,必须
把概念结构转换为某个具体的数据库管理
系统所支持的数据模型,这就是逻辑结构
设计所要完成的任务。
数据库的逻辑设计可以分两
步来进行:
① 将概念模型转换成一般的
数据模型。
② 将一般的数据模型转换为
特定的数据库管理系统所支持的
数据模型。
把概念模型转换成关系数据模型就
是把 E-R图转换成一组关系模式,它需
要完成以下几项工作:
① 确定整个数据库由哪些关系模
式组成,即确定由哪些“表”组成。
② 确定每个关系模式由哪些属性
组成,即确定每个“表”中的字段。
③ 确定每个关系模式中的关键字
属性。
4.物理结构设计
物理结构设计的任务就是为逻辑结构
设计阶段所得到的逻辑数据模型选择一个
最适合应用环境的物理结构。
( 1)物理结构设计的准备工作
① 要充分了解和掌握所用的数据库管
理系统的性能和特点 。
② 要十分熟悉存放数据的外存设备的
特性。
③ 要了解并熟悉应用要求。
( 2)物理结构设计的内容
① 确定数据的存储结构
② 选择存取路径
③ 确定数据存放的位置
④ 确定存储分配
4.6.2 数据字典
1.数据字典的作用
数据字典是数据库的信息系统,是
由关于数据库中数据描述的信息组成的
库,也称之为描述数据库。
数据字典主要有以下几方面的作用:
( 1)对数据进行标准化管理
( 2)使收集的信息文本化
( 3)为数据库设计和系统分析提供
了有力的工具
( 4)为数据库管理系统对数据库的
存取控制和管理提供条件
( 5)为数据库的维护和扩充提供依

一般来说,数据字典主要有以下几方
面的描述与说明:
① 描述数据库系统的所有对象。
② 描述数据库中各种对象之间的联系。
③ 记录所有对象在不同场合和不同视
图中的名称对照。
④ 描述模式、子模式和物理模式,包
括这些模式的修改情况记录。
4.6.3 数据库保护
1.安全性
数据库的安全性是指对数据库的非法
进入进行防范。
( 1)用户标识和鉴定
( 2)存取控制
2.完整性
数据库完整性是指数据正确性
和相容性。
3.并发控制
并发控制就是数据库管理系统对并发
操作按正确方式进行调度,以避免造成数
据的不一致性,使一个用户事务的执行不
受其他事务的干扰。
4.恢复
把数据库从错误状态恢复到某一正确
状态的功能称为恢复。
4.7 关系数据库语言
4.7.1 关系数据库语言概述
关系数据库语言( Structured Query
Language,SQL)是一种标准数据库语言,
从对数据库的随机查询到数据库的管理和
程序的设计,几乎无所不能,而且书写非
常简单,使用方便。
1,SQL的功能与特点
SQL主要功能包括四个方面:查询、
操纵、定义和控制 。
SQL主要有以下几方面的特点。
( 1)一体化
SQL能完成定义关系模式、录入数
据、建立数据库、查询、更新、维护、
数据库重构和数据库安全性控制等一系
列操作 。
( 2)两种使用方式,
统一的语法结构
SQL有两种使用方式:一种是联机交
互使用的方式;另一种是嵌入某种高级程
序设计语言(如 FORTRAN,COBOL等)
的程序中,以实现数据库操作。
( 3)高度非过程化
在 SQL中,只要求用户提出目的,
而不需要指出如何去实现目的。
( 4)语言简洁,易学易用
SQL完成核心功能一共只用了 8个
动词 。
2,SQL的数据类型
SQL标准定义的数据类型有以下八种
(符号 [ ]内表示可选项)。
( 1) CHARACTER[(长度) ]
定义数据类型为字符串,并给定字符
串的长度。
( 2) NUMERIC[(精度 [,标度 ]) ]
定义数据类型为数值型,并给定精度
(总的有效位)或标度(十进制小数点右
边的位数)。
( 3) DECIMAL[(精度 [,标度 ]) ]
定义数据类型为数值型,且给定精度
或标度。
( 4) INTEGER
定义数据类型为整数数值型,它的精
度由执行机构确定,它的标度总为 0。
( 5) SMALLINT
定义数据类型为短整数数值型,它的
精度由执行机构确定,它的标度总为 0。
( 6) FLOAT[(精度) ]
定义数据类型为浮点数值型,它的精
度等于或大于给定的精度。
( 7) REAL
定义数据类型为浮点数值型,它的精
度由执行机构确定。
( 8) DOUBLE PRECISION
定义数据类型为双精度浮点数值型,
它的精度由执行机构确定,它一定比
REAL的精度大。
3,SQL的语句结构
SQL语句都是从动词开始的,紧跟其
后的是动词应做什么的确切信息。
语句的末尾必须有一个结束符 。
SQL对它的保留字规定有确切的含义
和用法,用户只能按照 SQL的规定使用其
保留字,不能用它们作表名、列名等。
一些常用的 SQL标准规定的保留字有:
SELECT,FROM,WHERE,CREATE,
TABLE,DROP,INSERT,UPDATE和
DELETE等。
4,SQL的命令分类
( 1)查询语言
查询语言( QL)是用来对已经存在于
数据库中的数据按照指定的组合、条件进
行检索的。
基本结构是 SELECT子句 + FROM子
句 + WHERE子句组成 。
( 2)数据操纵语言
( DML)
DML命令是用来改变数据库中的
数据的。
( 3)数据定义语言
( DDL)
DDL命令用来创建数据库中的各种
对象,包括表、视图和索引等。
( 4)数据控制语言
( DCL)
DCL命令用来完成授予或收回访问
数据库的某种特权,控制数据操纵事务
的发生时间及效果以及对数据库进行监
视等动作。
4.7.2 数据库定义
SQL的数据定义功能包括三部分:定
义基本表,定义视图和定义索引。
1.表、视图和索引
( 1)表
表是数据库中数据存储的基本单位,
其数据按行和列存储。每个表都有一个表
名,表中的每一列都有一个列名,每一列
中各行的数据都具有相同数据类型和宽度,
而每一行中的数据则是对应于某个单个记
录的列的信息的集合。
( 2)视图
视图是另一种常用的模式对象。
视图是一种虚拟表,其数据是由其他
表和视图中提取的。
( 3)索引
索引是为了表而建的。
2.表的建立、修改和删除
( 1)表的建立
建立一个表,主要是指定义表的名称
和表的结构。一般的 SQL建表的语句形式
如下:
CREATE TABLE <表名 >
(列名 1 类型 [NOT NULL]
[,列名 2 类型 [NOT NULL]]…)
[其他参数 ];
( 2)表的修改
表的修改是指修改一个已经存在的表
结构,如在表中增加一个新的列或重新定
义已存在的列的长度。
① 在现存的基本表中增加新列的语句
格式为:
ALTER TABLE <表名 >
ADD (列名 类型 );
② 增大已存在的某个字段的语
句格式为:
ALTER TABLE <表名 >
MODIFY (列名 类型 );
( 3)表的删除
表的删除是指把一个基本表的定义连
同表上所有的记录、索引以及由此基本表
导出的所有视图全部都删除,并释放相应
的存储空间。
一般的语句格式为:
DROP TABLE <表名 >
3.视图的建立、修改和删除
( 1)视图的建立
在同一个基本表上可以建立多个视图,
一个视图也可以在几张表上建立。
建立视图的语句格式为:
CREATE VIEW <视图名 >
[(列名 1 [,列名 2 ]…)]
AS <子查询 >
[WITH CHECK OPTION];
( 2)视图的修改
在 SELECT语句中,视图(虚表)基
本上可以当作实表来处理。
( 3)视图的删除
删除视图的语句格式为:
DROP VIEW <视图名 >
4.索引的建立和删除
( 1)索引的建立
对于一个基本表,可以根据需要建立
若干索引来提供多种存取途径。
建立索引的语句格式为:
CREATE [UNIQUE] INDEX <索引名 >
ON 基本表名 (列名 [次序 ][,列名 [次序 ]]…)
[其它参数 ];
( 2)索引的删除
删除索引的语句格式为:
DROP INDEX <索引名 >
4.7.3 数据查询
SELECT语句的一般格式为:
SELECT 目标列
FROM 基本表(或视图)
[WHERE 条件表达式 ]
[GROUP BY 列名 1[HAVING 内部函
数表达式 ]]
[ORDER BY 列名 2]
1.单表查询
( 1)选出指定列
从表中选出指定列的语句格式为:
SELECT 目标列 FROM <表名 >;
( 2)带搜索条件( WHERE)子
句的检索
① 比较条件
语法为:
WHERE <表达式 > <比较算符 > <表达式 >;
② 范围条件
语法为:
WHERE <表达式 1> [NOT] BETWEEN <
表达式 2> AND <表达式 3>;
③ 枚举条件
语法为:
WHERE <表达式 > [NOT] IN (<取
值清单 >|<子查询 >);
或 WHERE <> = ANY (<取值清单
>|<子查询 >);
④ 字符匹配条件
语法为:
WHERE <列名 > [NOT] LIKE <字
符串常数 >;
⑤ 空值条件
语法为:
WHERE <列名 > IS [NOT] NULL;
⑥ 逻辑算符
有三种逻辑运算符,按其优先顺序分
别为 NOT(否),AND(与)和 OR(或)。
对于空值的逻辑运算作如下规定:
NOT NULL=NULL;
NULL AND NULL=NULL; NULL AND
TURE=NULL; NULL AND FALSE=FALSE;
NULL OR NULL=NULL; NULL OR
TURE=TURE; NULL OR FALSE=NULL。
2.多表查询
( 1)子查询
子查询是嵌套在另一种 SELECT,
INSERT和 UPDATE或 DELETE语句中的
查询语句。
( 2)连接查询
把两个以上的表连接起来,使查询的
数据从多个表中检索取得。
3.附加子句
( 1)内部函数
表 4.5列出了 SQL库函数的具体功能。
( 2) INTO的使用
( 3) GROUP By和 HAVING的使用
( 4) ORDER BY的使用
4.视图的查询
视图的查询实质上就是对基本表的查询。
4.7.4 数据修改
数据修改主要是指对已经存在的数据
库进行记录的插入、删除和修改的操作。
1.数据的插入
向数据库中插入新的一行用 INSERT
语句。
INSERT
INTO <表名 >[(<字段名 > [,<字段
名 >]…)]
VALUES (<常量 > [,<常量 >]…);

INSERT
INTO <表名 >[(<字段名 > [,<字段
名 >]…)]
子查询 ;
2.数据的修改
修改数据库中的记录用 UPDATE语句,
其语句格式为:
UPDATE <表名 >
SET <字段 >=<表达式 >[,<字段 >=<
表达式 >]…
[WHERE 谓词 ];
3.数据的删除
删除数据库中的记录用 DELETE语句,
其语句格式为:
DELETE
FROM <表名 >
[WHERE 谓词 ];
4.视图的修改
对视图的修改最终要转换成对基本
表的修改。
4.7.5 数据控制
SQL数据控制的功能主要包括两个
方面:一是控制用户对数据的存取能力;
二是控制数据的完整性,包括对数据改
变发生时刻及效果的控制等。
1.授权
DB2中授权语句的一般格式为:
GRANT 权力 [,权力 ] … [ON 对
象类型 对象名 ] TO 用户 [,用户 ]…;
[WITH GRANT OPTION];
权力可以根据操作对象的类型的不
同分为五类,在表 4.6中对这些权力进
行了说明。
4.7.6 嵌入式 SQL
1.概述
SQL是一种双模式语言,即任何可以
在联机终端上交互使用的 SQL语句都可以
用于应用程序之中。
2.不用游标的 DML语句
( 1)查询结果为单记录的 SELECT语句
这类语句的一般格式为:(主语言为 PL/1)
EXEC SQL SELECT <目标列 >
INTO <主变量列 >[空值标志 ]
FROM 基本表 (或视图 )
[WHERE 条件表达式 ]
…;
( 2) UPDATE语句
这类语句的一般格式为:
EXEC SQL UPDATE <目标列 >
SET<字段 >=<表达式 >[空值
标志变量 ][,<字段 >=<表达式 >]…
[WHERE 谓词 ];
( 3) DELETE语句
这类语句的一般格式为:
EXEC SQL DELETE
FROM <表名 >
[WHERE 谓词 ];
( 4) INSERT语句
这类语句的一般格式为:
EXEC SQL INSERT
INTO <表名 > (<字段名 > [,<
字段名 >]…)
VALUES (<主变量 >[空值标
志变量 ],[,<主变量 >[空值标志变量 ] ]…);
3.使用游标的 DML语句
一般情况下,SELECT语句的查询结
果是记录的集合而不是单个记录,为此需
要用游标机制作为桥梁,把集合操作转换
为单个记录处理。
( 1)定义游标
游标用 DECLARE语句定义,其一般
格式为:
EXEC SQL DECLARE <游标名 >
CURSOR FOR
SELECT 语句 ;
( 2)打开游标
游标用 OPEN语句打开,其一般格式
为:
EXEC SQL OPEN <游标名 >;
( 3)取数据
通过游标取数据的语句是 FETCH,其
一般格式为:
EXEC SQL FETCH <游标名 >
INTO,<主变量 1>,:<主变量 2>,…;
( 4)关闭游标
游标用 CLOSE语句关闭,其一般
格式为:
EXEC SQL CLOSE <游标名 >;
( 5)使用游标的 UPDATE
和 DELETE语句