第4章 关系数据库方法Word文档格式.docx

上传人:b****6 文档编号:22063409 上传时间:2023-02-02 格式:DOCX 页数:62 大小:366.72KB
下载 相关 举报
第4章 关系数据库方法Word文档格式.docx_第1页
第1页 / 共62页
第4章 关系数据库方法Word文档格式.docx_第2页
第2页 / 共62页
第4章 关系数据库方法Word文档格式.docx_第3页
第3页 / 共62页
第4章 关系数据库方法Word文档格式.docx_第4页
第4页 / 共62页
第4章 关系数据库方法Word文档格式.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

第4章 关系数据库方法Word文档格式.docx

《第4章 关系数据库方法Word文档格式.docx》由会员分享,可在线阅读,更多相关《第4章 关系数据库方法Word文档格式.docx(62页珍藏版)》请在冰豆网上搜索。

第4章 关系数据库方法Word文档格式.docx

4.1关系数据库的基本概念

4.1.1关系的形式化定义

虽然用二维表形式表示关系非常直观,但在实际应用和理论研究中很不方便。

我们可以用数学方法表示一个关系。

一般来讲,有两种数学方法,一是代数方法,另一种是一阶谓词逻辑方法。

1)关系的集合表示

一个关系由若干个不同元组组成,因此,可把关系视为元组的集合。

此外,关系中每个属性都有其相应的值域或简称域(Domain)。

例如,学生性别的域是{男,女},学生成绩的域是0~100的整数集合。

假设一组域,是由D1,D2,…,Dnn个域组成。

D1,D2,…,Dn上的D1×

D2×

…×

Dn定义为集合:

D1×

Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}

其中每个元素(d1,d2,…,dn)称为一个元组。

若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×

Dn的基数为:

【例4-1】设有二个域教师名域T={胡恒,丁伟}、课程名域C={C语言,数据结构,计算机原理},由T和C的笛卡儿积定义集合:

C={(胡恒,C语言),(胡恒,数据结构),(胡恒,计算机原理),

(丁伟,C语言),(丁伟,数据结构),(丁伟,计算机原理)}

它表示教师名和课程名的所有可能组合,其中的每一个元素表示“某教师讲授某课程”。

其中(胡恒,C语言),(胡恒,数据结构),(胡恒,计算机原理)等都是元组。

该笛卡儿积的基数为2×

3=6,也就是说,T×

C一共2×

3=6个元组。

如果取该笛卡儿积的这六个元素,并将它们放到一张名为T_C的二维表中,即:

T_C

T

C

胡恒

C语言

数据结构

计算机原理

丁伟

 

显然,这是一个关系。

于是有下面的定义4-1。

定义4-1:

一个在域D1,D2,…,Dn上的关系(Relation)就是笛卡儿积D1×

Dn的子集,用R(D1,D2,…,Dn)表示,R

Dn。

关系的成员为元组,即笛卡儿积的子集的元素(d1,d2,…,dn)。

其中,R表示关系的名,n是关系的目或度(Degree)。

并且,当n=1时,称关系为单元关系(UnaryRelation);

当n=2时称关系为二元关系(BinaryRelation),等等。

例如,我们用教师名代替教师(假设无同名教师存在),用课程名代替课程,教师任教的课程可用关系TC(教师,课程)表示,它是教师名域和课程名域的笛卡儿积T×

C的子集,任一学期教师任教的课程记录是这个关系的元组,如:

TC={(胡恒,C语言),(丁伟,数据结构)}表示本学期胡恒老师上C语言课程,丁伟老师上数据结构课程。

2)关系的一阶谓词表示

关系模型不但可以用关系代数表示,还可以用一阶谓词演算表示。

定义4-2:

设有关系模式R,其原子谓词表示形式为P(t)。

其中,P是谓词,t为个体变元,以元组为其表现形式。

将关系R(元组的集合)与谓词P(t)之间的联系描述为:

R={t|P(t)},表示所有使谓词P为真或满足谓词P的元组t都属于关系R。

关系R与原子谓词P之间的关系如下:

P(t)=True,t在R内,P(t)=Fals,t不在R内。

还可以用集合论的观点来定义关系:

关系是一个元数为k(k≥1)的元组集合。

即这个关系中有若干个元组,每个元组有k个属性值。

把关系看成是一个集合,集合中的元素是元组。

