三级数据库第五章考试要点
第五章
一、关系数据库系统概述(一)关系数据库系统
关系数据库系统是支持关系数据模型的数据库系统。关系数据库应用数学方法来处理数据库中的数据。最早提出将这类方法用于数据处理的是1962年CODASYL发表的“信息代数”一文,之后有1968年David Child在7090机上实现的集合论数据结构,但系统而严格地提出关系模型的是美国IBM公司的E.F.Codd。1970年E.F.Codd连续发表了多篇论文,奠定了关系数据库的理论基础。
(二)关系数据模型
关系数据模型由关系数据结构、关系操作集合和关系完整性约束3大要素组成。
(1)关系数据结构关系模型的数据结构单一,在关系模型中,现实世界的实体以及实体间的各种联系均用关系来表示。在用户看来,关系模型中数据的逻辑结构是一张二维表。
(2)关系操作集合关系模型中常用的关系操作包括:选择(select)、投影(project)、连接(join)、除(divide)、并(union)、交(intersection)、差(difference)等,以及查询(query)操作和增(insert)、删(delete)、改(update)操作两大部分。查询的表达能力是其中最主要的部分。关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一个集合(set-at-a-time)的方式。相应地,非关系数据模型的数据操作方式则为一次一个记录(record-at-a-time)的方式。关系模型给出了关系操作的能力和特点,关系操作通过关系语言实现。关系语言的特点(它的优点)是高度非过程化,所谓非过程化是指:①用户不必请求DBA为他建立特殊的存取路径,存取路径的选择由DBMS的优化机制来完成。②用户也不必求助于循环,递归来完成数据的重复操作。
(3)关系的完整性约束数据库的数据完整性是指数据库中数据的正确性和相容性,那是一种语义概念,包括两个方面:①与现实世界中应用需求的数据的相容性和正确性。②数据库内数据之间的相容性和正确性。
二、关系模型的数据结构(一)关系模型的数据结构和基本术语
在关系数据模型(relation model)中,数据结构用单一的二维表结构来表示实体及实体间的联系。
(1)关系(relation):一个关系对应一个二维表,二维表就是关系名。
(2)属性(attribute)和值域(domain):在二维表中的列(字段),称为属性。属性的个数称为关系的元数,列的值称为属性值;属性值的取值范围称为值域。
(3)关系模式(relation schema):在二维表中的行定义(记录的型),即对关系的描述称为关系模式,一般表示为:关系名(属性1,属性2,…,属性n)
(4)元组(tuple):在二维表中的一行(记录的值),称为一个元组。关系模式和元组的集合通称为关系。
(5)分量(component):元组中的一个属性值
(6)候选码(candidate key)或候选键:如果在一个关系中,存在多个属性(或属性组合)都能用来惟一标识该关系的元组,这些属性(或属性组合)都称为该关系的候选码或候选键。
(7)主码(primary key)或主键:在一个关系的若干个候选码中指定一个用来惟一标识该关系的元组,这个被指定的候选码称为该关系的主码或主键。
(8)主属性(primary attribute)和非主属性(nonprimary attribute):关系中包含在任何一个候选码中的属性称为主属性或码属性,不包含在任何一个候选码中的属性称为非主属性或非码属性。
(9)外码(foreign key)或外键:当关系中的某个属性(或属性组)虽然不是该关系的主码或只是主码的一部分,但却是另一个关系的主码时,称该属性(或属性组)为这个关系的外码。
(10)参照关系(referencing relation)与被参照关系(referencing relation):参照关系也称从关系,被参照关系也称主关系,它们是指以外码相关联的两个关系。以外码作为主码的关系称为被参照关系;外码所在的关系称为参照关系或目标关系(target relation)。由此可见,被参照关系与参照关系是通过外码相联系的,这种联系通常是1:n的联系。对于数据库要分清型(type)和值(value)的概念,数据库的型是指对数据库的结构和属性的说明,关系数据库的型即对关系数据库结构的描述,它包括若干关系集合。数据库的值是型的一个具体赋值,关系数据库的值是这些关系模式在某一时刻对应的关系的集合。所以,数据库的型亦称为数据库的内涵(intention),数据库的值亦称为数据库的外延(extensive)。数据库的型是稳定的,而数据库的值是随时间不断变化的,因为数据库中的数据在不断变更。
(二)关系的形式定义和关系数据库对关系的限定
1.关系的形式定义
从数学的观点定义关系称为关系的形式定义。有如下两种定义方法:
(1)用集合论的观点定义关系:关系是一个元数为K的元组集合,即这个关系有若干个元组,每个元组有K个属性值(把关系看成一个集合,集合中的元素是元组)。
(2)用值域的概念来定义关系:关系是属性值域笛卡尔积的一个子集。设一个关系的属性是A 1 ,…,An,其对应的值域为D 1 …,D n (也可以有相同的),定义D 1 ,…,D n 的笛卡尔积D=D 1 ×D 2 …×D n ={(d 1 ,…,d n )|d i ∈Di,1≤i≤n}。D中的每一个子集称为关系。这里D的元素(d , …,d n )就是一个n元元组(n-tuple),元素中的每一个值di称为元组的一个分量。若Di(i=1,2…,,n)为有限集,其基数(Cardinal numder)为mi(i=1,2,…,n),则D 1 ×D 2 ×…D n 的基数M为 M=- n i=1 mi笛卡尔积可表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域。
2.关系数据库对关系的限定
(1)每一个属性是不可分解的。这是关系数据库对关系的最基本的一条限定,要求关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表。
(2)每一个关系模式中属性的数据类型以及属性的个数是固定的,并且每个属性必须命名,在同一个关系模式中,属性名必须是不同的。
(3)每一个关系仅仅有一种记录类型,即一种关系模式。
(4)在关系中元组的顺序(即行序)是无关紧要的。
(5)在关系中属性的顺序可任意交换,交换时应连同属性名一起交换才行,否则顺序是重要的。
(6)同一个关系中不允许出现完全相同的元组。
三、关系模型的完整性约束(一)数据库数据完整性规则的分类
数据完整性由完整性规则来定义,关系模型的完整性规则是对关系的某种约束条件。关系模型中可以有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。在对关系数据库执行插入、删除和修改操作时,必须遵循下述三类完整性规则:
(1)实体完整性规则(entity integrity rule)关系中的元组在组成主键的属性上不能有空值。
(2)参照完整性规则(reference integrity rule)外键的值不允许参照不存在的相应表的主键的值,或者外键为空值。
(3)用户定义的完整性规则 用户定义的完整性规则是用户根据具体应用的语义要求,利用DBMS提供的定义和检验这类完整性规则的机制,用户自己定义的完整性规则。
(二)实体完整性规则
实体完整性规则是对关系中的主属性值的约束,即:实体完整性规则 若属性A是关系R的主属性,则属性A不能取空值。实体完整性规则规定关系的所有主属性都不能取空值,而不仅是主码整体不能取空值。
对于实体完整性规则说明如下:
(1)实体完整性规则是针对关系而言的。一个关系通常对应现实世界的一个实体集。例如,学生关系对应于现实世界中学生的集合。
(2)现实世界中的实体是可区分的,即它们具有某种惟一性标记。
(3)相应地,关系模型中以主码作为惟一性标识。
(4)主码中的属性即主属性不能取空值。所谓空值就是“不知道”或“无意义”的值。如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此,这个规则称为实体完整性规则。
(三)参照完整性规则
现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这样就自然存在着关系与关系之间的参照(引用)。参照完整性规则 若属性(或属性组)F是关系R的外码,它与关系S的主码K s 相对应(关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:①或者取空值(F的每个属性值均为空值);②或者等于S中某个元组的主码值。
(四)用户定义的完整性
用户定义的完整性通常是定义对关系中除主码与外码属性之外的其他属性取值的约束,即对其他属性的值域的约束。对属性的值域的约束也称为域完整性规则(domain integrity rule),是指对关系中属性取值的正确性限制,包括数据类型、精度、取值范围,是否允许空值等。取值范围又可分为静态定义和动态定义两种:静态定义取值范围是指属性的值域范围是固定的,可从定义值的集合中提取特定值;动态定义取值范围是指属性的值域范围依赖于另一个或多个其他属性的值。为了护维数据库中数据的完整性,在对关系数据库执行插入、删除和修改操作时,就要检查是否满足上述三类完整性规则。①当执行插入操作时,首先检查实体完整性规则,插入行在主码属性上的值,是否已经存在。若不存在,可以执行插入操作;否则不可以执行插入操作。再检查参照完整性规则,如果是向被参照关系插入,不需要考虑参照完整性规则;如果是向参照关系插入,插入行在外码属性上的值是否已经在相应被参照关系的码属性值中存在。若存在,可以执行插入操作;否则不可以执行插入操作,或将插入行在外码属性上的值改为空值后再执行插入操作(假定该外码允许取空值)。最后检查用户定义完整性规则,检查要被插入的关系中是否定义了用户定义完整性规则,如果定义了,检查插入行在相应属性上的值是否遵守用户定义完整性规则。若遵守,可以执行插入操作;否则不可以执行插入操作。②当执行删除操作时,一般只需要检查参照完整性规则。如果是删除被参照关系中的行,检查被删除行在主码属性上的值是否正在被相应的参照关系的外码引用,若不被引用,可以执行删除操作;若正在被引用,有三种可能的做法:不可以执行删除操作(拒绝删除),或将参照关系中相应行在外码属性上的值改为空值后再执行删除操作(空值删除),或将参照关系中相应行一起删除(级联删除)。③当执行更新操作时,因为更新操作可看成是先执行删除操作,再执行插入操作,因此是上述两种情况的综合。
四、关系代数关系代数的运算可分为两类:①传统的集合运算 这类运算将关系看成是元组的集合,其运算是从关系的“水平”方向,即行的角度来进行的,有:并、交、差、广义笛卡尔积。②专门的关系运算 这类运算不仅涉及行而且涉及列,有:选择、投影、连接、除。
(一)传统的集合运算
1.并(union)
设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的元组组成。其结果关系仍为n目关系,记作: R∪S={t/t∈R∨t∈S} t是元组变量
2.差(difference)
设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成。其结果关系仍为n目关系,记作: R-S={t/t∈R∧t∈S}
3.交(intersection)
设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的交由既属于R又属于S的元组组成,其结果关系仍为n目关系,记作: R∩S={t/t∈R∧t∈S}显然R∩S=R-(R-S)。
4.广义笛卡尔积(extended cartesian product)
设关系R和S的元数分别是r和s,定义R和S的笛卡尔积是一个(r+s)元元组的集合,每一个元组的前r个分量来自R的一个元组,后s个分量来自S的一个元组。若R有k 1 个元组,S有k 2 个元组,则关系R和关系S的广义笛卡尔积有k 1 ×k 2 个元组,记作: R×S={t/t=
(二)专门的关系运算
(1)设关系模式为R(A1,A2 ,…,An),它的一个关系设为R。t∈R表示t是R的一个元组。t[Ai]]则表示元组t中相应于属性Ai的一个分量。
(2)若A={Ai1 ,Ai2 ,…,Aik },其中Ai1 ,Ai2 ,…,Aik 是A1 ,A2 ,…,An 中的一部分,则A称为属性列或是域列。t[A]=(t[Ai1 ],t[Ai2 ],…,[Aik ])表示元组t在属性列A上诸分量的集合。A则表示{A1 ,A2 ,…,An }中去掉{Ai1 ,Ai2 ,…,Aik }后剩余的属性组。
(3)设R为n目关系,S为m目关系。tr ∈R,ts ∈S,trts称为元组的连接(concatenation)。它是一个(n+m)列的元组,前n个分量为R中的一个元组,后m个分量为S中的一个元组。
(4)给定一个关系R(X,Z),X和Z为属性组。我们定义,当t[X]=x时,x在R中的象集(images set)为 Zx ={t[Z]/t∈R,t[X]=x}它表示R中属性组X上值为x的诸元组在Z上分量的集合。下面阐述专门的关系运算的定义。
1.选择(selection)
选择又称为限制(restriction)。它是在关系R中选择满足给定条件的诸元组,记作: F (R)={t/t∈R∧F(t)=′真′}其中F表示选择条件,它是一个逻辑表达式,取逻辑值′真′或′假′。逻辑表达式F的基本形式为X1θY1[φX2θY2 ]…θ表示比较运算符,它可以是>、≥、<、≤、=、≠。X1 ,Y1 等是属性名或常量或简单函数。属性名也可以用它的序号来代替。φ表示逻辑运算符,它可是 、∧或∨。[]表示任选项,即[]中的部分可以要也可以不要,…表示上述格式可以重复下去。选择运算实际上是从关系R中选取使逻辑表达式F为真的元组,这是从行的角度进行的运算。
2.投影(projection)
对关系R的投影操作,实际上是从R中选择出若干属性列组成新的关系,记作: - A (R)={t[A]/t∈R}其中A为R的属性列。投影操作实际上是从关系中选取某些属性列,即从列的角度进行的运算。
3.连接(join)
连接也称为θ连接,它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组,连接运算中有两种最为重要也最为常用的连接,一种是等值连接(equi-join),另一种是自然连接(natural join)。
(1)等值连接:若θ为“=”的连接运算称为等值连接。它是从关系R与S的笛卡尔积中选取A,B属性值相等的那些元组。
(2)自然连接(natural join):是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。
一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
自然连接是构造新关系的有效方法,投影和选择是分解关系的有效方法。利用投影、选择和自然连接操作可以任意地分解和构造新关系。一般,自然连接使用在R和S有公共属性的情况中。如果两个关系没有公共属性,那么它们的自然连接就变成为笛卡尔积。
4.除(division)
给定关系(R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P与R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yr 包含S在Y上投影的集合。
就业数据资源平台