关系数据库

第二章 关系数据库

本书第2~6章、第8章和第9章将集中讨论关系数据库的有关问题。其中,第2章讲解关系模型的基本概念,即关系模型的数据结构、关系操作和关系的完整性:第3、4、5章介绍关系数据库标准语言SQL的数据定义、数据查询、数据更新、数据安全性和完整性控制等功能:第6章介绍关系数据理论,这是关系数据库的理论基础,也是关系数据库系统逻辑设计的工具;第8章介绍如何通过编程方法对关系数据库进行操纵:第9章讲解关系数据库查询处理和查询优化。

其中2.1节讲解关系数据结构,包括关系的形式化定义及有关概念:2.2节讲解关系操作:2.3节讲解关系的三类完整性约束,2.4节讲解关系代数,这是关系数据库系统中实现关系操作的一种语言:最后,在2.5节介绍关系演算。

2.1关系数据结构及形式化定义
2.1.1关系
1.域:

域是一组具有相同数据类型的值的集合。
比如:自然数,整数,名字,在一个班的学生学号

2.笛卡儿积:

笛卡儿积是域上的一种集合运算。
定义2.2给定一组域D1,D2…Dn,允许其中某些域是相同的,D1,D2,…,Dn的笛卡儿积为:

其中,每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple),或简称元组(tuple)。元素中的每一个值di叫做一个分量( component)。1个域允许的不同取值个数称为这个域的基数( cardinal number)。

笛卡儿积可表示为一张二维表。表中的每行对应一个元组,表中的每一列的值来自1个域。
例子:不是所有元组都是有意义的。


有三个D,也就是域,意味着有三个列,每一列的值来自每个域。行数等于每个域的基数相乘。每一行是一个元组

3.关系:

D1×D2×…×D的子集叫做在域D,D2…Dn上的关系,表示为
R(D1,D2,…,Dn)。这里R表示关系的名字,n是关系的目或度( degree)

关系中的每个元素是关系中的元组,通常用t表示。
当n=1时,称该关系为单元关系( unary relation),或一元关系。
当n=2时,称该关系为二元关系( binary relation)。

因为域可以相同,为了加以区分,必须对每列起个名字,称作属性。我之前说每一列代表一个域,应该是这样,但是域可以相同,为了区分,把另一个相同的域改个名称。

若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为(这句话看不懂后面的而其子集不能,什么勾巴东西。)
候选码( candidate key)。

若一个关系有多个候选码,则选定其中一个为主码( primary key)

候选码的诸属性称为主属性( prime attribute)。不包含在任何候选码中的属性称为非主属性(non- prime attribute)或非码属性(non- key attribute)

在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码( all-key)

这里没怎么看懂,唯一标识元组那里。

关系可以有三种类型:基本关系(通常又称为基本表或基表)、查询表和视图表。

其中,1.基本表是实际存在的表,它是实际存储数据的逻辑表示;2.查询表是查询结果对应的表;3.视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。

基本关系具有以下六条性质:
(1)列是同质的( homogeneous),即每一列中的分量是同一类型的数据,来自同一个域
(2)不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。例如,在上面的例子中,也可以只给出两个域
人( PERSON)={张清玫,刘逸,李勇,刘晨,王敏}
专业( SPECIALITY)={计算机专业,信息专业}
SAP关系的导师属性和研究生属性都从 PERSON域中取值。为了避免混淆,必须给这两个属性取不同的属性名,而不能直接使用域名。例如,定义导师属性名为SUPERVISOR- PERSON(或 SUPERVISOR),研究生属性名为 POSTGRADUATE- PERSON(或 POSTGRADUATE)。
(3)列的顺序无所谓,即列的次序可以任意交换。由于列顺序是无关紧要的,因此在许多实际关系数据库产品中增加新属性时,永远是插至最后一列。
(4)任意两个元组的候选码不能取相同的值。
(5)行的顺序无所谓,即行的次序可以任意交换
(6)分量必须取原子值,即每一个分量都必须是不可分的数据项
(元组和记录是同一个概念)

2.1.2 关系模式

关系模式:关系的描述称为关系模式( relation schema)。它可以形式化地表示为R(U, D, DOM, F)

其中R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合

R是关系名,A1,An是属性名

2.1.3关系数据库

关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的描述。关系数据库模式包括若干域的定义,以及在这些域上定义的若干关系模式关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库。

2.1.4关系模型的存储结构
我们已经知道,在关系数据模型中实体及实体间的联系都用表来表示,但表是关系数据的逻辑模型。在关系数据库的物理组织中,有的关系数据库管理系统中一个表对应一个操作系统文件,将物理数据组织交给操作系统完成;有的关系数据库管理系统从操作系统那里申请若干个大的文件,自己划分文件空间,组织表、索引等存储结构,并进行存储管理

2.2 关系操作

2.2.1 基本的关系操作
关系模型中常用的关系操作包括查询( query)操作和插入( Insert)、删除( delete)修改( update)操作两大部分。

关系的查询表达能力很强,是关系操作中最主要的部分。

查询:可以分为选择( select)、投影( project)、连接(join)、除( divide)、并( union)、差( except)、交( Intersection)笛卡儿积等。其中选择、投影、并、差、笛卡儿积是5种基本操作,其他操作可以用基本操作来定义和导出,就像乘法可以用加法来定义和导出一样

关系操作(次一集合(set-ata-time))的特点:集合操作方式,即操作的对象和结果都是集合。

非关系数据模型的数据操作方式则为一次记录( record-ata-time)的方式