更直观的理解,可将关系看成是一张二维表格。

表4.1是一张职工表,它是一张二维表格。

表4.1职工表(实体集)

职工编号

姓名

部门

性别

年龄

身份证号码

2113

程晓清

销售部

30

310110*********

2116

刘红英

财务部

32

2136

李小刚

管理部

28

2138

蒋民

采购部

41

2141

王国洋

39

从表4.1所示职工表的实例,可以归纳出关系具有如下特点:

(1)关系(表)可以看成是由行和列(5行和6列)交叉组成的二维表格。

它表示的是一个实体集合。

(2)表中一行称为一个元组。

可用来表示实体集中的一个实体。

(3)表中的列称为属性,给每一列起一个名称即属性名,表中的属性名不能相同。

(4)列的取值范围称为域,同列具有相同的域,不同的列可有相同的域。

例如,性别的取值范围是{男,女};

职工编号和年龄都为整数域。

(5)表中任意两行(元组)不能相同。

能惟一标识表中不同行的属性或属性组称为主键。

尽管关系与二维表格传统的数据文件有类似之处,但它们又有区别,严格地说,关系是一种规范化了的二维表格,具有如下性质:

(1)属性值是原子的,不可分解。

(2)没有重复元组。

(3)没有行序。

(4)理论上没有列序,为方便,使用时有列序。

3)关键码和表之间的联系*

在关系数据库中,关键码(简称键)是关系模型的一个重要概念。

通常键由一个或几个属性组成,通常有如下几种键:

(1)超键:

在一个关系中,能惟一标识元组的属性或属性集称为关系的超键。

(2)候选键:

如果一个属性集能唯一标识元组,且又不含有多余的属性,那么这个属性集称为关系的候选键。

(3)主键:

若一个关系中有多个候选键,则选其中的一个为关系的主键。

用主键实现关系定义中“表中任意两行(元组)不能相同”的约束。

包含在任何一个候选键中的属性称为主属性,不包含在任何键中的属性称为非主属性或非键属性。

例如:

表4.1的关系中,设属性集K=(职工编号,部门),虽然K能惟一标识职工,但K只能是关系的超键,还不能作候选键使用。

因为K中“部门”是一个多余属性,只有“职工编号”能惟一标识职工。

因而“职工编号”是一个候选键。

还有“身份证号”也可以是一个候选键。

另外,如果规定“不允许有同名同姓的职工”,那么“姓名”也可以是一个候选键。

关系的候选键可以有多个,但不能同时使用,只能使用一个,譬如使用“职工编号”来标识职工,那么“职工编号”就是主键了。

(4)外键:

若一个关系R中包含有另一个关系S的主键所对应的属性集F,则称F为R的外键。

并称关系S为参照关系,关系R为依赖关系。

例如,职工关系和部门关系分别为:

职工(职工编号,姓名,部门编号,性别,年龄,身份证号码)

部门(部门编号,部门名称,部门经理)

职工关系的主键为职工编号,部门关系的主键为部门编号,在职工关系中,部门编号是它的外键。

更确切地说,部门编号是部门表的主键,将它作为外键放在职工表中,实现两个表之间的联系。

在关系数据库中,表与表之间的联系就是通过公共属性实现的。

我们约定,在主键的属性下面加下划线,在外键的属性下面加波浪线。

4.1.2关系模式、关系子模式和存储模式*

关系模型基本上遵循数据库的三级体系结构。

在关系模型中,概念模式是关系模式的集合,外模式是关系子模式的集合,内模式是存储模式的集合。

1)关系模式

关系模式是对关系的描述,它包括模式名,组成该关系的诸属性名、值域名和模式的主键。

具体的关系称为实例。

一般形式是R(A1,A2,…,An),其中R是关系名,A1,A2,…,An是该关系的属性名,例如关系模式T_C(T,C)。

例如,图4.1是一个教学模型的实体联系图。

实体类型“学生”的属性SNO,SNAME,AGE,SEX,DNAME分别表示学生的学号、姓名、年龄、性别和学生所在系。

实体类型“课程”的属性CNO,CNAME,DNAME,TNAME分别表示课程号、课程名、课程所属系和任课教师。

学生用S表示,课程用C表示。

S和C之间有M:

N的联系(即一个学生可选多门课程,一门课程可以被多个学生选修),联系类型SC的属性成绩用SCORE表示。

