数据库考点之关系代数表达

article/2025/11/9 1:28:33

如题:2018年4月

 分析:有难度,书上没有明确介绍元组关系演算,所以也有些超纲了。只能作为扩展部分来了解下:

就看懂了前面的部分为广义笛卡尔积定义。

关系代数这部分虽然在2019年10月14日《软考考点之数据库关系运算符含义的理解》中有所涉及,但是相当的不全面的,也很不系统。

其相关出题,一般在SQL设计大题中出,详见《SQL考点之SQL查询、SQL支持数据类型(设计大题)》

1、关系代数的存在的意义:

关系代数(代数方式)、元组关系演算与域关系演算(逻辑方式)代表着关系操作能力,均是抽象的查询语言。用来评估查询语言能力的标准或基础。

2、关系代数操作符:

注:标出的是五种基本的关系操作符,其他操作都由基本操作来定义或导出。

比较和逻辑操作符是专门用来辅助 :“专门的关系运算符”。

3、关系代数之集合运算符

主要是从行的角度进行操作的,并且都是二元操作(都是两个操作数(关系)参与)。

并:书写形式为:R3=R1 U R2,含义为:属于R1和R2,去掉重复元组后的集合R3.

差:R3=R2-R1;含义与概率论一样。

交:R3=R1 ∩ R2;

笛卡尔积:R3=R1 X R2;含义为:R1为m元关系,R2为n元(列)关系,则积为(m+n)个分量的元组,且有mXn个元组。

4、关系代数之专门关系运算符:不仅是行,还有列的操作。

一元操作符,选择和投影,结果是产生一个新的关系,是分解关系的有效方法

选择:表示为σF(R),读作:西格玛 F是条件表达式,R是关系名 形式为:select 关系名 where 条件

投影:πA(R);读作:派 A是属性列,R是关系名。形式为:projection 关系名(属性名1...)

两元操作符:

连接:读作:西塔,R、S是不同的关系,i代表R的第i列,j代表S的第j列。 θ代表比较运算符。含义为:从R X S中选择第i列与第j列满足 θ的元组,组成一个新的关系。形式为 join 关系名1 and 关系名2 where 条件

其中,自然连接是构造新关系有效方法。何为自然连接呢?

前提还是要有笛卡尔积,从积中找出相同属性列,并把重复的列去掉。得到相同属性列所在笛卡尔积元组即为新的自然连接关系。详见:《软考考点之数据库关系运算符含义的理解》中的例子

除:R1 ÷ R2。若被除有m元关系,除关系为n元关系,则运算结果为m-n元关系。一般来说商关系包含除关系的所有元组,否则就得不到新关系。

扩展:

元组关系演算定义:

元组关系演算中,以元组为单位,通过公式约束所要查找元组的条件,可以表示为: t | ψ(t),使φ(t)为真的元组t的集合。其中: t为元组变量,即查询目的,φ为元组演算的谓词公式,即查询的条件。
按照集合的思想来理解即为:个体词t具有谓词φ(t)的性质。

  • 元组关系演算的谓词公式

 ψ(t)可以通过原子公式、约束公式、自由变量、运算符构成。

(Ⅰ)原子公式分为三类

①、R(t):R为关系名,表示t是RR中的元组;

②、t[ i ]θu[ j ]:元组t的第i个分量与元组u的第j个分量进行比较运算,运算符号用θ来表示。比如t[ 2 ]<u[ 3 ]。

③、t[ i ]θC:元组的第i个分量与常量C进行比较运算,运算符号用θ来表示。比如t[ 2 ]<5。

(Ⅱ)约束元祖变量 && 自由元组变量

若元组演算公式中的一个元组变量前有“全称量词”和“存在量词”,则称该变量为约束元组变量; 否则称为自由元组变量。
即: 在公式【(∃ t) ψ(t)】和【(∀ t) ψ(t)】中,ψ称为量词的辖域。tt出现在(∃ t)或(∀ t)的辖域内,t为约束元组变量,被量词所绑定。任何没有以这种方法显示绑定的变量都称为自由变量。 

(Ⅲ)为此公式ψ(t)的递归定义

