3.1关系数据模型和关系数据库
关系模型由关系模型的数据结构、关系模型的操作集合和关系模型的、完整性约束三部分组成,这三部分也称为关系模型的三要素。
3.1.1数据结构:关系数据模型源于数学,它用二维表来组织数据,而这个二维表在关系数据库中就称为关系。关系数据库就是表或者说是关系的集合。
3.1.2数据操作:
传统的关系运算:并、交、差、广义笛卡尔乘积。
专门的关系运算:选择、投影、连接、除。
有关的数据操作:查询、插入、删除和更改。
关系模型的操作对象是集合(或表),而不是单个的数据行,也就是说,关系模型中操作的数据以及操作的结果(查询操作的结果)都是完整的集合(或表),这些集合可以是只包含一行数据的集合,也可以是不包含任何数据的空集合。而非在关系模型数据库中典型的操作是一次一行或一次一个记录。因此,集合处理能力是关系型数据库区别于其他类型数据库的一个重要特征。
在非关系模式中,各个数据记录之间是通过指针等方式连接的,当要定位到某条记录时需要用户自己按指针的链接方向遍历查找,我们称这种查找方式为用户“导航”。
3.1.3 数据完整性约束
在数据库中数据的完整性是指保证数据正确性的特征。数据完整性是一种语义概念,它包括两个放方面:
(1)与现实世界中应用需求的数据的相容性和正确性。
(2)数据库内数据之间的相容性和正确性。
数据完整性由一组完整性规则定义,而关系模型的完整性规则是对关系的某种约束条件。在关系数据模型中一般将数据完整性分为三类,即实体完整性、参照完整性和用户定义的完整性。
3.2 关系模型的基本术语与形式化定义
3.2.1基本术语
1、关系:关系就是二维表,二维表的名族就是关系的名字。
2、属性:二维表中的每个列称为一个属性,每个属性(或叫字段)由一个名字,称为属性名。二维表中对应某一列的值称为属性值,二维表中列的个数称为关系的元数。如果一个二维表由n个列,则称其为n元关系。
3、值域:二维表中属性的取值范围称为值域。
4、元组:二维表中的一行数据称为一个元组。
5、分量:元组中的每一个属性值称为元组的一个分量,n元关系的每个元组有n个分量。
6、关系模式:二维表的结构称为关系模式,或者说,关系模式就是二维表的表框架或表头结构。如果将关系模式理解为数据类型,则关系就是该数据类型的一个具体值。
7、关系数据库:对应于一个关系模型的所有关系的集合称为关系数据库。
8、候选键:如果一个属性或属性集的值能够唯一标识一个关系的元组而又不包含多余的属性,则称该属性或属性集为候选键。候选键又称为候选关键字或候选码。在一个关系上可以有多个候选键。
9、主键:当一个关系中有多个候选键时,可以从中选择一个作为主键。每个关系只能拿有一个主键。主键也称为主码或主关键字,是表中的属性或属性组,用于唯一地确定一个元组。主键可以由一个属性组成,也可以由多个属性共同组成。我们称由多个属性共同组成的主键为复合主键。当某个表是由多个属性共同作为主键时,我们就用括号将这些属性括起来,表示共同作为主键。
10、主属性和非主属性:包含在任一候选键中的属性称为主属性;不包含在任一候选键中的属性称为非主属性。
3.2.2形式化定义
1、关系的形式化定义
为了给出关系的形式化定义,首先定义笛卡尔积:
设D1,D2,……,Dn为任意集合,定义笛卡尔积D1,D2,……,Dn为:
D1xD2X……XDn={(d1,d2,……,dn)|di属于Di,i=1,2,……,n}
其中每一个元素(d1,d2,……,dn)称为一个n元组,简称元组。元组中每一个di称为是一个分量。
形式化的关系定义同样可以把关系看成二维表,给表中的每个列去一个名字,称为属性。n元关系有n个属性,一个关系中的属性的名字必须是唯一的。属性Di的取值范围(i=1,2,……,n)称为该属性的值域。
2、对关系的限定
(1)关系中的每个分量都必须是不可再分的最小属性。
(2)表中列的数据类型是固定的,即列中的每个分量都是同类型的数据,来自相同的值域。
(3)不同列的数据可以取自相同的值域,每个列称为一个属性,每个属性有不同的属性名。
(4)关系表中列的顺序不重要。
(5)行的顺序也不重要。
(6)同一个关系中的元组不能重复。
3.3关系代数
关系模式源于数学,关系是由元组构成的集合,可以通过关系的运算来表达查询要求,而关系代数恰恰是关系操作语言的一种传统的表示方式,它是一种抽象的查询语言。
关系代数是一种纯理论语言,它定义了一些操作,运用这些操作可以从一个或多个关系中得到另一个关系,而不改变源关系。因此,关系代数的操作数和操作结果都是关系,而且一个操作的输出可以是零一操作的输出。
关系代数的运算对象是关系,运算结果也是关系。与一般的运算一样,运算对象、运算符和运算结果是关系代数的3大要素。
关系代数的运算可分为以下两大类:
(1)传统的集合运算:广义笛卡尔积运算、并运算、交运算和差运算。
(2)专门的关系运算:选择、投影、连接和除运算。
3.3.1传统的集合运算
1、并运算
设关系R与关系S均是n目关系,关系R与关系S的并记为:
RS={t|t属于Rt属于S}
其结果仍是n目关系,由属于S的元组组成。
2、交运算
设关系R与关系S均是n目关系,关系R与关系S的并记为:
RS={t|t属于Rt属于S}
其结果仍是n目关系,由属于R并且也属于S的元组组成。
3、差运算
设关系R与关系S均是n目关系,关系R与关系S的并记为:
R-S={t|t属于Rt属于S}
其结果仍是n目关系,由属于R并且不属于S的元组组成。
4、广义笛卡尔积
广义笛卡尔积不要钱参加运算的两个关系具有相同的目数。两个分别为m目和n目的关系R和关系S的广义笛卡尔积是一个有(m+n)个列的元组的集合。元组的前m个列是关系R的一个元组,后n个列是关系S的一个元组。若R有K1个元组,S有K2个元组,则关系R和关系S的广义笛卡尔积有K1XK2个元组,记为:
RXS={tr^ts|tr属于Rts属于S}
其中,tr^ts表示由两个元组tr和ts,当且仅当tr属于R且ts属于S时,tr和ts的有序连接即为RXS的一个元组。
3.3.2专门的关系运算
1、选择
选择运算是从指定的关系中选出满足给定条件(用逻辑表达式表示)的元组而组成一个新的关系。选择运算表示为:
选择F(R)={t|t属于RF(t)=ture}
2、投影
投影运算是从关系R中选取干属性,并用这些属性组成一个新的关系。
投影运算表示为:
投影A(R)={t.A|t属于R}
3、连接
连接运算用来连接相互之间有联系的两个关系,从而产生一个新的关系。
连接运算主要有如下几种形式:
(1)setae连接。
(2)等值连接(setae连接的特例)。
(3)自然连接。
(4)外部连接(简称外连接)。
(5)半连接。
4、除
(1)设关系S的属性是关系R的属性的一部分,则R÷S为这样一个关系:
此关系的属性是由属性R但不属于S的所有属性组成;R÷S的任一元组都是R中某元组的一部分。但必须符合下列的要求,即任取R÷S的任一个元组t,则t与S的任一元组连接后,都为R中原有的一个元组。
(2)设有关系R(X,Y)和S(Y,Z),其中X、Y、Z为关系的属性组,则:
R(X,Y)÷S(Y,Z)=R(X,Y)÷投影Y(S)
(3)象集:给定一个关系R(X,Y),X和Y为属性组。定义:当t[X]=x时,x再R中的象集为:
Yx={t[Y]|t属于Rt[X]=x}
式中,t[Y]和t[X]分别表示R中的元组t在属性组Y和X上的分量的集合。