图4.1表示的实体联系图(ER图)转换成关系模式集如图4.2所示。

ER图向关系模型的转换技术将在第7章中详细介绍。

表4.2是这个关系模式的实例。

图4.1实体联系图

学生关系模式S(SNO,SNAME,AGE,SEX,DNAME)

课程关系模式C(CNO,CNAME,DNAME,TNAME)选课关系模式SC(SNO,CNO,SCORE)

图4.2关系模式集

表4.2三个关系

SNO

SNAME

AGE

SEX

DNAME

S1

程宏

19

计算机

S3

刘莎莎

18

电子

S4

李刚

20

自动化

S6

蒋天峰

电气

S9

王敏

CNO

CNAME

TNAME

C1

计算机基础

孙立

C2

C3

电子学

钱敏

C4

SCORE

87

79

88

83

76

68

78

64

86

又如图4.1中表示的学生关系的基本情况,相应的关系模式为:

S(SNO,SNAME,AGE,SEX,DNAME)

这个关系模式描述了学生的数据结构,它是图4.1中学生关系(表格)的关系模式。

关系模式是用数据定义语言(DDL)定义的。

关系模式的定义包括:

模式名、属性名、值域名以及模式的主键。

由于不涉及到物理存储方面的描述,因此关系模式仅仅是对数据本身的特征的描述。

2)关系子模式

有时,用户使用的数据不直接来自关系模式中的数据,而是从若干关系模式中抽取满足一定条件的数据。

这种结构可用关系子模式实现。

关系子模式是用户所需数据的结构的描述,其中包括这些数据来自哪些模式和应满足哪些条件。

用户需要用到成绩子模式G(SNO,SNAME,CNO,SCORE)。

子模式G对应的数据来源于表S和表SC,构造时应满足它们的SNO值相等。

子模式G的构造过程如图4.3所示。

图4.3子模式G的定义

子模式定义语言还可以定义用户对数据进行操作的权限,例如是否允许读、修改等。

由于关系子模式来源于多个关系模式,因此是否允许对子模式的数据进行插入和修改就不一定了。

3)存储模式

存储模式描述了关系是如何在物理存储设备上存储的。

关系存储时的基本组织方式是文件。

由于关系模式有键,因此存储一个关系可以用散列方法或索引方法实现。

如果关系中元组数目较少(100以内),那么也可以用堆文件方式实现.此外,还可以对任意的属性集建立辅助索引。

4.1.3关系模型的完整性规则*

关系模型的完整性规则是对数据的约束。

关系模型提供了三类完整性规则,实体完整性规则、参照完整性规则、用户定义的完整性规则。

其中实体完整性规则和参照完整性规则是关系模型必须满足的完整性的约束条件,称为关系完整性规则。

1)实体完整性规则

在图4.4中给出导师表和研究生表,其中导师表的主键是导师编号,研究生表的主键是学号,这两个主键的值在表中是惟一的和确定的,才能有效地标识每一个导师和研究生。

主键不能取空值(NULL),空值不是0,也不是空字符串,是没有值,是不确定的值,所以空值无法标识表中的一行。

为了保证每一个实体有惟一的标识符,主键不能取空值。

实体完整性规则:

关系中元组的主键值不能为空。

例如,图4.4所示研究生表的主键是学号,不包含空的数据项;

导师表的主键是导师编号,也不包含空的数据项,所以,这两个表都满足实体完整性规则。

图4.4完整性约束条件示例

2)参照完整性规则

在关系数据库中,关系与关系之间的联系是通过公共属性实现的。

这个公共属性是一个表的主键和另一个表的外键。

外键必须是另一个表的主键的有效值,或者是一个“空值”。

例如,图4.4中研究生表与导师表之间的联系是通过导师编号实现的,导师编号是导师表的主键、研究生表的外键。

研究生表中的导师编号必须是导师表中导师编号的有效值,或者“空值”,否则,就是非法的数据。

从图4.4所示的研究生表中,我们看到学号为“98107”的研究生没有固定的导师,所以他的导师编号为“空值”;

而学号为“98110"

的研究生的导师编号为“318",由于导师表中不存在导师编号“318”,所以这个值是非法的。

参照完整性规则的形式定义如下:

如果属性集K是关系模式Rl的主键,同时K又是关系模式R2的外键,那么在R2的关系中,K的取值只允许两种可能,或者为空值,或者等于R1关系中某个主键值。