①、原子公式是公式;

②、通过吸取连接词、合取连接词所构成的复合公式也是公式。
设ψ1(t1)和ψ2(t2)是公式,则¬ψ1(t1),ψ1(t1) ⋀ ψ2(t2)和ψ1(t1) ⋁ ψ2(t2)也是公式;

③、利用全称量词和存在量词构成的公式也是ψ(t)ψ(t)的一种表现形式 。
【(∃ t) ψ(t)】和【(∀ t) ψ(t)】也是公式;

④、有限次利用上述规则得到的式子都是公式; 

  • 公式运算符及其优先级

(Ⅰ)算术比较符: <, >, ≥, ≤, ≠, =;

(Ⅱ)全称量词∀和存在量词∃;

(Ⅲ)逻辑运算符: ⋀, ⋁, ¬, ⟶;

(Ⅳ)优先级: 算术比较符 > 全称量词∀和存在量词∃ > 逻辑运算符;

  • 元组关系演算与关系代数

​ 在元组关系演算中,可以不用考虑为解决表的自然连接中产生数据冗余而进行投影属性列。
(注意:最好还是考虑,但是为了简化步骤就没有考虑)。

Ⅰ)传统关系代数 到 元组关系演算

①、交操作:{t|R(t) ⋀ S(t)}{t|R(t) ⋀ S(t)};

②、并操作:{t|R(t) ⋁ S(t)}{t|R(t) ⋁ S(t)};

③、差操作:{t|R(t) ⋀ ¬S(t)}{t|R(t) ⋀ ¬S(t)};

④、广义笛卡尔积操作:{ t(m+n) | (∃u)(∃v) (R(u)ΛS(v)) ⋀ (t[ i ]=u[ j ] (i=1,2,...,m) ⋀ t[ i ]=v[ k ]) }{ t(m+n) | (∃u)(∃v) (R(u)ΛS(v)) ⋀ (t[ i ]=u[ j ] (i=1,2,...,m) ⋀ t[ i ]=v[ k ]) },
其中(i=m+1,m+2,...,m+n) (j=1,2,...,m) (k=1,2,...,n)}(i=m+1,m+2,...,m+n) (j=1,2,...,m) (k=1,2,...,n)};

(Ⅱ)专门关系代数 到 元组关系演算

(1) 选择操作:{t | R(t) ⋀ F}{t | R(t) ⋀ F},其中FF是指查询条件。选取操作只是在原有的表上,将满足特定性质的元组提取出来,并没有形成新的表。

(2)投影操作: {t(n) | (∃u) (R(u) ⋀ t[ i ] = u[ j ])}{t(n) | (∃u) (R(u) ⋀ t[ i ] = u[ j ])},其中(i=1,2,...,n,j∈[1,countA(R)])(i=1,2,...,n,j∈[1,countA(R)])。
即为,∃u ∈ R∃u ∈ R,满足t[ 1 ] = u[ 1 ]t[ 1 ] = u[ 1 ]。投影是建立了一个新的表,这个表中的列来自于原表中的属性列(感兴趣的、被选取出来的列)。

补充

 投影用存在量词∃的原因

  • 浅析打开全称量词∀和存在量词∃的方式

(Ⅰ)存在量词∃:当需求中含有“存在一个”、“至少一个”、“有一个”等词的时候。就像上述的投影操作一样:有且仅有一个RR中的uu元组,满足t[ i ] = u[ j ]t[ i ] = u[ j ]。


(Ⅱ)全称量词∀:当需求中含有“全部”、“所有”等词,并且将“全部”一词去掉有后改变原句句意的时候。eg:

①、“在进行操作的过程中选择某一集合中全部元素”的元素集合时,即此时的“全部”并不是默认值,默认值为“至少一个 / 存在”,比如说某个要求为:“查询选修了全部课程的学生”,此时将“全部”一词去掉后变为“查询选修了课程的学生”,不难发现,前一个是“选修了全部课程”,后一个是“只要是选修了课程,即至少选修了一门课程”,将两者比较,两句话的句意完全不同。

