第2章 关系数据库数学模型 本章导读: 2.1 关系模型概述 2.2 关系代数的原理 2.3 关系代数 2.4 关系演算 第2章 关系数据库数学模型 本章导读: 关系数据库是建立在关系模型的基础上,是基于离散数学集合论中的两个基本理论:集合和关系。关系数据库对数据的操作除了包括集合代数的并、交、差等运算之外,更定义了一组专门的关系运算:选择、投影、连接。关系操作的特点是运算的对象和结果都是关系。 知识要点: 关系原理 关系代数 关系演算 2.1 关系模型概述 2.2 关系代数的原理 2.3 关系代数 2.4 关系演算 2.5 关系的规范化
2.1 关系模型概述 关系数据库系统是支持关系模型的数据库系统。关系数据模型是由关系数据结构、关系操作和完整性约束三部分组成。 2.1 关系模型概述 关系数据库系统是支持关系模型的数据库系统。关系数据模型是由关系数据结构、关系操作和完整性约束三部分组成。 2.1.1 关系模型的数据结构 2.1.2 关系模型的数据操作 2.1.3 关系模型的完整性约束
2.1.1 关系模型的数据结构 关系模型的数据结构非常简单,实体及实体之间的联系均是单一的数据结构——关系。在用户看来,关系模型的逻辑结构就是一张没有重复行和重复列的二维表(SQL Server系统中,表存储于数据库中)。表由行和列组成,表中每一行称为元组,每一列称为属性,关系也可以说是元组的集合,所以其元组又称为行或记录,属性又称为列或字段。而在支持关系模型的物理结构中,二维表可以是任何有效的存储结构,如顺序文件、索引、哈希表、指针等。因此,表是对物理结构存储数据的一种抽象表示——对很多存储细节的抽象,如存储记录的位置、记录的顺序、数据值的表示以及记录访问结构,如索引等,对用户来说都是不可见的。
2.1.2 关系模型的数据操作 在关系模型中,操作对象和操作结果都是关系,操作关系的行为定义为关系语言,关系语言根据其所反映的数学含义可分为两类:关系代数语言和关系演算语言。 关系代数语言和关系演算语言均是抽象的语言,这些语言与具体DBMS中实现的实际语言并不完全一致,但它们能用作评估实际数据库系统查询语言能力的基础和标准,而实际的查询语言除了提供关系代数或关系演算的功能外,还提供了许多附加的功能。 关系操作语言还提供了一种介于关系代数和关系演算之间的语言——SQL语言(Structure Query Language,结构化查询语言)。SQL语言集数据定义(DDL)、数据操纵(DML)、数据控制(DCL)为一体,是关系数据库的标准语言。 关系语言是一种高度非过程化的语言,关系的三种语言在表达能力上是完全等价的。
2.1.3 关系模型的完整性约束 为了防止合法用户使用数据时加入不合语义的数据,关系数据模型通过完整性约束实现数据的正确性和相容性,其完整性约束包括:实体完整性、参照完整性和用户定义完整性。 其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系数据库系统自动支持。 1.键及其相关概念 键(Key)是由一个或几个属性组成,在实际应用中,有下列几种键(关键字): (1)超键 也称超码,在一个关系中,若一个属性或属性组的值能够唯一标识关系的中的不同元组,则称该属性或属性组为关系的超键。超键虽然能唯一确定元组,但是它所包含的属性可能有多余的。如学号和性别组合一起可以唯一确定一个元组,是一个超键,但其中包含的属性“性别”则是多余的。 (2)候选键 也称候选码,如果一个属性或属性组的值能够唯一标识关系中的不同元组而不含有多余的属性,则称该属性或属性组为关系的候选键(Candidate key)。换句话说,候选码事是能唯一确定R中某一元组的最小属性集合。与超键的区别是:候选键既能唯一确定元组,又不包含多余的属性,关系中至少含有一个候选键。 (3)主键 简称主键,也称主码,一个关系中,候选关键字可有多个,而被选定作为标识元组唯一性的那个候选键则称为主关键字(Primary key)。主关键字的各个分量均不能为空。
2.1.3 关系模型的完整性约束 (4)外键 也称外码,设F是基本关系R的一个或一组属性,但不是R的键(主键或候选键),如果F与基本关系S的主键K相对应,则称F是R的外键(Foreign key),并称R为参照关系(Referencing relation),S为被参照关系(Referenced relation)或目标关系(Target relation)。 可以这么理解:如果一个属性是其所在关系之外的另外一关系的主键,该属性就是它所在当前关系的外键。外键实质就是外部关系的的主键。 (5)主属性和非主(码)属性 包含在任何一候选码中的属性称为主属性(Primary attribute),不包含在任何候选码中的属性称为非码属性(Non-key attribute)。 (6)全码 在最简单的情况下,候选键只包含一个属性。在最极端的情况下,关系模式的所有属性组是这个关系模式的候选键,称为全码(All-key)。
2.1.3 关系模型的完整性约束 2.完整性约束 (1)实体完整性(Entity Integrity) 【规则2.1】 实体完整性规则:若属性组(或属性)K是基本关系R的主码(主键),则所有元组K的取值唯一,并且K中属性不能全部或部分取空值。 对于实体完整性规则说明如下: ①实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。例如课程关系对应于所有课程实体的集合。 ②现实世界中实体是可区分的,即它们具有某种唯一性标识。相应地,关系模型中以主码作为其唯一性标识。 ③主码中属性即主属性不能取空值,所谓空值就是“不知道”或“无意义”的值。如果主属性取空值,就说明存在不可标识的实体,即存在不可区分的实体,这与客观世界中实体要求唯一标识相矛盾,因此这个规则不是人们强加的,而是现实世界客观的要求。
2.1.3 关系模型的完整性约束 (2)参照完整性(Referential integrity) 现实世界中的实体之间往往存在某种联系的,在关系模型中实体及实体之间的联系都是用关系来描述的,这样就自然存在着关系与关系间的参照。 参照完整性规则就是定义外键与主键之间的引用规则。 【规则2.2】 参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S可能是相同的关系),则对于R中每个元组在F上的值必须取空值(F的每个属性值均为空值)或者等于S中某个元组的主码值。 外键并不一定与相应的主键同名,但在实际应用中,为了便于识别,当外键与相应的主键属于不同关系时,往往取相同名字。当关系R和S是相同的关系时,称之为自身参照。
2.1.3 关系模型的完整性约束 (3)用户定义的完整性(User-defined integrity) 用户定义的完整性是根据应用环境的要求和实际的需要,对关系中的数据所定义的约束条件,它反映的是某一具体应用所涉及的数据必须满足的语义要求。关系模型只提供定义并检验这类完整性的机制,以便于系统用统一的方法来满足用户的需求,而关系模型自身并不去定义任何这类完整性规则。 用户定义完整性包括字段有效性(属性值域的约束)和记录有效性两类,其中对属性值域的约束也称域完整性规则(Domain Integrity Rule),是指对关系中除主键和外键之外的其它属性取值范围的约束定义,包括数据类型、精度、取值范围、是否空值等。 例如选课关系中成绩的取值范围是0~100,学生关系中性别的取值范围为“男”或“女”。
2.2 关系代数的原理 从关系的逻辑结构特征来看,直观上可以将关系看作一个若干元组的集合,关系运算也可以转换成集合的运算。事实上,关系模型的理论基础是集合代数,下面就从集合论角度给出关系数据结构的形式化定义。 2.2.1关系的数学定义 2.2.2 关系模式 2.2.3 关系数据库
2.2.1 关系的数学定义 1.域(Domain) 域是一组具有相同数据类型的值的集合,又称为值域(用D表示)。例如{整数}、{男,女}、{10,100,1000}等都可以是域。域中所包含值的个数称为域的基数(用m表示)。在关系中就是用域来表示属性的取值范围。例如,有下列集合: D1={赵敏,钱锐,孙阳,李丽},表示姓名的集合,其基数为4; D2={男,女},表示性别的集合,其基数为2; D3={专科,本科,硕研,博研},表示学历的集合,其基数为4; 2.笛卡尔积(Cartesian Product)
2.2.1 关系的数学定义 2.笛卡尔积(Cartesian Product) 2.2.1 关系的数学定义 2.笛卡尔积(Cartesian Product) 笛卡尔积是域上的一种集合运算。假定一组域D1,D2,…,Dn,这些域可以完全不同,也可以部分或全部相同(包含相同的元素),则D1,D2,…,Dn的笛卡尔积定义为: D1×D2×…×Dn ={(d1,d2,…,dn)|di∈Di,i=1,2,…,n} 由定义可以看出,笛卡尔积也是一个集合。其中: (1)每一个元素(d1,d2,…,dn)叫做一个n元组(n-tuple),或简称为元组(Tuple)。但元组不是di的集合(集合中元素之间是无序的),而是由di按序排列而成; (2)元素中的每一个值di叫做一个分量(Component),分量di必须是对应域Di中的一个值; (3)若Di(i=1,2,…,n)为有限集,其基数(Cardinal number)为mi(i=1,2,…,n),则D1×D2×…×Dn的基数为n个域的基数累乘之积。笛卡尔积基数的运算表达式为: M= (4)笛卡尔积可表示为一个二维表。表中每行对应一个元组,表中每列对应一个域。
2.2.1 关系的数学定义 【例2-1】 设有域D1={赵敏,钱锐,孙阳,李丽},D2={男,女},D3={专科,本科,硕研,博研},则D1×D2×…×Dn的笛卡尔积共有32个元组,元组如表2-1所示。 表2-1 D1×D2×…×Dn的笛卡尔积 D1 D2 D3 赵敏 男 专科 钱锐 孙阳 李丽 本科 硕研 博研 女
2.2.1 关系的数学定义 3.关系(Relation) 从表2-1中看出,笛卡尔积中许多元组无实际意义,在实际中,应该取消这些无实际意义的元组,而从笛卡尔积中取出有实际意义的元组便构成了关系。 D1D2…Dn的任一有意义的子集称为域D1,D2,…,Dn上的关系,用R(D1,D2,…,Dn)表示。 其中,R表示关系名,n表示关系的度或目,Di是域组中的第i个域名。当n=1时,表示该关系为单元关系或一元关系;当n=2时,称为关系为二元关系;依此类推,关系中有n个域,称该关系为n元关系。关系中的每个元素是关系中的元组,通常用t表示,t∈R表示t是R中的元组。 从值域的角度来定义关系,关系就是值域笛卡尔积的一个子集,也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,在同一关系中,必须对每列起一个唯一的名字,称为属性(Attribute)。n目关系必有n个属性。 在例2-1所示的笛卡尔积(D1D2D3)中,对于每个人来说,性别只有一种,最高学历也有一个,因而只存在四个元组,其它元组没有实际意义,一个实用的关系如表2-2所示。
2.2.1 关系的数学定义 D1 D2 D3 赵敏 女 专科 钱锐 男 本科 孙阳 硕研 李丽 博研 表2-2 D1×D2×…×Dn的关系 2.2.1 关系的数学定义 表2-2 D1×D2×…×Dn的关系 D1 D2 D3 赵敏 女 专科 钱锐 男 本科 孙阳 硕研 李丽 博研 任何一个关系都具备以下特性: (1)关系中每一属性分量必须取原子值,即每个分量必须是不可再分的数据项; (2)关系中每一列各个分量是同一数据类型,来自同一域,即列是同质的; (3)不同属性应给予不同的属性名; (4)关系中的任意两个元组不能完全相同; (5)关系中行的顺序、列的顺序可以任意互换,不会改变关系的意义。
2.2.2 关系模式 关系模式基本上遵循数据库的三级模式结构,概念模式是关系模式的集合,外模式是关系子模式的集合,内模式是存储模式的集合。 2.2.2 关系模式 关系模式基本上遵循数据库的三级模式结构,概念模式是关系模式的集合,外模式是关系子模式的集合,内模式是存储模式的集合。 关系模式是关系模型的内涵,它是对关系模型逻辑结构(元组的结构共性,也就是表框架或表头结构)的描述,通常它要描述一个关系的关系名,组成该关系的各属性名,这些属性的值域,以及属性和值域之间的映像,属性间的数据依赖以及关系的主键等。关系模式完整地描述为: R(U,D,DOM,F) 其中,R表示关系模式名,U表示关系的属性名, D表示属性集合U对应的值域,DOM表示属性向值域的映像,F表示属性间的数据依赖。关系模式简记为: R(U)或R(A1,A2,A3,…,An) 其中,R表示关系模式名;A1,A2,A3,…,An表示属性名;而值域及属性向值域的映像常常直接描述为属性的数据类型和存储空间。
2.2.2 关系模式 关系是关系模型的外延,它是关系模式在某一时刻的状态或内容。也就是说,关系模式是型,关系是值。关系模式是相对静止的,稳定的;而关系是动态的,受用户操作影响而随时变化。关系是元组的集合,一个关系的所有元组值构成所属关系模式的一个值;而一个关系模式可取任意多个值,关系的每一次变化结果,都是关系模式的一个新的具体关系。
2.2.3 关系数据库 在关系模型中,实体及实体间的联系都是用关系来表示的。在一个给定的应用领域中,所有实体及实体间联系的集合便构成了关系数据库。 关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的逻辑结构描述,是所有关系模式的集合。关系数据库的值也称为关系数据库,是这些关系模式在某一时刻对应的关系的集合。数据库的型称为数据库的内涵,数据库的值称为数据库的外延。关系数据库模式与关系数据库通常统称为关系数据库。
2.3 关系代数 运算符 含义 集 合 ∪ 并 比 较 > 大于 ∩ 交 ≥ 不小于 - 差 < 小于 × 广义笛卡尔积 ≤ 不大于 专门的 2.3 关系代数 关系代数是一种抽象的查询语言,是关系数据库操纵语言的一种传统表达方式,它是用对关系的集合运算来表达查询的方式,其运算对象和运算结果都是关系。关系代数用到的运算符包括4类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符,如表2-3所示。 运算符 含义 集 合 ∪ 并 比 较 > 大于 ∩ 交 ≥ 不小于 - 差 < 小于 × 广义笛卡尔积 ≤ 不大于 专门的 关 系 运 算 σ 选择 ≠ 不等于 π 投影 逻 辑 ᄀ 非 ∞ 连接 ∧ 与 ÷ 除 ∨ 或
2.3 关系代数 比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的,所以,关系运算按运算符的不同主要分为传统的集合运算和专门的关系运算。 2.3.1 传统的集合运算 2.3.2 专门的关系运算
2.3.1 传统的集合运算 传统的集合运算是二目运算,包括并、交、差、广义笛卡尔积4种运算。除关系的笛卡尔积以外,参加运算的两个关系必须相容的,即关系R和关系S具有相同的目(属性)n,且相应的属性取自同一个域。 1.并(Union) 设关系R和关系S具有相同的目n(两关系都有n个属性),且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的所有元组组成,其结果仍为n目关系。记作: R∪S={t|t∈R∨t∈S} 关系的并操作对应于关系的插入记录的操作,俗称“+”操作,是关系代数的基本操作。
2.3.1 传统的集合运算 2.差(Difference) 2.3.1 传统的集合运算 2.差(Difference) 设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成,其结果关系仍为n目关系。记作: R−S={t|t∈R∧t∉S} 关系的差操作对应于关系的删除记录的操作,是关系代数的基本操作。
2.3.1 传统的集合运算 3.交(Intersection) 2.3.1 传统的集合运算 3.交(Intersection) 设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的交由既属于R又属于S的所有元组组成,其结果关系仍为n目关系。记作: R∩S={t|t∈R∧t∈S} 关系的交操作对应于寻找两关系共有记录的操作,是一种关系查询操作。关系的交操作能用差操作来代替,因此不是关系代数的基本操作,即R∩S=R−(R−S)或R∩S=S−(S−R)。可以利用文氏图来验证其正确性,如图2-1所示。 R S R-S R∩S R-(R-S 图2-1 文氏图
2.3.1 传统的集合运算 【例2-2】设有关系R和关系S分别如表2-4、2-5所示。则R∩S,R∪S,R−S的运算结果分别如表2-6,2-7,2-8所示。 表2-4 关系R 表2-5 关系S 编号 品名 产地 单位 单价 09001 南山 湖南 袋 36 09002 蒙牛 安徽 45 09003 光明 上海 44 09004 伊利 内蒙 39 09006 三鹿 河北 09005 白帝 四川 42 09007 圣元 40
2.3.1 传统的集合运算 表2-6 R∩S 表2-7 R∪ S 编号 品名 产地 单位 单价 09001 南山 湖南 袋 36 09003 2.3.1 传统的集合运算 表2-6 R∩S 表2-7 R∪ S 编号 品名 产地 单位 单价 09001 南山 湖南 袋 36 09003 光明 上海 45 09002 蒙牛 安徽 09004 伊利 内蒙 44 表2-8 R−S 39 09005 白帝 四川 42 09006 三鹿 河北 09007 圣元 40
2.3.1 传统的集合运算 4.广义笛卡尔积(Extended Cartesian Product) 2.3.1 传统的集合运算 4.广义笛卡尔积(Extended Cartesian Product) 两个分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。记作: R´S={trts|tr∈R∧ts∈S} 若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1´k2个元组。 关系的广义笛卡尔积操作对应于两个关系记录横向合并的操作,俗称“´”操作,是关系代数的基本操作,关系的广义笛卡尔积是多个关系相关联操作的最基本操作。
Zx={t[Z]|t∈R,t[X]=x} 2.3.2 专门的关系运算 专门的关系运算包括选择、投影、连接、除等。为了叙述方便,在此首先引入几个概念。 (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],…,t[Aik]),表示元组t在属性列A上诸分量的集合。Ā表示{A1,A2,…,An}中去掉{Ai1,Ai2,…,Aik}后剩余的属性组。 (3)元组的连接。R为n目关系,S为m目关系。tr∈R,ts∈S,trts称为元组的连接。它是一个(n+m)列的元组,前n个分量为R中的一个n元组tr,后m个分量为S中的一个m元组ts。 (4)象集(Images Set)。给定一个关系R(X,Z),其中X和Z为属性组,定义当t[X]=x时,相应Z的分量(取值)集合称为X取值x时的象集Zx: Zx={t[Z]|t∈R,t[X]=x} 它表示关系R中属性组X上的分量值为x时的诸元组在属性组Z上的分量(取值)集合。
2.3.2 专门的关系运算 它表示R中属性组X上的值为x的诸元组在Z上的分量的集合。 假设现有关系R(X,Z),如表2-9所示, 2.3.2 专门的关系运算 它表示R中属性组X上的值为x的诸元组在Z上的分量的集合。 假设现有关系R(X,Z),如表2-9所示, X Z x1 z1 x2 z2 z3 X3 表2-9 关系R(X,Z) 则其中属性X上存在以下象集: x1在R上的象集Zx1={z1,z2,z3}; x2在R上的象集Zx2={z1,z2}; x3在R上的象集Zx3={z1}。
2.3.2 专门的关系运算 表2-10和2-11是有关教师信息的两个关系,关系名分别为R与S,下面的的专门关系运算,如果没有特殊说明,均以这两个关系作为运算对象。 表2-10 关系R 表2-11 关系S 教师编号 姓名 性别 学历 职称 基本工资 额定课酬 05001 宋玉 女 本科 教授 2800 05002 刘强 1100 男 副教授 2300 05004 方菲 1400 05003 万琳 硕士 05007 王欣 1900 研士 助教 1300 16001 刘香 05006 杨军 讲师 1800 16004 朱燕 1500 16006 丁雷 1200
2.3.2 专门的关系运算 下面对专门的关系运算的介绍如下: 1.选择(Selection) 2.3.2 专门的关系运算 下面对专门的关系运算的介绍如下: 1.选择(Selection) 选择又称为限制(Restriction)。它是根据给定的条件对关系进行水平分解,在关系R中选择满足给定条件的诸元组,组成一个新的关系,记作: F(R) = {t|t∈R∧F(t)=“真”} 其中表示选择符号,F为条件,是由常数、变量、属性名、算术运算符、关系运算符及逻辑运算符组成的逻辑表达式,R是关系名。 表达式F中使用的运算符主要有: 比较运算符:>、≥、<、≤、=、≠; 逻辑运算符:ᄀ(非)、∧(与)、∨(或)。 因此选择运算实际上是从关系R中选取使逻辑表达式F为真的元组。 选择是从行的角度进行的运算,关系的选择操作对应于关系记录的选取操作(横向选择),是关系查询操作的重要成员之一,是关系代数的基本操作。
2.3.2 专门的关系运算 教师编号 姓名 性别 职称 学历 基本工资 05001 宋玉 女 教授 本科 2800 05003 万琳 副教授 2.3.2 专门的关系运算 【例2-3】要从表2-10表示的关系R中找出所有的女教师,请写出相应的关系表达式。 解:本题是从关系中选出符合条件的元组,因此适用选择运算,可表示如下: 性别= “女”(R) 运算结果如表2-12所示。 表2-12 性别=“女”(R) 教师编号 姓名 性别 职称 学历 基本工资 05001 宋玉 女 教授 本科 2800 05003 万琳 副教授 硕士 2300 05004 方菲 助教 研士 1300
2.3.2 专门的关系运算 2.投影(Projection) 2.3.2 专门的关系运算 2.投影(Projection) 选择运算是从某个关系中选取一个满足给定条件的行的子集,而投影运算是对关系中的列进行垂直分解运算,是从关系R中选取一个或多个属性列,构成一个新的关系,记作: πA(R) = {t[A]|t∈R} 其中π表示投影符号,A是关系R的属性集的一个子集,R是关系名,t[A]表示只取元组t中相应属性A中的分量。 投影是从列的角度进行的运算,关系的投影操作对应于关系属性的选取操作(纵向选择),也是关系查询操作的重要成员之一,是关系代数的基本操作。
2.3.2 专门的关系运算 【例2-4】列出表2-10表示的关系R的所有性别、职称和基本工资列信息。 2.3.2 专门的关系运算 【例2-4】列出表2-10表示的关系R的所有性别、职称和基本工资列信息。 解:要查询某些列的信息,适用投影运算,投影表达式如下: π性别,职称,基本工资(R) 运行结果如表2-13所示。 表2-13 π性别,职称,基本工资(R) 性别 职称 基本工资 女 教授 2800 男 副教授 2300 助教 1300 讲师 1800 注意:投影之后不仅取消了原关系中的某些列,而且还有可能取消某些元组,因为取消了某些属性列后,就可能出现重复行,应取消这些完全相同的行。
={|tr∈R∧ts∈S∧tr[A]θts[B]} 2.3.2 专门的关系运算 3.连接(Join) 连接也称为θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。记作: ={|tr∈R∧ts∈S∧tr[A]θts[B]} 其中A和B分别为R和S上度数相等且有可比的属性组。θ是比较运算符,取值可以是>、≥、<、≤、=、≠中任何一种。tr[A] 表示元组tr的相应于属性A的一个分量。ts[B]表示元组ts的相应于属性B的一个分量。 换句话说,连接运算是从R和S的笛卡尔积RS中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组。因此,θ连接能用关系的笛卡尔积和选择的合成形式表示为: =AθB(RS)
2.3.2 专门的关系运算 根据运算符号的不同,连接运算分为等值连接和不等值连接两类。 (1)不等值连接 2.3.2 专门的关系运算 根据运算符号的不同,连接运算分为等值连接和不等值连接两类。 (1)不等值连接 θ为除等号(=)运算符以外的其它比较运算符的连接。这些运算符包括>、>=、<=、<、!>、!<和<>、!=。 【例2-5】写出表2-10和表2-11所示的两个关系中满足R.基本工资<S.额定课酬的元组。
2.3.2 专门的关系运算 ={|tr∈R∧ts∈S∧tr[基本工资]<ts[额定课酬]} 2.3.2 专门的关系运算 解:要查询某些列的信息,适用连接运算,投影表达式如下: ={|tr∈R∧ts∈S∧tr[基本工资]<ts[额定课酬]} 运行结果如表2-14所示。 表2-14 R∞S R.教师编号 R.姓名 性别 学历 职称 基本工资 S.教师编号 S.姓名 额定课酬 05004 方菲 女 研士 助教 1300 1400 05007 王欣 1900 16004 朱燕 1500 05006 杨军 男 本科 讲师 1800
2.3.2 专门的关系运算 【例2-6】 写出表2-10和表2-11两关系中满足R.基本工资=S.额定课酬的等值连接关系。 2.3.2 专门的关系运算 【例2-6】 写出表2-10和表2-11两关系中满足R.基本工资=S.额定课酬的等值连接关系。 解:要查询某些列的信息,适用连接运算,连接表达式如下:
2.3.2 专门的关系运算 R.教师编号 R.姓名 性别 学历 职称 基本工资 S.教师编号 S.姓名 额定课酬 05004 方菲 女 研士 2.3.2 专门的关系运算 R.教师编号 R.姓名 性别 学历 职称 基本工资 S.教师编号 S.姓名 额定课酬 05004 方菲 女 研士 助教 1300 1400 05007 王欣 1900 16004 朱燕 1500 05006 杨军 男 本科 讲师 1800
(2)等值连接 θ为等号(=)的连接运算称为等值连接。它是从关系R与S的笛卡尔积中选取A、B属性值相等的那些元组。等值连接表示为: ={ |tr∈R∧ts∈S∧tr[A]=ts[B]} 【例2-6】 写出表2-10和表2-11两关系中满足R.基本工资=S.额定课酬的等值连接关系。 解:要查询某些列的信息,适用连接运算,连接表达式如下: ={ |tr∈R∧ts∈S∧tr[基本工资]=ts[额定课酬]}
2.3.2 专门的关系运算 (2)内连接 内连接(Inner Join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并在连接结果中不消除重复属性时,此等值联接称为内连接。 【例2-7】 写出表2-10和表2-11两个关系中满足R.教师编号=S.教师编号的内连接关系。 解:内连接是按照同名属性进行等值连接,且在连接的结果中不消除重复属性,故运行结果如表2-16所示。 表2-16 R和S内连接 R.教师编号 R.姓名 性别 学历 职称 基本工资 S.教师编号 S.姓名 额定课酬 05002 刘强 男 本科 副教授 2300 1100 05004 方菲 女 研士 助教 1300 1400 05007 王欣 讲师 1800 1900
2.3.2 专门的关系运算 ②自然连接(Natural join) 2.3.2 专门的关系运算 ②自然连接(Natural join) 自然连接(Natural join)是一种特殊的内连接,它要求两个关系中进行比较的分量必须是相同的属性(组),并且要在结果中把重复的属性(组)去掉。 【例2-8】 写出表2-10和表2-11两关系中满足R.教师编号=S.教师编号的自然连接关系。 解:自然连接是在内连接的基础上去掉重复属性。本题的结果如表2-17所示。 表2-17 自然连接 教师编号 R.姓名 性别 学历 职称 S.姓名 基本工资 额定课酬 05002 刘强 男 本科 副教授 2300 1100 05004 方菲 女 研士 助教 1300 1400 05007 王欣 讲师 1800 1900
2.3.2 专门的关系运算 ③外连接(Outer join) 2.3.2 专门的关系运算 ③外连接(Outer join) 关系R和关系S在做等值连接时,总是选择两个关系的公共属性值相等的元组构成一个新的关系。在新关系的产生的过程中,关系R中的某些元组可能因在关系S中不存在公共属性值相等的元组而被舍弃;同样,S中的某些元组也有可能被舍弃。 如果关系R和关系S在做连接时,保留舍弃的元组,并将其连接的另一关系中对应属性值填上“空值”(null),那么这种连接叫做外连接。外连接有3种。 左外连接(Left outer join)
2.3.2 专门的关系运算 在实际运算过程中,有时需要在连接的结果中,保留左边关系与联接条件不相匹配的元组,这种连接称为左外连接,记作:R*∞S。 【例2-9】 写出表2-10和表2-11两关系中关于教师编号的左连接。 解:左外连接是在内连接的基础上加上左边与连接条件不匹配的元组,不匹配的元组右边的属性补空值。本题的结果如表如表2-18所示。
2.3.2 专门的关系运算 表2-18 左连接 R.教师编号 S.姓名 性别 学历 职称 基本工资 S.教师编号 额定课酬 05001 宋玉 2.3.2 专门的关系运算 表2-18 左连接 R.教师编号 S.姓名 性别 学历 职称 基本工资 S.教师编号 额定课酬 05001 宋玉 女 本科 教授 2800 Null 05002 刘强 男 副教授 2300 1100 05003 万琳 硕士 05004 方菲 研士 助教 1300 1400 05006 杨军 讲师 1800 05007 王欣 1900
2.3.2 专门的关系运算 右外连接(Right outer join) 2.3.2 专门的关系运算 右外连接(Right outer join) 在实际运算过程中,也可能需要在连接的结果中,保留右边关系与连接条件不相匹配的元组,把这种连接称为右外连接,记作:R∞*S。 【例2-10】写出表2-10和表2-11两关系中关于教师编号的右连接。 解:左外连接是在内连接的基础上加上右边与连接条件不匹配的元组,不匹配的元组左边的属性补空值。本题的结果结果如表2-19所示。 表2-19 右连接 R.教师编号 S.姓名 性别 学历 职称 基本工资 S.教师编号 额定课酬 05002 刘强 男 本科 副教授 2300 1100 05004 方菲 女 研士 助教 1300 1400 05007 王欣 讲师 1800 1900 Null 16001 刘香 16004 朱燕 1500 16006 丁雷 1200
2.3.2 专门的关系运算 全外连接(Full outer join) 2.3.2 专门的关系运算 全外连接(Full outer join) 是左外连接与右外连接的组合,并去掉其中重复的元组,记作:R*∞*S。 【例2-11】 写出表2-10和表2-11两关系中关于教师编号的全外连接。 解:左外连接是在内连接的基础上加上左边及右边与连接条件不匹配的元组,不匹配的其它元组的属性补空值,并去掉重复元组。本题的结果如表2-20所示。
2.3.2 专门的关系运算 R.教师编号 S.姓名 性别 学历 职称 基本工资 S.教师编号 额定课酬 05001 宋玉 女 本科 教授 2.3.2 专门的关系运算 R.教师编号 S.姓名 性别 学历 职称 基本工资 S.教师编号 额定课酬 05001 宋玉 女 本科 教授 2800 Null 05002 刘强 男 副教授 2300 1100 05003 万琳 硕士 05004 方菲 研士 助教 1300 1400 05006 杨军 讲师 1800 05007 王欣 1900 16001 刘香 16004 朱燕 1500 16006 丁雷 1200
R÷S={tr[X]|tr∈R∧Yx⊇πY(S),tr[X]=x} 2.3.2 专门的关系运算 4.除(Division) 给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。关系R中的属性组Y与关系S中的属性组Y可以有不同的属性名,但必须出自相同的域。R与S的除运算得到一个新的关系P(X),关系P是关系R中满足下列条件最大关系,记作: R÷S={tr[X]|tr∈R∧Yx⊇πY(S),tr[X]=x} 关系P肯定是在关系R中,是对属性组X投影(πX(R))的特定(当tr[X]=x时)子集,该子集需满足映射关系:即关系R中像集Yx(在关系R中,当tr[X]=x时,属性组Y的分量集合)元组包含关系S中投影πY(S)(关系S在属性组Y上的投影)元组。 除操作的具体计算过程如下: (1)依次求出关系R中属性组X的各分量的像集Yx,等价于{t[Y]|t∈R,t[X]=x}; (2)求出关系S中在属性组Y上的投影πY(S); (3)将各分量的Yx与πY(S) 比较,当 Yx⊇πY(S)时,选取该Yx对应的分量值x,记为X'; (4)聚集所有符合(3)的X',记作P(X),即R÷S={X'}。
2.3.2 专门的关系运算 【例2-12】 设关系R和S分别如表2-21和表2-22所示,则R÷S的结果如表2-23所示。 求解过程如下: 2.3.2 专门的关系运算 【例2-12】 设关系R和S分别如表2-21和表2-22所示,则R÷S的结果如表2-23所示。 求解过程如下: 在关系R中投影姓名:π姓名(R)={周安,武红,郑涛,王瑞},其中: 当tr[X]=周安时,Yx={(南瓜,1.0),(红酒,12),(牛肉,14)}; 当tr[X]=武红时,Yx={(牛奶,2.3),(牛肉,10)}; 当tr[X]=郑涛时,Yx={(酱油,3.5)};◆王瑞的象集为{(葡萄,10)}; 当tr[X]=王瑞时,Yx={(葡萄,10)}; 而关系S在(商品,单价)上的投影为{(南瓜,1.0),(红酒,12),(牛肉,14)},记作πY(S); 显然,只有当tr[X]=周安时,其像集Yx=(商品,价值)周安,包含了关系S在属性组(商品,单价)上的投影πY(S)=π商品,单价(S),所以R÷S={周安}
即R÷S =πX(R)-πX(πX(R)πY(S)-R) 关系的除操作,也是一种由关系代数基本操作复合而成的查询操作,显然它不是关系代数的基本操作。利用关系代数的基本操作:广义笛卡尔积、差、投影运算,可以导出关系除运算的直接计算方法: (1)T=πX(R);(计算R中X的投影) (2)P=πY(S);(计算R中Y的投影) (3)Q=(T×P)-R;(计算T×P中不在R中的元组) (4)W=πX(Q); (5)R÷S=T-W。 即R÷S =πX(R)-πX(πX(R)πY(S)-R) 除操作是同时从行和列角度进行运算。除操作适合于包含“对于所有的,全部的”语句的查询操作。 【例2.13】 现有关系学生(学号,姓名,性别,年龄,专业)、课程(课程号,课程名,学分)和成绩(学号,课程号,成绩),查询出至少选修了课程号C1和C2的学生学号和姓名。 分析:这里涉及了课程表中C1和C2两门课的全部选修情况,因而涉及除运算。 π学号,课程号(成绩)÷π课程号(课程号='C1'∨课程号='C3' (课程))*π学号,姓名(学生)
2.3.2 专门的关系运算 姓名 商品 价值 单价 产地 周安 南瓜 1.0 安徽 武红 牛奶 2.3 红酒 12 新疆 郑涛 酱油 3.5 2.3.2 专门的关系运算 表2-21 关系R 表2-22 关系S 姓名 商品 价值 单价 产地 周安 南瓜 1.0 安徽 武红 牛奶 2.3 红酒 12 新疆 郑涛 酱油 3.5 牛肉 10 内蒙 表2-23 关系R÷S 王瑞 葡萄 14
2.3.2 专门的关系运算 而关系S在(商品,单价)上的投影为{(南瓜,1.0),(红酒,12),(牛肉,14)}; 2.3.2 专门的关系运算 而关系S在(商品,单价)上的投影为{(南瓜,1.0),(红酒,12),(牛肉,14)}; 显然,只有周安的象集(商品,价值)周安,包含了S在(商品,单价)属性集合上的投影,所以R÷S={周安} 关系的除操作,也是一种由关系代数基本操作复合而成的查询操作,显然它不是关系代数的基本操作。利用关系代数的基本操作:广义笛卡尔积、差、投影运算,可以导出关系除运算的直接计算方法: 说明: (1)R÷S的结果关系中,属性是由属于R但不属于S的所有属性构成。 (2)R÷S的结果关系中,任一元组都是R中某元组的一部分,且符合以下要求:任取属于R÷S的一元组t,则t与S任一元组连接后,结果都为R中一个元组。 (3)R(X,Y)÷S(Y,Z)=R(X,Y)÷πY(S)。
2.4 关系演算 关系演算是用数理逻辑中的谓词(计算机术语的条件表达式)来表达查询的方式。关系演算按其谓词变元的不同,分为元组关系演算和域关系演算。元组关系演算以元组为变量,域关系演算以域为变量,它们分别简称为元组演算和域演算。 2.4.1 元组关系演算 2.4.2 域关系演算 2.4.3 关系运算的安全性和等价性
2.4.1 元组关系演算 2.4.1 元组关系演算 在元组关系演算系统中,元组演算表达式的一般形式为{t|P(t)},其中t是元组变量(元组的集合),P(t)是元组关系演算公式(简称公式,在数理逻辑中也称为谓词,即计算机术语的条件表达式),表示所有使P(t)为真的元组集合。一个元组演算表达式表示一个关系,元组关系演算公式由原子公式和逻辑运算符组成。 1.原子公式类型 原子公式,即P(t)公式的基本形式,一般有3种形式: (1)R(t):表示元组t是关系R中的一个元组,即t∈R,关系R可以用{t|R(t)}来表示; (2)t[i]θu[j]:表示元组t的第i个分量与元组u的第j个分量满足关系θ运算; (3)t[j]θC:表示元组t的第j个分量与常数C之间满足关系θ运算。 在定义关系演算的运算时,可同时定义“自由”元组变量和“约束”元组变量的概念。在一个公式中,一个元组变量的前面如果没有存在量词(∃,any,存在)或全称量词(∀,every,任意,所有),则称这个元组变量为自由的元组变量(Free),否则称为约束的元组变量(Bound)。
2.4.1 元组关系演算 2.公式及公式中递归定义 (1)每一个原子公式是一个公式,其中的元组变量是自由变量; 2.4.1 元组关系演算 2.公式及公式中递归定义 (1)每一个原子公式是一个公式,其中的元组变量是自由变量; (2)如果P1和P2是公式,那么ᄀP1、P1∨P2、P1∧P2、P1⇒P2都是公式,其中: 当P1为真时,ᄀP1为假,否则为真; 当P1和P2同时为真时,则P1∧P2为真,否则为假; 当P1和P2中有一个为真,或同时为真时,则P1∨P2为真,仅当P1和P2同时为假时,P1∨P2为假; 当P1为真,则P2为真。 (3)如果P1是公式,S是元组变量,那么(∃S)(P1)也是公式,表示“存在一个元组S使得公式P1为真”; (4)如果P1是公式,S是元组变量,那么(∀S)(P1)也是公式,表示“对于所有元组S使得公式P1为真”; (5)公式中的运算符优先级为:算术运算符θ最高,量词∃和∀次之,最后依次为逻辑运算符ᄀ、∧、∨,如果有括号,则括号中优先级最高; (6)公式只能是上述5种形式组成,除此之外构成的都不是公式。
2.4.1 元组关系演算 3.关系演算等价规则 元组关系演算公式中,有下列3个等价规则: 2.4.1 元组关系演算 3.关系演算等价规则 元组关系演算公式中,有下列3个等价规则: (1)P1∧P2等价于ᄀ(ᄀP1∨ᄀP2)),而P1∨P2等价于ᄀ(ᄀP1∧ᄀP2); (2)(∀S)(P1(S))等价于ᄀ(∃S)(ᄀP1(S)),而(∃S)(P1(S))等价于ᄀ(∀S)(ᄀP1(S)); (3)P1⇒P2等价于ᄀP1∨P2。
2.4.1 元组关系演算 4.关系代数式和元组演算公式之间的转换 关系代数表达式都可以用元组关系演算表达式来表达,反之亦然。 2.4.1 元组关系演算 4.关系代数式和元组演算公式之间的转换 关系代数表达式都可以用元组关系演算表达式来表达,反之亦然。 (1)并: R∪S={t|R(t)∨S(t)} (2)交: R∩S={t|R(t)∧S(t)} (3)差: R−S={t|R(t)∧ᄀS(t)} (4)笛卡尔积 设R和S分别是r目和s目关系,则有: R´S={t(r+s)|(∃u(r))(∃v(r))(R(u)∧S(v)∧t[1]=u[1]∧…∧t[r]=u[r]∧t[r+1]=v[1]∧…∧t[r+s]=v[s])} 关系R´S是这样的一些元组的集合:存在一个u和v,u在R中,v在S中,并且t的前r个分量构成u,后S个分量构成v。 (5)投影: πi1,,i2,,i3…ik(R)={t(k) | (∃u)(R(u)∧t[1]=u[i1]∧…∧t[k]=u[ik])} (6)选择: σF(R)= {t|R(t)∨F’)} 在公式中,F是由F’得到的等价公式。 (7)连接 假设现有关系R(A1A2A3)和关系系S(A3A4A5),则连接表示如下: R∞S={t[A1A2A3A4A5]|t[A1A2A3]∈R∧t[A3A4A5]∈S}
2.4.1 元组关系演算 (4)笛卡尔积 设R和S分别是r目和s目关系,则有: 2.4.1 元组关系演算 (4)笛卡尔积 设R和S分别是r目和s目关系,则有: RS={t(r+s)|(∃u(r))(∃v(r))(R(u)∧S(v)∧t[1]=u[1]∧…∧t[r]=u[r]∧t[r+1]=v[1]∧…∧t[r+s]=v[s])} 关系RS是这样的一些元组的集合:存在一个u和v,u在R中,v在S中,并且t的前r个分量构成u,后S个分量构成v。 (5)投影 πi1,,i2,,i3…ik(R)={t(k) | (∃u)(R(u)∧t[1]=u[i1]∧…∧t[k]=u[ik])} (6)选择 σF(R)= {t|R(t)∨F’)} 在公式中,F是由F’得到的等价公式。 (7)连接 假设现有关系R(A1A2A3)和关系系S(A3A4A5),则连接表示如下: R∞S={t[A1A2A3A4A5]|t[A1A2A3]∈R∧t[A3A4A5]∈S}
2.4.1 元组关系演算 5.元组演算示例 【例2-13】 已知关系R、S如表2-24和2-25所示,求出下列元组演算表达式的运算结果。 2.4.1 元组关系演算 5.元组演算示例 【例2-13】 已知关系R、S如表2-24和2-25所示,求出下列元组演算表达式的运算结果。 表2-24 关系R 表2-25 关系S A1 A2 A3 1 a 3 5 7 f 8 4 c 9 e 2 b
2.4.1 元组关系演算 (1)R1={t|(∃u)(R(t)∧S[u]∧t[1]<u[3]∧t[2]≠b)} 2.4.1 元组关系演算 (1)R1={t|(∃u)(R(t)∧S[u]∧t[1]<u[3]∧t[2]≠b)} 解:(1)根据题意,表达式有两个元组变量t和u,t是关系R的元组变量,u是关系S的元组变量,满足条件t[1]<u[3]和t[2]≠b的R的元组构成R1。其运算结果为表2-25所示。 (2)R2={t|(∃u)(R(u)∧t[1]=u[3]∧t[2]= u[1])} 解:(2)根据题意,表达式有两个元组变量t和u,t是关系R2的元组变量,u是关系R的元组变量,另外,t有两个分量。第一个分量值等于u的第三个分量值,第二个分量值等于u的第一个分量值。其运算结果如表2-26所示。
2.4.1 元组关系演算 表2-25 关系R1 表2-26 关系R2 A1 A2 A3 3 a 5 1 4 c 2
2.4.1 元组关系演算 【例2-14】 设有如下3个关系模式: 教师关系T(教师编号,姓名,性别,职称,基本工资) 2.4.1 元组关系演算 【例2-14】 设有如下3个关系模式: 教师关系T(教师编号,姓名,性别,职称,基本工资) 课程关系C(课程编号,课程名称,学时数,学分) 授课关系TC(教师编号,课程编号,教室,班级) 分别用关系代数(A)和关系演算(B)两种方式表示以下各种查询: (1)查询基本工资大于或等于1000的教师编号和姓名。 (A)π教师编号,姓名(σ基本工资≥1000(T)) (B){t|(∃u)(T(u) ∧t[5]≥1000∧t[1]=u[1] ∧t[2]=u[2])} (2)查询教师姓名及职称。 (A)π姓名,职称(T) (B){t|(∃u)(T(u)∧t[1]=u[2]∧t[2]=u[4])} (3)查询主讲课程编号为1001的教师编号和姓名。 (A)π教师编号,姓名(T)∞π教师编号(σ课程编号=‘1001’(TC) (B){t|(∃u)(∃v)(T(u)∧TC(v)∧v[2]=’1001’∧u[1]=v[1]∧t[1]=u[1]∧t[2]=u[2])} (4)查询主讲过全部课程的教师编号和姓名。 (A)(π教师编号,课程编号(TC)÷π课程编号(C))∞π教师编号,姓名(T) (B){(B){(t|(∃u)(∀v)(∃w)(T(u)∧C(v)∧TC(w)∧u[1]=w[1]∧w[2]=v[1]∧t[1]=u[1]∧t[2]=u[2])}
2.4.2 域关系演算 域关系演算类似于元组关系演算,不同之处是用域变量代替元组变量。域变量的变化范围是某个值域而不是一个关系,域关系演算的结果是符合给定条件的域变量值序列的集合,也是一个关系。域关系演算语言典型代表是QBE语言,域关系演算表达式的一般形式是: {t1,t2,t3,…tk|P(t1,t,2,t3,…tk)} 其中:t1,t2,t3,…tk是元组变量的t的各个分量,都称为域变量;P是一个公式,由原子公式和各种运算符构成。 1.域关系原子公式 (1)R(t1,t2,…,tk):表示以t1,t2,…,tk为分量的元组在关系R中,其中R是一个K元关系,ti是常量或域变量; (2)tiθc或cθti:ti为元组变量t的第i个分量,c为常量,θ为算术比较运算符; (3)tiθuj:ti为元组t的第i个分量,uj为元组u的第j个分量,θ同上。 域关系演算的公式中可以使用ᄀ、∧、∨运算符,也可以使用(∃x)和(∀x)形成新的公式,但变量x是域变量,不是元组变量。 自由变量、约束变量等概念和元组演算一样,这里不再赘述。
2.4.2 域关系演算 2.域关系递归定义 (1)每个原子公式是公式; (2)设P1和P2是公式,则ᄀP1、P1∧P2、P1∨P2也是公式; 2.4.2 域关系演算 2.域关系递归定义 (1)每个原子公式是公式; (2)设P1和P2是公式,则ᄀP1、P1∧P2、P1∨P2也是公式; (3)若P(t1,t2,…,tk)是公式,则(∃ti)(P)(i=1,2,…,k)和(∀ti)(P)(i=1,2,…,k)也都是公式; (4)域演算公式的优先级同元组演算的优先级;
2.4.2 域关系演算 表2-27 关系R 表2-28 关系S 表2-29 关系W 姓名 年龄 工资 利息 房贷 钱一 20 1300 75 2.4.2 域关系演算 3.域演算示例 【例2-15】设有三个关系如表2-27,表2-28,表2-29所示,求下列域演算表达式的关系。 表2-27 关系R 表2-28 关系S 表2-29 关系W 姓名 年龄 工资 利息 房贷 钱一 20 1300 75 1500 李四 25 1600 张三 40 90 1800 陈七 38 3900 王五 36
2.4.2 域关系演算 (1)R1={xyz|R(xyz)∧y>20∧z>1300} 2.4.2 域关系演算 (1)R1={xyz|R(xyz)∧y>20∧z>1300} 解:根据题意,R1有三个域变量x,y,z,它们也是关系R的域变量,在关系R的所有元组中取满足条件y>20和z>1300的元组构成R1。运算结果如表2-30所示。 (2)R2={xyz|R(xyz)∨(S(xyz)∧y=40)} 解:根据题意,R2有三个域变量x,y,z,它们也是关系R和关系S的域变量,取关系R的所有元组和关系S满足条件y=40的元组构成R2。运算结果如表2-31所示。 (3)R3={xyz|(∃u)(∃v)(R(zxu)∧W(yv)∧u>v)} 解:根据题意,R3有5个域变量x,y,z,u和v,其中:x,y,z也是关系R3的域变量;z是R的第1个域变量,x是R的第2个域变量,u是R的第3个域变量;y是W的第1个域变量,v是W的第2个域变量;当u>v,即关系R中的第3个分量值大于W关系中的第2个分量值时,取R关系中的第2个分量值(x值)、W关系中的第1个分量值(y值)和R关系中的第1个分量值(z值)构成关系R3的元组值。运算结果如表2-32所示。
2.4.2 域关系演算 表2-30 关系R1 表2-31 关系R2 表2-32 关系R3 姓名 年龄 工资 利息 李四 25 1600 钱一 2.4.2 域关系演算 表2-30 关系R1 表2-31 关系R2 表2-32 关系R3 姓名 年龄 工资 利息 李四 25 1600 钱一 20 1300 75 陈七 38 3900 90 张三 40 注意:求解域演算关系时,一定要分清已知关系的域变量和所求关系的域变量,并根据两者之间各个分量的联系条件,求所求关系的元组值。
2.4.3 关系运算的安全性和等价性 1.关系的安全性 关系代数的基本操作包括并、交、差、笛卡尔积、投影和选择,不存在集合的“补”操作,因而总是安全的。 关系演算则不然,可能会出现无限关系和无穷验证问题。例如,元组演算表达式{t|ᄀR(t)}表示所有不存在于关系R中的元组的集合,这是一个无限关系。验证公式(∀u)(P1(u))为真时,必须对所有可能的元组u进行验证,当所有u都使P1(u)为真时,才能断定公式(∀u)(P1(u))为真,这在实际中是不可行的,因为在计算机上进行无穷验证永远得不到结果。因此,必须采取措施,防止无限关系和无穷验证的出现。
2.4.3 关系运算的安全性和等价性 【定义2.1】:在数据库技术中,不产生无限关系和无穷验证的运算称为安全运算,相应的表达式称为安全表达式,所采取的措施称为安全约束。 在关系演算中,必须有安全约束的措施,关系演算表达式才是安全的。 对于元组演算表达式{t|P(t)},将公式P(t)的域定义为出现在公式P(t)所有属性值组成的集合,记为DOM(P),它是有限集。 安全的元组表达式{t|P(t)}应满足下列三个条件。 (1)表达式的元组t中出现的所有值均来自DOM(P)。 (2)对于P(t)中每一个形如(∃u)(P1(u))的子公式,若u使得P1(u)为真,则u的每个分量是DOM(P)的元素。 (3)对于P(t)中每个形如(∀u)(P1(u))的子公式,若使P1(u)为假,则u的每个分量必属于DOM(P)。换言之,若u得某一个分量不属于DOM(P),则(P1(u)为真。 类似地,也可以定义安全的域演算表达式。
2.4.3 关系运算的安全性和等价性 2.关系的等价性 关系运算主要有关系代数、元组关系演算、域关系演算3种,相应的关系查询语言也早已研制出来。它们的典型代表是ISBL语言、QUEL语言和QBE语言。 并、交、差、笛卡尔积、投影和选择是关系代数的基本操作,并构成了关系代数运算的最小完备集。已经证明如下3项内容: (1)每一个关系代数表达式有一个等价的、安全的元组演算表达式; (2)每一个安全的元组演算表达式有一个等价的安全域演算表达式; (3)每一个安全的域演算表达式有一个等价的关系代数表达式。