2.2.2 关系数据语言的分类
早期的关系操作能力通常用代数方式或逻辑方式来表示,分别称为关系代数( relationalalgebra)和关系演算( relational calculus)。关系代数用对关系的运算来表达查询要求,关系演算则用谓词来表达查询要求。关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。一个关系数据语言能够表示关系代数可以表示的查询,称为具有完备的表达能力,简称关系完备性。已经证明关系代数、元组关系演算和域关系演算三种语言在表达能力上是等价的,都具有完备的表达能力
关系代数、元组关系演算和域关系演算均是抽象的查询语言,这些抽象的语言与具体的关系数据库管理系统中实现的实际语言并不完全一样。但它们能用作评估实际系统中查询语言能力的标准或基础。实际的查询语言除了提供关系代数或关系演算的功能外,还提供了许多附加功能,例如聚集函数( aggregation function)、关系赋值、算术运算等,使得目前实际查询语言的功能十分强大
另外,还有一种介于关系代数和关系演算之间的结构化査询语言( Structured Query
Language,SQL)。SOL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、数据定义语言、数据操纵语言和数据控制语言( Data Control Language,DCL)于
一体的关系数据语言。它充分体现了关系数据语言的特点和优点,是关系数据库的标准语言

2.3 关系的完整性
关系模型中有三类完整性约束:实体完整性( entity integrity)、参照完整性( referential Integrity)和用户定义的完整性(user- defined integrity)。

其中实体完整性和参照完整性是关系模型必须满足的完整性约東条件,被称作是关系的两个不变性,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。

2.3.1 实体完整性
规则2.1实体完整性规则若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值( null value)。所谓空值就是“不知道”或“不存在”或“无意义”的值。

例如,学生(学号,姓名,性别,专业号,年龄)关系中学号为主码,则学号不能取空值。

按照实体完整性规则的规定,如果主码由若干属性组成,则所有这些主属性都不能取空值。例如选修(学号,课程号,成绩)关系中,“学号、课程号”为主码,则“学号”和课程号”两个属性都不能取空值。

对于实体完整性规则说明如下:
(1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。例如学生关系对应于学生的集合。
(2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。例如每个学生都是独立的个体,是不一样的。
(3)相应地,关系模型中以主码作为唯一性标识。
(4)主码中的属性即主属性不能取空值。如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。

2.3.2参照完整性

存在关系与关系间的引用,相互约束。

定义:设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与K,相对应,则称F是R的外码( foreign key),并称基本关系R为参照关系( referencing relation),基本关系S为被参照关系( referenced relation)或目标关系( target relation)。关系R和S不一定是不同的关系

这里我又看不懂了:不是关系R的码。指的是什么?码是主码的意思吗?

需要指出的是,外码并不一定要与相应的主码同名。
规则2.2参照完整性规则若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:
1.或者取空值(F的每个属性值均为空值)
2.或者等于S中某个元组的主码值。
例如,对于例2.1,学生关系中每个元组的“专业号”属性只能取下面两类值空值,表示尚未给该学生分配专业非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中。即被参照关系“专业”中一定存在一个元组,它的主码值等于该参照关系“学生”中的外码值。

2.3.3用户定义的完整性

不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。例如某个属性必须取唯一值、某个非主属性不能取空值。

关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不需由应用程序承担这一功能。

2.4关系代数
关系代数是一种抽象的査询语言,它用对关系的运算来表达查询。

运算对象、运算符、运算结果是运算的三大要素。

关系代数的运算对象是关系,结果也是关系。
运算符:集合运算符和专门的关系运算符。

关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类。

2.4.1传统的集合运算

传统的集合运算是二目运算,包括并、差、交、笛卡儿积4种运算。
设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组。
(1)并( union)

(2)差( except

(3)交( Intersection)

(4)笛卡儿积( cartesian product

我看了下这四种运算。

我懂了

2.4.2专门的关系运算
专门的关系运算包括选择、投影、连接、除运算等。
这个仔细看了也能看懂。理解了也比较简单。

先引入几个记号

1.选择(selection)(行角度)
选择又称为限制( restriction)。它是在关系R中选择满足给定条件的诸元组。

其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。

其中θ表示比较运算符。X1,Y1等是属性名、常量或者简单函数。


2.投影(projector)(从列的角度进行的运算)
关系R上的投影是从R中选择出若干属性列组成新的关系。记作:

其中A为R中的属性列。
例子:

意思是由student里面的两个属性,即sname,sdept组成的新关系

3.连接(join)

A和B分别为R和S上列数相等且可比的属性组(这个意思大概是列数相等,应该就是属性一样吧,可比就是可以使用关系运算符吧),θ是比较运算符。是比较运算符。

连接运算从R和S的笛卡儿积RxS中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ的元组。

等值连接:θ为“=”的连接运算称为等值连接

自然连接是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,
并且在结果中把重复的属性列去掉。即若R和S中具有相同的属性组B,U为R和S的全体属性集合,则自然连接可记作:

一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。

悬浮元组:

*2.5 关系演算(打星号的不知道是不是不要学)
2.5.1元组关系演算语言 ALPHA
ALPHA语言主要有GET、PUT、HOLD、 UPDATE、 DELETE、DROP6条语句,语句的基本格式为:

操作语句 工作空间名(表达式):操作条件

其中表达式用于指定语句的操作对象,它可以是关系名或(和)属性名,一条语句可以同时操作多个关系或多个属性。操作条件是一个逻辑表达式,用于将操作结果限定在满足条件的元组中,操作条件可以为空。除此之外,还可以在基本格式的基础上加上排序要求以及指定返回元组的条数等

1.检索操作

2.更新操作

2.5.2元组关系演算

你可能感兴趣的:(关系数据库)