这条规则在使用时,有三点需注意:

(1)外键和相应的主键可以不同名,只要定义在相同值域上即可。

(2)R1和R2也可以是同一个关系模式,表示了同一个关系中不同元组之间的联系。

例如表示课程之间先修联系的模式R(CNO,CNAME,PRE_CNO),其属性表示课程号、课程名、先修课程的课程号,R的主键是CNO,而PRE_CNO就是一个外键,表示PRE_CNO值一定要在关系中存在(某个CNO值)。

(3)外键值是否允许空,应视具体问题而定。

在模式中,若外键是该模式主键中的成分时,则外键值不允许空,否则允许空。

在上述形式定义中,R1称为“参照关系”模式,R2称为“依赖关系”模式。

在软件开发工具PowerBuilder中,分别称为主表和副表;

在VisualFoxPro系统中,分别称为父表和子表。

上述两类完整性规则是关系模型必须满足的规则,应该由系统自动支持。

3)用户定义的完整性规则

这是针对某一具体数据的约束条件,由应用环境决定。

它反映某一具体应用所涉及的数据必须满足的语义要求。

系统应提供定义和检验这类完整性的机制,以便用统一的系统方法处理它们,不再由应用程序承担这项工作。

例如学生成绩应该大于或等于零,职工的工龄应小于年龄,人的身高不能超过3米,等等。

4.1.4关系数据库模式

一个关系数据库是多个关系的集合,这些具体关系构成了关系数据库的实例。

由于每个关系都有一个模式,所以,构成该关系数据库的所有关系模式的集合构成了关系数据库模式。

例如,一个学生选课数据库系统的模式有下面三个关系模式构成:

S(SNO,SNAME,SEX,AGE,DNAME)

C(CNO,CNAME,PRE_CNO)

SC(SNO,CNO,SCORE)

关系数据库管理系统一般向用户提供四种基本数据操纵功能:

(1)数据检索。

数据检索是指按照用户指定的条件查询一个关系内的数据或多个关系间的数据。

对一个关系内数据的检索主要是选择一些指定的属性(列的指定)或选择满足某些逻辑条件的元组(行的选择)。

而对多个关系间数据的检索可以分解为:

先将多个关系合并成一个大关系,然后检索合并后的关系。

对多个关系的合并过程也是两个关系两个关系逐步进行的。

如有三个关系A,B和C,可以先将A与B合并成D,然后合并C与D。

因此,数据检索可分解成三个基本步骤:

①一个关系内属性的指定;

②一个关系内元组的指定;

③两个关系的合并。

(2)数据插入。

在关系内插入一些新的元组。

(3)数据删除。

在关系内删除一些元组。

(4)数据修改。

该操作实际上可分解为两个更基本的操作:

先删除要修改的元组,再将修改后的元组插入。

这两个操作前面已有。

可见,数据修改本身不是一个独立操作。

上述四类数据操作的对象都是关系,这样,对关系模型的数据操纵可描述为:

(1)操纵对象是关系。

(2)基本操纵方式有五种:

Ø

属性指定,指定一个关系内的某些属性,确定二维表中的列。

主要用于检索或定位。

元组选择,用一个逻辑表达式给出一个关系中满足此条件的那些元组,确定二维表中的行。

关系合并,将两个关系合并成一个关系。

用以合并多张表,从而实现多张表间的检索和定位。

元组插人。

在一个关系中添加一些元组,用以完成数据插人或修改。

元组删除。

先确定所要删除的元组,然后将它(们)删除。

用于数据删除或修改。

4.2关系数据库的用户接口和关系数据语言

和其他数据库系统一样,关系数据库系统的用户也是通过数据库语言与数据库系统通信的。

作为用户与关系数据库之间接口的关系数据库管理系统(RDBMS),为用户提供关系数据语言。

数据库语言常常由数据定义语言(DDL)和数据操纵语言(DML)等部分组成,但RDBMS往往几部分语言融为一体,统称为关系数据(查询)语言。

关系数据语言也分为独立型和宿主型两种,其发展趋势是,大部分关系数据库语言都以某种方式与宿主编程语言(HostProgrammingLanguage)接口。

目前比较广泛的是与C,VisualC++,VisualBasic等语言的接口。