②、在经过一系列操作后所得到的集合中选择全部元组时,即此时的“全部”为默认值:对于“查询选修了‘刘伟’老师的课程的全部学生”,将“全部”一词去掉后变为“查询选修了‘刘伟’老师的课程的学生”,这并没有lenlen何差别,所以自然就“不配”使用“全称量词∀”了。

补充

关于“投影中使用‘存在量词∃’的另一角度的理解”:“将所有的元组投影到属性列上”,把“所有的”一词去掉变为“将元组投影到属性列上”,显然这两句话其实是一样的意思。

  • 命题的否定 VS 否命题

存在一个命题为:若p,则q。

(Ⅰ)命题的否定: 若p,则¬q。(√)

也就是说,命题的否定只会否定命题的结论,并不会否定命题的条件。简单来说就是与原命题唱反调,所以他与原命题是完全对立的。所以我们研究问题的时候用的“正难则反”就是研究问题的否定形式¬q¬q。

(Ⅱ)否命题: 若¬p,则¬q。(PASS)

也就是说,否命题会把命题的条件和结论一起否定掉。他与原命题的真假无关,与逆命题同真同假。

img

(Ⅲ)全称量词∀和存在量词∃的否定形式

(1)全称量词∀的否定形式

①、更换量词: 将全称量词∀换成存在量词∃;
②、将结论否定;

也就是说: 全称量词∀的否定是一个存在命题。

(2)存在量词∃的否定形式

①、更换量词: 将存在量词∃换成全称量词∀;
②、将结论否定;

也就是说: 存在量词∃的否定是一个全称命题;

 

  • 总结,深入全称量词∀和存在量词∃的打开方式

研究“全称量词∀和存在量词∃”本质上就是研究“集合”的有关问题,所以要先把握住集合与集合之间的关系。任何两个集合的关系有且仅可能有3种:相交、包含、相离,并且这三种关系又有如下的关系:

(1)“相离” 与“相交”∪“包含”:互为对立事件,即“全部都没” VS “至少有一”;
(2)“包含” 与“相交”∪“相离”:互为对立事件,即“全部都有” VS “至少没一”;

了解了这个后,我们就可进一步的归纳出使用"全称量词∀和存在量词∃"的情景:

(1)当某个事件被表述为两个集合“相离”或者“包含”的时候 :使用“全称量词∀”来表示“全部都没”或者“全部都有”;
(2)当某个事件被表述为两个集合“相交”的时候:使用“存在量词∃”来表达“至少有一”或者“至少没一”;

举个栗子 :

(1)相离:“没有选修过‘李力’老师教授的课程的同学”这个问题就可以被表述为:“Ai∩B=ϕ”,其中Ai = {第i个学生的“学生-选课信息”的课程编号集合},B = {‘李力’老师教授的课程的课程编号集合};

(2)相交:“选修过‘李力’老师教授的课程的同学”这个问题就可以被表述为:“Ai∩B≠ϕ”,其中Ai = {第ii个学生的“学生-选课信息”的课程编号集合},B = {‘李力’老师教授的课程的课程编号集合};

(3)包含:“选修了‘李力’老师教授的全部课程的同学”这个问题就可以被表述为:“Ai ⊇ B”,其中Ai = {第i个学生的“学生-选课信息”的课程编号集合},B = {‘李力’老师教授的课程的课程编号集合};

从“正”、“反”两个方面考虑问题的角度来说:

(1)当考虑的问题是“全部都有”时则可以从正面入手,在关系代数中利用除法,在元组演算中利用“全称量词∀”

(2)当考虑的问题是“至少没有一个”时则可以从反面入手,在关系代数中利用除法 + 减法,在元组演算则从正面入手,直接利用“存在量词∃”,译作“存在一个没有满足……”;

(3)当考虑的问题是“至少存在一个”时则可以从正面入手,在关系代数中利用自然连接,在元组演算中利用“存在量词∃”,译作“存在一个满足……”;

(4)当考虑的问题是“全部都无”时则可以从反面入手,在关系代数中利用自然连接 + 减法,在元组演算中利用“全称量词∀”;


http://chatgpt.dhexx.cn/article/1b81Sh2P.shtml

相关文章

