-
2020-12-28 20:29:08
关系T的元数(基数) = r+s
更多相关内容 -
关系代数中各个运算符所含的属性个数和元组个数
2018-11-24 20:22:49关系代数中各个运算符所含的属性个数和元组个数 关系代数操作 属性个数 元组个数 R r m S s n R∪S r(要求r=s) ≤(m+n) R-S r(要求r=s) ≤m R×S r+s m×n ...
关系代数中各个运算符所含的属性个数和元组个数
关系代数操作 属性个数 元组个数 R r m S s n R∪S r(要求r=s) ≤(m+n) R-S r(要求r=s) ≤m R×S r+s m×n π属性集(R) ≤r ≤m σF(R) r ≤m R∩S r(要求r=s) ≤ min(m,n) R÷S r-s ≤m R⋈S ≤r+s ≤m×n R⋈S
F
r+s
≤m×n
-
关系代数 元组关系演算
2022-01-28 10:29:13关系代数 元组关系演算当我们书写关系代数表达式时,我们提供了产生我们的查询结果的一个过程序列。与之相比,元组关系演算( tuple relational calculus )是非过程化的( nonprocedural )查询语言。它描述了所需信息,而不给出用于获得该信息的具体过程。
在元组关系演算中的查询表达为:{ t | P(t) }
也就是说,它是使谓词 P 为真的所有元组 t 的集合。和我们前面的记法一样,我们用 t[A] 来表示元组t在属性 A 上的取值,并且我们用 t∈r 来表示元组 t 在关系 r 中。
查询示例
请找出工资在80000美元以上的教师的 ID、name、dept_name和salary :
{ t | t∈instructor ∧ t [salary]>80000}
ヨ
假设我们只需要 ID 属性,而不是需要关系 instructor 的所有属性。为了用元组关系演算来书写这个査询,我们需要为在模式( ID )上的关系来写一个表达式。我们需要( ID )上这样的元组:使得在 instructor 中存在一个元组的属性 salary >80000。为了表述这样的要求,我们需要引入数理逻辑中的“存在”这一结构。记法:
ヨ t ∈ r(Q(t))
表示“在关系 r 中存在一个元组 t 使谓词 Q ( t )为真”。
使用这种记法,我们可以将查询‘找出工资大于80000美元的每位教师的教师 ID”表述为:{ t | ヨ s∈instructor (t[ID] =s[ID]∧s[salary]>80000)}
我们可以这样来读上述表达式:“它是满足如下条件的所有元组 t 的集合:在 instructor 关系中存在一个元组 s 使得 t 和 s 在 ID 属性上的取值相等,且 s 在 salary 属性上的取值大于80000美元。”
元组变量 t 是只定义在 ID 属性上的,因为这是为 t 指定的条件所涉及的唯一属性。因此,其结果是一个在( ID )上的关系。
∧
请考虑查询“找出位于 Watson 楼的系中的所有教师的姓名。这个查询比前一个查询稍微复杂一些,因为它涉及 instructor 和 department 两个关系。但是,正如我们将看到的那样,它所需要的只不过是在我们的元组关系演算表达式中使用两个“存在”子句,并通过 and ( ∧ )把它们连接起来。我们将此查询表述如下:
{ t | ヨ s∈instructor (t[name]=s[name]∧ヨu∈department(u[dept_name]=s[dept_name]∧u[building]=“Waston”))}
元组变量 u 被限制在位于 Watson 楼的系,而元组变量 s 被限制在与元组变量 u 的 dept_name 相匹配的教师。
V
为了找出在2017年秋季学期、2018年春季学期或者这两个学期都开设的所有课程的集合,我们在关系代数中使用并运算。在元组关系演算中,我们将使用通过 or ( V )连接的两个“存在”子句:
此表达式给出了我们至少满足下面两个条件之一的所有 course_id 元组的集合:- 在 section 关系中满足 semeter = Fall 且 year =2017的某个元组包含该 course_id
- 在 section 关系中满足 semeter = Spring 且 year =2018的某个元组包含该 course_id
如果同一门课程在2017年秋季学期和2018年春季学期都开设、那么它的 course_id 只出现一次,因为集合的数学定义并不允许重复的成员。
如果我们现在只想要在2017年秋季学期和2018年春季学期都开设的课程的course_id 的值,我们所需做的只不过是把上述表达式中的 or ( V )改为 and (∧)。
┓
现在请考虑查询“找出在2017年秋季学期授课而在2018年春季学期不授课的所有课程”。对于这个查询的元组关系演算表达式同我们刚刚见过的表达式类似,只不过是使用了 not (┓)符号:
这个元组关系演算表达式用ヨs∈ section (…)子句来要求特定的 course_id 是在2017年秋季学期开设的,并且它用┓ヨu∈ section (…)子句来去掉那些作为在2018年春季学期已开设过的课程出现在 section 关系的某个元组中的 course_id 的值。
=﹥
接下来我们要考虑的查询将用到蕴含,用=﹥来表示。公式 P=﹥ Q 表示“ P 蕴含 Q ”,也就是说,“如果 P 为真,则 Q 必然为真”。请注意 P=﹥Q 逻辑上等价于┓PVQ 。使用蕴含而不是 not 和 or 常常可以更直观地解释查询的含义。
请考虑这样的查询:“找出选修了生物( Biology )系所开设的全部课程的所有学生”。为了用元组关系演算书写这个查询,我们引入“对于所有的”结构,用∀表示。记法:∀ t∈r (Q(t))
表示“对于关系 r 中的所有元组 t , Q 均为真”。
对于我们的查询,我们书写如下的表达式:
我们可以把这个表达式理解为:“它是所有这样的学生(即( ID )上的元组t)的集合:对于在 course 关系中的所有元组 u ,如果 u 在 dept_name 属性上的值是‘ Biology ’,那么在 takes 关系中一定存在一个包含该学生 ID 以及该 course_id 的元组。”
请注意在上述查询中有一点很微妙:如果生物系没有开设任何课程,则所有的学生 ID 都满足条件。在这种情况下,上述查询表达式的第一行非常关键——如果没有条件:ヨr ∈ student (r[ID]=t[ID])
那么若生物系没有开设任何课程,则任何一个 t 值(包括不是在 student 关系里的学生 ID 的值)都会符合要求。
形式化定义
我们现在可以给出形式化定义了。元组关系演算表达式具有如下形式:
{ t | P(t) }
其中P是一个公式(formua)。公式中可以出现多个元组变量。如果元组变量不被ヨ或∀量化,则称自由变量。因此,在
t∈instructor ∧ ヨs∈department(t[dept_name]=s[dept_name])
中,t是自由变量。元组变量s称为受限变量。
表达式的安全性
最后还要讨论一个问题。元组关系演算表达式可能产生一个无限的关系。假设我们书写表达式:
{ t | ┓(t∈ instructor)}
不在 instructor 中的元组有无限多个,大多数这样的元组所包含的值甚至根本不在数据库中!我们并不希望允许这样的表达式。
为了帮助我们定义对元组关系演算的限制,我们引入了元组关系公式 P 的域( domain )这一概念。直观地说, P 的域用 dom (P)来表示,它是 P 所引用的所有值的集合。它们既包括在 P 自身中用到的值,又包括在 P 中涉及到的关系的元组中所出现的值。因此, P 的域是在 P 中显式出现的所有值、或者其名称出现在 P 中的一个或多个关系中出现的所有值的集合。例如, dom ( t∈ instructor∧t[salary] >80000)是包括80000以及出现在 instructor 关系的任意元组的任意属性中的所有值的集合。类似地, dom (┓( t∈ instructor ))也是在instructor 中出现的所有值的集合,因为 instructor 关系在表达式中涉及了。
如果出现在表达式{ t | P ( t )}结果中的所有值均来自于 dom ( P ),则我们说表达式{ t | P ( t )}是安全的。表达式{ t | ┓(t∈ instructor)}是不安全的。请注意 dom (┓(t∈ instructor))是出现在 instructor 中的所有值的集合。但是,可能有一个不在 instructor 中的元组t、它包含的值并没有在 instructor 中出现。我们在这一节中所书写的元组关系演算表达式的其他示例都是安全的。
满足诸如{ t | ┓(t∈ instructor)}这样的不安全表达式的元组数量可以是无限的,而安全的表达式保证具有有限的结果。因此所允许的元组关系演算表达式的类別被限定为那些安全的表达式。 -
论文研究-再论元组关系演算与SQL .pdf
2019-08-20 13:05:27再论元组关系演算与SQL,王小兵,苏向阳,针对一些文献存在的问题,本文指明了特性谓词在元组关系演算中的表达形式,给出了含量词的元组关系演算表达式到SQL语句的转化过程 -
关系运算及元组演算
2019-10-10 15:51:11计算两个关系在集合理论上的并集,即给出关系R和S(两者有相同元/列数),R∪S的元组包括R和S所有元组的集合,形式定义如下: 式中 t是元组变量(下同)。显然,R∪S=S∪R。 (2)差。计算两个关系的区别...
写了半天,不知道这些有什么用,好繁琐,不知道从这些东西可以用在什么地方,有哪些场景。
1. 关系运算
关系代数的基本运算主要有并、交、差、笛卡尔积、选择、投影、连接和除法运算。
(1)并。计算两个关系在集合理论上的并集,即给出关系R和S(两者有相同元/列数),R∪S的元组包括R和S所有元组的集合,形式定义如下:
式中 t是元组变量(下同)。显然,R∪S=S∪R。(2)差。计算两个关系的区别的集合,即给出关系R和S(两者有相同元/列数),R-S的元组包
括R中有而S中没有的元组的集合,形式定义如下:
通俗点说,就是属于R但是属于S的元素。针对这种差运算的应用场景,举个例子来说,就两只股票组合,一个组合包含“东阿阿胶”,“涪陵榨菜”,“同仁堂”。
而另一个组合只包括“东阿阿胶”,“涪陵榨菜”。那这两个的差就是“同仁堂”(3)交。计算两个关系集合理论上的交集,即给出关系R和S(两者有相同元/列数),R∩S的元组包括R和S相同元组的集合,形式定义如下:
显然,R∩S=R-(R-S)和R∩S=S-(S-R)成立。(4)笛卡尔积。计算两个关系的笛卡尔乘积,令R为有m元的关系,S为有n元的关系,则R×S是m+n元的元组的集合,其前m个元素来自R的一个元组,而后n个元素来自S的一个元组。形成定义如下:
若R有u个元组,S有v个元组,则R×S有u×v个元组。要记住笛卡尔积的数量是两者的乘积即可,相当于两者排列组合。
(5)投影。从一个关系中抽取指明的属性(列)。令R为一个包含属性A的关系,则
(6)θ连接。θ连接从两个关系的笛卡儿积中选取属性之间满足一定条件的元组,记作:
其中A和B分别为R和S上元数相等且可比的属性组。θ为“=”的连接,称为等值连接,记作:
如果两个关系中进行比较的分量必须是相同的属性组,并且在结果中将重复的属性去掉,则称为自然连接,记作:
θ连接是对笛卡尔积进行处理,虽然现在我还不知道这个到底是干什么用的。二、元祖演算
在元组演算中,元组演算表达式简称为元组表达式,其一般形式为{t|P(t)},其中,t是元组变
量,表示一个元数固定的元组;P是公式,在数理逻辑中也称为谓词,也就是计算机语言中的条件表
达式。{t|P(t)}表示满足公式P的所有元组t的集合。在元组表达式中,公式由原子公式组成,原子公式有下列两种形式:
(1)R(s),其中R是关系名,s是元组变量。其含义是“s是关系R的一个元组”。
(2)s[i]θu[j],其中s和u是元组变量,θ是算术比较运算符,s[i]和u[j]分别是s的第i个分量和u的第j个分量。原子公式s[i]θu[j]表示“元组s的第i个分量与元组u的第j个分量之间满足θ运算”。例如,“t[2]<u[3]”表示元组t的第2个分量小于元组u的第3个分量。这个原子公式的一种简化形式是s[i]θa或aθu[j],其中a为常量。例如,“t[4]=3”表示t的第4个分量等于3。在一个公式中,如果元组变量未用存在量词“ ”或全称量词“ ”等符号定义,那么称为自由元组变量,否则称为约束元组变量。公式的递归定义如下。
(1)每个原子是一个公式,其中的元组变量是自由变量。
(2)如果P1和P2是公式,那么, P1、P1∨P2、P1∧P2和P1→P2也是公式。
(3)如果P1是公式,那么( s)(P1)和( s)(P1)也都是公式。
(4)公式中各种运算符的优先级从高到低依次为θ、 和 、 、∧和∨、→。在公式外还可以加括号,以改变上述优先顺序。
(5)公式只能由上述四种形式构成,除此之外构成的都不是公式。在元组演算的公式中,有下列四个等价的转换规则:
(1)P1∧P2等价于 ( P1∨ P2)。
(2)P1∨P2等价于 ( P1∧ P2)。
(3)( s)(P1(s))等价于 ( s)( P1(s));( s)(P1(s))等价于 ( s)( P1(s))。
(4)P1→P2等价于 P1∨P2。
关系代数表达式可以转换为元组表达式,例如,R∪S可用{t|R(t)∨S(t)}表示,R-S可用{t|R(t)∧S(t)}表示看了上面的这么一段话,完全不懂元祖演算是什么玩意,哈哈哈。
测试习题
试题1
若对关系R(A,B,C,D)进行π1.3(R)运算,则该关系运算与__B__等价,表示__B__。
A.πA=1,C=3(R) B.πA=1∧C=3(R) C.πA,C(R) D.πA=1∨C=3(R)A.属性A和C的值分别等于1和3的元组为结果集
B.属性A和C的值分别等于1和3的两列为结果集
C.对R关系进行A=1、C=3的投影运算
D.对R关系进行属性A和C的投影运算试题2
若关系R、S如图5-3所示,则R与S自然连接后的属性列数和元组个数分别为__B__;
π1,4(σ3=6(R×S))B。
图5-3关系R与S
(3)A.4和3 B.4和6 C.6和3 D.6和6
(4)A.πA,D(σC=D(R×S))B.πA,R.D(σS.C=R.D(R×S))
C.πA,R.D(σR.C=S.D(R×S))D.πR.A,R.D(σS.C=S.D(R×S))
-
关系查询处理&优化
2020-12-14 08:53:141、假设关系R(A,B)和S(B,C,D)情况如下: R有20 000个元组,S有1 200个元组,一个块能装40个R的元组,能装30个S的元组,估算下列操作需要多少次磁盘块读写。 (1) R上没有索引,select * from R; 解答:这里是要select... -
为什么关系中的元组没有先后顺序且不允许有重复元组?
2021-05-25 01:23:05解释下述名词关系模型,关系模式,关系实例,属性,域, 元组,超键,候选键,主键,实体完整性规则,参照完整性规则,过程性语言,非过程性语言,无限关系,无穷验证。2. 为什么关系中的元组没有先后顺序?3. 为... -
数据库——元组关系演算
2020-10-11 00:13:07文章目录元组关系演算概述种类第一种R(t)第二种` t[i] θ u[j]`第三种` t[i] θ c 或 c θ t[i] ` 元组关系演算 概述 元组:表示关系表中的记录 元组变量:关系表中的某一条记录。 元组关系演算公式: 表示的关系表... -
DBMS-形式化关系查询语言:关系代数、元组关系演算、域关系演算
2017-12-30 16:10:00关系代数 关系代数(relational algebra):一种过程化查询语言。包括一个运算的集合,集合中...关系运算的结果自身也是一个关系,可用一个关系运算表达式作为另一个关系运算的参数,因此可以把多个关系代数运算组... -
数据库第九章课后题(2020.4.27作业)
2020-12-14 11:31:511.假设关系R(A,B)和S(B、C、D)情况如下:R有20000个元组,S有1200个元组,一个块能装40个R的元组,能装30个S的元组,估算下列操作需要多少次磁盘块读写。 (1)R上没有索引 select * from R; R有20000个元组,一个... -
元组关系演算(从集合的角度深入浅出)
2021-05-27 18:22:43元组关系演算(从集合的角度深入浅出) 一、定义 元组关系演算中,以元组为单位,通过公式约束所要 查找元组的条件,可以表示为: t | ψ(t),使...①、R(t):R为关系名,表示t是R中的元组; ②、t[ i ]θu[ j ]:元 -
数据库 元组关系演算
2019-02-17 21:47:37数据库 元组关系演算 -
数据库作业:第九章: 关系查询处理和查询优化习题
2020-12-14 10:55:16设内存中可以存放10块R元组和1块S元组; 则读取总块数为:20000/40+(20000/(40*10)*1200/30=500+2000=2500块; 读R表500块,S表40块,50遍。连接后的元组数为20000个,设每块装40个元组,写成数据块是20000/40=... -
[数据库]元组关系演算
2020-05-07 12:59:52元组关系演算 之前学习了一下关系代数表达式,现在再学习一下元组关系的演算,这样就全了。这篇东西的符号打出来费了好多时间,比较麻烦,还好看着还能看懂,关键是全文本的,好下面开始正文。 为了讨论方便,先... -
第四讲 关系模型之关系代数
2020-03-26 17:17:24关系代数操作以一个或多个关系为输入,结果是一个新的关系(输入关系,输出关系) 用对关系的运算来表达查询,需要指明所用操作,具有一定的过程性。 是一种抽象语言,是学习其他数据库语言的基础 关系代数... -
数据库系统之关系数据库(超详细的关系操作,集合运算等[笛卡尔积、除运算重点])
2020-06-16 11:55:04关系数据库 一、关系数据结构及形式化定义 1.关系 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 逻辑结构----二维表 从用户角度,关系模型中数据的逻辑结构是一张二维表 建立在集合... -
关系型数据库--关系代数
2021-12-15 12:11:17目录 1 概述 2 传统的集合运算 2.1并(union) 2.2差 (expect) 2.3交(intersection) ...关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。 任何运算的三大基本要素都是运算对象、运算... -
【数据库系统 -3】关系代数
2021-02-02 05:16:22所谓关系代数,本质是一种抽象查询语言,用对关系的运算来表达查询。任何关系运算的输出总是一个关系。关系代数描述了关系之间的数学运算,是SQL语句查询的基础,虽然相对鼓枯燥一些,但却重要。说白了,内容其实也... -
数据库原理与应用(6)——关系的候选码、主码和外码、关系完整性、关系代数、元组关系的演算、域关系演算
2020-03-17 23:10:45候选码(Candidate Key):能唯一标识关系中元组的一个属性或属性集 性质:唯一性,最小性 二、关系的主码和外码 主码(Primary Key):从多个候选码中选择一个作为查询、插入或删除元组的操作变量,被选用的候选码... -
数据库关系模型之关系代数
2020-12-14 17:44:35关系代数之基本操作 关系代数操作分为集合操作和纯关系操作: 并相容性 某些关系代数操作,如并、差、交等,需满足“并相容性”。... 关系S的元组数目是4,度数是3; 则R x S的元组数目是12, 度数是6。 两个关系R -
【数据库】测试题二 关系代数
2021-05-27 08:57:03关系R的元组数大于或等于关系S的元组数 答案: A. 关系R的元组数大于关系S的元组数 B. 关系R的元组数等于关系S的元组数 ... -
Python——数字 字符串 元组
2021-01-26 15:37:12Python中的基本数字类型包括:数字(整形、浮点、布尔、复数),字符串,元组,列表,集合,字典... // 与分母分子的数据类型有关系,不一定是整数类型的数 整型和浮点型混合计算后,结果为浮点型 在交互模式中,最后 -
数据库的关系运算和完整性约束
2021-04-25 01:52:27本篇主要讲述关系运算和关系的完整性约束,理解关系操作的含义,了解传统的集合运算,掌握关系代数中基本关系运算。通过本篇的学习,读者应该能掌握以下内容:● 集合的合并、交集、求差、乘积操作● 关系运算的选择... -
计算机软考考试必备知识点:关系运算
2021-07-29 04:38:27知识点总结一、传统的集合运算1、并(union) 设有两个关系r和s,它们具有相同的结构。r和s的并是由属于r或属于s的元组组成的集合,运算符为∪。记为t=r∪s。2、差(difference) r和s的差是由属于r但不属关系运算关系... -
关系数据库-关系代数-数据库习题
2021-07-12 22:40:0722.有两个关系R和S如下:则由关系R得到的关系S的操作是( )。 A. 自然连接 B. 投影 C. 并 D. 选择 正确答案: D 专门关系运算中的选择运算,是从一个关系中选择满足某个条件的部分元组 将关系R和S进 -
【软考】——数据库之关系代数的运算
2016-10-30 19:29:17,元组个数为 m×n 。 4 . 投影 ( Projection ) 这个操作是对一个关系进行 垂直分割,消去某些列 ,并重新安排列的顺序。 设关系 R 是 k 元关系, R 在其分量 A i1 , …... -
MySQL基础 -- 关系代数
2018-07-14 11:40:47关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。 任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的结果。所以运算对象、运算符、运算结果是运算的三大要素。 按运算符的不同... -
2021-11-08
2021-11-08 16:03:11设关系r和s的元组个数分别为50和100,关系t是r与s的笛卡尔积,则t的组个数是5000(t=r×s)。 在关系数据库系统中,一个关系的任意两个元组不能全同。 关系中的每个属性是不可分解的。在关系中,行和列的顺序是无关... -
数据库系统概论 ---- 第二章 -- 关系数据库(2.4 关系代数)
2022-06-10 21:29:282.4 关系代数 2.4.1 传统的集合运算 1. 并(基本运算) 2. 差(基本运算) 3. 交(非基本运算) 4. 笛卡尔积(基本运算) 2.4.2 专门的关系运算 1. 选择(基本运算) 2. 投影(基本运算) 3. 连接(非基本运算) 4. 除运算(非基本...