这些接口主要是面向应用程序员用户。

关系数据语言与宿主语言的接口有三种实现方式:

显式过程调用、隐式过程调用和按系统固有语法调用。

显式过程调用接口是指用程序语言编写的程序调用专门的数据库过程,如同调用宿主语言的函数一样。

该过程与程序分开编写,由数据库系统处理,典型例子是关系数据库Oracle调用接口OCI。

隐式过程调用是指在用宿主语言编程时按某种约定写出数据库语句,由预编译程序从程序中区分出数据库语句,如嵌人式SQL。

最后一种情况是按系统本来语法接口,即将数据库语言嵌人到编程语言中,主要例子是将数据库定义和操纵功能嵌人到COBOL语言。

目前,开放性是数据库的重要指标之一。

在这种情况下,ODBC(开放数据库连接)也许是使用最广泛的一种接口,它为访问不同数据库资源提供了一个标准接口。

这些资源可以是简单的文本,如ASCII文本或数据库MSAccess和FoxPro等;

也可以是比较高级的关系数据库如Oracle、Informix等。

通过ODBC访问数据库,实际上是一种显式过程(函数)调用。

ODBC功能强,使用方便,很容易实现不同数据库产品的互联,应尽可能掌握。

4.3关系代数

既然把二维表看成关系,那么,就可以用关系代数作为语言对关系进行操作。

关系代数是处理关系数据的重要数学基础之一,它为从一些关系生成另一些新关系提供了简单而又非常有用的方法,许多著名的关系数据库语言(如SQL等)都是基于关系代数开发的。

在第2章2.5关系数据模型这一节在我们已对关系进行了简单的介绍。

在关系代数中,用户对关系数据的所有查询操作都是通过关系代数表达式描述的,一个查询就是一个关系代数表达式。

任何一个关系代数表达式都由运算符和作为运算分量的关系构成。

关系运算符分为两大类:

一类是传统的集合运算符,包括并、、差、笛卡儿积;

另一类是专门的关系运算,包括:

(1)选留部分数据的运算,如选择某些行(元组)或投影出某些列(属性)等。

(2)组合两个关系元组的操作,如连接运算等。

传统的集合运算包括关系的并、交、差和笛卡儿积,它们都是二目运算。

在进行关系的并、交、差运算时,假定参与运算的关系R和S具有相同的目n,相应的属性取自同一个域,而且两个关系的属性排列次序一样,这意味着R和S具有相同的结构,称它们为相容(或同构)关系,这是对关系进行并、交、差运算的前提条件。

4.3.1关系代数的五个基本操作

在关系代数运算中,选择(σ))、投影(Π)、并(∪)、差(-)、笛卡儿乘积(×

)五种运算为关系代数的基本运算。

关系代数操作集{σ,Π,∪,-,×

}是个完备的操作集,任何其他关系代数操作(如交、连接等)都可以用这五种操作来表示。

1)并运算(Union)

设关系R和S具有相同的元数n(即两关系都有n个属性),相应的属性取自同一个域,则关系R和关系S的并是由属于R或属于S的元组组成,其结果仍然是一个n目关系。

记为R∪S,形式定义如下:

R∪S={t|t∈R∨t∈S},t是元组变量。

两个关系的并运算是将两个关系中的所有元组构成一个新关系。

并运算要求两个关系属性的性质必须一致全并运算的结果要消除重复的元组,并运算可用于完成元组插入操作。

有库存和进货两个表(见表4-3),要将两个表合并为一个表,可利用并运算来实现。

表4-3关系代数的并运算

2)差运算(Difference)

设关系R和S具有相同的元数n,相应的属性取自同一个域,则关系R和关系S的差是由属于R但不属于S的元组的所有元组组成,其结果仍然是一个n目关系。

记为R-S,形式定义如下:

R∪S={t|t∈R∧t∉S},t是元组变量。

有考生成绩合格者名单和身体不合格名单两个关系,按录取条件将成绩合格且身体健康的考生中产生录取名单关系。

这个任务可以用差运算来完成(见表4-4)。

表4-4关系代数的差运算

[例4-2]例如:

书上P63页的例4-2,设有相容关系WORKER和MANAGER,如表4-5(a)、(b)所示,对它们进行的并、差运算的结果也如表4-5(c)、(d)所示。

表4-5(a)WORKER(职工)

E#

NA

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1