数据库应用之关系代数(relational algebra)

关系代数表达式的五个基本算子 1.选择&#xff08;selection&#xff09;&#xff1a;即选择某些行。代码&#xff1a;select from where。表达式&#xff1a;σ<条件>&#xff08;<表>&#xff09;。 2.投影&#xff08;projection&#xff09;&#xff1a;即…

Linux压缩打包命令——tar、zip、unzip

打包跟压缩的区别&#xff1a; 打包是指将多个文件或者目录放在一起&#xff0c;形成一个总的包&#xff0c;这样便于保存和传输&#xff0c;但是大小是没有变化的&#xff0c;压缩是指将一个或者多个大文件或者目录通过压缩算法使文件的体积变小以达到压缩的目的&#xff0c;…

linux tar压缩文件命令,tar打包压缩文件命令

tar命令 tar命令用于将多个文件合成1个文件,wiki中把这个命令和cpio、shar等一起叫做archive文件,个人理解是归档,合成一个文件,后就可以用gzip、bz2、xz等工具进行压缩,同时也能方便在各个计算机间传输,有点类似windows下共享的zip文件。 wiki上这个图比较形象,tar把零…

解压缩 tar命令详解

1、 tar命令进行文档的归档和压缩 归档和压缩文件 归档和压缩文件的好处&#xff1a;节约硬盘的资源&#xff0c;加快文件传输速率 tar命令 作用&#xff1a;打包、压缩文件&#xff1b;tar文件是把几个文件和&#xff08;或&#xff09;目录集合在一个文件里&#xff0c;该存…

使用sobel、prewitt、拉普拉斯算子、差分法提取图像的边缘

参考&#xff1a; https://www.cnblogs.com/dengdan890730/p/6145585.html https://blog.csdn.net/touch_dream/article/details/62447801 https://blog.csdn.net/xiahn1a/article/details/42141429 https://blog.csdn.net/swj110119/article/details/51777422 什么是边缘…

图像边缘检测——一阶微分算子 Roberts、Sobel、Prewitt、Kirsch、Robinson(Matlab实现)

图像边缘一般指图像的灰度变化率最大的位置。成因主要如下&#xff1a; 1.图像灰度在表面法向变化不连续&#xff1b; 2.图像中物体在空间上的深度不一致&#xff1b; 3.在光滑的表面上颜色不一致&#xff1b; 4.图像中物体的光影 边缘检测指的是从图像中检测边缘点和边缘段…

python图像处理(十一)——图像锐化与边缘检测之Roberts算子、Prewitt算子、Sobel算子、Laplacian算子

在图像增强过程中&#xff0c;通常利用各类图像平滑算法消除噪声&#xff0c;图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。一般来说&#xff0c;图像的能量主要集中在其低频部分&#xff0c;噪声所在的频段主要在高频段&#xff0c;同时图像边缘信息也主要集中在其高…

机器学习MATLAB实现:Matlab-梯度Roberts算子、拉普拉斯算子、Sobel算子、Prewitt算子对图像进行锐化

机器学习MATLAB实现&#xff1a;Matlab-梯度Roberts算子、拉普拉斯算子、Sobel算子、Prewitt算子对图像进行锐化 欢迎大家来到安静到无声的《模式识别与人工智能&#xff08;程序与算法&#xff09;》&#xff0c;如果对所写内容感兴趣请看模式识别与人工智能&#xff08;程序与…

10.1 Python图像处理之边缘算子-Sobel算子、Roberts算子、拉普拉斯算子、Canny算子、Prewitt算子、高斯拉普拉斯算子

10.1 Python图像处理之边缘算子-Sobel算子、Roberts算子、拉普拉斯算子、Canny算子、Prewitt算子、高斯拉普拉斯算子 文章目录 10.1 Python图像处理之边缘算子-Sobel算子、Roberts算子、拉普拉斯算子、Canny算子、Prewitt算子、高斯拉普拉斯算子1 算法原理1.1 Sobel 算子1.2 Ro…

【计算机视觉】卷积、均值滤波、高斯滤波、Sobel算子、Prewitt算子(Python实现)

##1.环境的搭建 Python 3.6OpenCV Open Source Computer Vision Library.OpenCV于1999年由Intel建立&#xff0c;如今由Willow Garage提供支持。OpenCV是一个基于BSD许可&#xff08;开源&#xff09;发行的跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、MacOS操作…

几种边缘检测算子的比较Roberts,Sobel,Prewitt,LOG,Canny

from&#xff1a;https://blog.csdn.net/gdut2015go/article/details/46779251 边缘检测是图像处理和计算机视觉中的基本问题&#xff0c;边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括&#xff1a;深度上的…

prewitt算子实现

原理&#xff1a; 实现&#xff1a; /*** description: prewitt算子* param src 输入图像* param dst 输出图像*/ void prewitt(cv::Mat& src, cv::Mat& dst) {cv::Mat getPrewitt_horizontal (cv::Mat_<float>(3, 3) << -1, -1, -1, 0, 0, 0, 1, 1, …

数字图像处理——Sobel算子锐化、Prewitt算子锐化

数字图像处理——Sobel算子锐化、Prewitt算子锐化 一、Sobel算子锐化 %函数名称为Image_Sobel,输入参数Image,输出参数IMAGE function [IMAGE] Image_Sobel(Image) %获取矩阵的行、列、波段数 [m,n,bands] size(Image); %定义模板大小&#xff0c;假设模板大小33 A 1; %定义…

Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术

前文传送门&#xff1a; 「Python 图像处理 OpenCV &#xff08;1&#xff09;&#xff1a;入门」 「Python 图像处理 OpenCV &#xff08;2&#xff09;&#xff1a;像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python 图像处理 OpenCV &#xff08;3&#xff09;&…

[Python从零到壹] 五十七.图像增强及运算篇之图像锐化Roberts、Prewitt算子实现边缘检测

欢迎大家来到“Python从零到壹”&#xff0c;在这里我将分享约200篇Python系列文章&#xff0c;带大家一起去学习和玩耍&#xff0c;看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解&#xff0c;真心想把自己近十年的编程经验分享给大家&#xff0c;希望…

Prewitt算子计算图像梯度

Prewitt算子是一阶微分算子的边缘检测&#xff0c;利用像素点上下、左右邻点的灰度差&#xff0c;在边缘处达到极值检测边缘&#xff0c;去掉部分伪边缘&#xff0c;对噪声具有平滑作用。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成&#xff0c;这两个方向模板…

opencv-6 边缘检测(Prewitt算子,Sobel算子,Laplacian算子)

Roberts filter2D形式实现 import cv2 import numpy as np import matplotlib.pyplot as pltimg cv2.imread(lena.jpg) lenna_img cv2.cvtColor(img,cv2.COLOR_BGR2RGB) grayImage cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)kernelx np.array([[-1,0],[0,1]],dtypeint) kernely…

梯度与Roberts、Prewitt、Sobel、Lapacian算子

一、学习心得&#xff1a; 学习图像处理的过程中&#xff0c;刚开始遇到图像梯度和一些算子的概念&#xff0c;这两者到底是什么关系&#xff0c;又有什么不同&#xff0c;一直困扰着我。后来在看到图像分割这一模块后才恍然大悟&#xff0c;其实图像的梯度可以用一阶导数和二…

【计算机视觉】图像分割与特征提取——基于Roberts、Prewitt、Sobel算子的图像分割实验

个人简介&#xff1a; > &#x1f4e6;个人主页&#xff1a;赵四司机 > &#x1f3c6;学习方向&#xff1a;JAVA后端开发 > ⏰往期文章&#xff1a;SpringBoot项目整合微信支付 > &#x1f514;博主推荐网站&#xff1a;牛客网 刷题|面试|找工作神器 > &#…

边缘检测——Prewitt算子

垂直水平方向边缘 垂直水平方向的Prewitt算子是可分离的卷积核。 45、135方向边缘 算子不可分割。 缺点 没有充分利用边缘的梯度方向最后输出的边缘二值图&#xff0c;只是简单地利用阈值进行处理。如果阈值过大&#xff0c;则会损失很多边缘信息&#xff1b;如果阈值过…