数据库原理及应用:用实例理解关系代数(传统集合运算和专门关系运算)

news2024/12/31 7:12:31

!注意!:本篇博客只是利用实例来更好地理解关系代数,有关本章内容专业的表达式在此篇博客中未被提及。本博客中关系和表格这两个表达是等价的。


关系操作分为传统集合运算和专门关系运算,这一篇博客我们将从实例进行关系操作的讨论。为了便于理解,我们围绕如下的表格(是一个选课课表)进行讨论:


1.传统的集合运算

1.1并(Union)

并需要两个关系X,Y。需满足:

1.具有相同的列数

2.X中某列(属性)和Y中某列(属性)必须来自同一个域

上述两种关系称为相容关系,其他集合运算同样需满足相容关系。

以上述表格为例,如果王家和王修蓝也选择了数据库,那么并操作可以向原有表格添加数据

X+Y=Z

如图,向原有的课表新增了王家、王修蓝两位同学的信息。(最左侧表格相当于关系X,中间表格相当于关系Y,X+Y得到最右边表格关系Z)

1.2差(Difference)

差需要两个关系X,Y。

X-Y的运算结果是属于X不属于Y的元组组成的新关系。

以1.1中的计算为例,使用关系Z减去关系Y依旧可以得到关系X。所以差运算可以向原有表格删除数据

Z-Y=X

1.3交(Intersection)

交需要两个关系X,Y。

X∩Y的运算结果是既属于X也属于属于Y的元组组成的新关系。

我们还是以选课表为例,不同年份的选课有所不同,如果我们想找出不同年份中选择相同课程的同学则可以用并运算(并运算可以找出不同表格的相似之处):

红色的代表不同年份中选择相同课程的同学,使用并运算可以得出最右边表格这样的形式。

1.4广义笛卡尔积

广义笛卡尔积可以理解为相乘操作。前提条件是操作的两个表格的列必须完全一致。再对行进行一一相乘(一一对应)的操作。具体实例如下图:

有更好的实例暂时没想出来~大家可以提出宝贵意见。

2.专门的关系运算

首先谈论一下几个有关的概念。

以我们假设的选课表为例:

1.一行代表一个元组

2.“付慧”表示第一行元组中关于姓名这一属性的分量

3.属性组表示的是这一整个表格(代表一个关系)去掉某些属性之后剩余属性的集合,比如姓名和学号可以组成一个属性组

4.现在有2个属性集,比如是姓名、学号、学院、班级(四者为属性集A)和课程(为属性集B)。可以规定姓名、学号、学院、班级属性集,分量为相同值的元素(比如:付慧、1、信息、1)组成一个集合,表示该值在关系R中的像集表示表格中属性组X值为(付慧、1、信息、1)在课程属性集上分量的集合。该集合对专门的关系运算有很重要的意义,后续讨论。


2.1选取(Selection)

选取属于单目运算,即只对进行操作,在表格中选取我们想要的行。选取操作用于查询、筛选信息。比如想筛选出所有来自林学院的学生,则可以利用选取的表达式,使得学院这一属性=林,将所有学院属性为“林”的学生筛选出来,得到以下结果:

2.2投影(Projection) 

投影也属于单目运算,即只对进行操作,在表格中选取我们想要的行。投影操作也用于查询、筛选信息。比如只想要表格中学生的姓名、学院、班级,则可以利用表达式包含(姓名、学院、班级)这三个属性,就可以将这三种属性提取出来。从下面表格表示的结果可以看出:投影删除了相同的属性(比如投影运算后有3个"付慧",但是删除了2个相同的)。以此保证了运算结果元组的唯一性

2.3 连接(Join)

连接分为θ连接和自然连接。二者区别在于自然连接将相同的列合并在一起,同时使用一个名字。

 连接属于二目运算,即从两个关系中的笛卡尔积中选取满足连接条件的元组,同时对行和列进行操作。其中又具体分为等值连接、小于连接和大于连接。

2.3.1等值连接

等值连接可以将两个表格中某两个域值相同的属性相等,从而筛选出想要的结果。而等值连接中就细分成了θ连接和自然连接。这二者在其中的具体区别是:θ连接中相同域的属性的属性名不用一致(比如在一个表格中测量学、地图学...这些名称叫做“课程”,在另一个表格中叫做“课程名”,但是一样能连接;自然连接必须保证相同域的属性的属性名必须保持一致

 

(1)θ连接

θ连接根据域相同的属性(其实就是相同的属性),但是属性名不一定相同,进行两个表格的连接(说一句题外话,有一点像ArcGIS中属性表的连接)。

(2)等值连接

等值连接必须保证连接的两个属性的属性名称一致,如下表所示:

这个连接是根据两个表具有相同属性“学院”,将两个表连接在一起 。同时合并之后肯定会出现重复的情况比如有3个“付慧”等,但是自然连接将相同的名称合并。

2.3.2大于连接

现在有两个关系X,Y。大于连接的目的是首先找到相同属性(属性名也不用相同),筛选出所有关系X中某属性比关系Y中对应属性大的所有元组的集合(同时也将两个关系合并)。如下图所示:我们想筛选出左边表格中所有比学科代码为2,3大的学科代码所对应的元组的集合,同时合并右边表格。

--------------------------------------------------( 4>2 , 4>3 , 3>2 )---------------------------------------------------

2.3.3小于连接

小于连接和大于连接类似,所以不再赘述。

2.4除法(Division)

除法是二目运算。现在有两个关系X,Y。假设X、Y各有两个属性集X(A,B),Y(B,C)。属性集在最前面介绍过,比如:(姓名、学院、班级)就是一个属性集,属性集包含一个或多个属性。现在属性集B是相同的。而除法的本质就是筛选出关系X中属性集B符合关系Y中属性集B的属性集A那一部分元组的集合。实例如下图:

假设课程和学院是一个属性集,则(测量学,林)的像集是{ (王家,3,1) }

(数据库,信息)的像集是{(付慧,1,1),(陈志波,6,2),(安立折,7,3)}。所以如果要筛选出选择的课程为数据库且是信息学院的学生以及筛选课程是测量学且是林学院的学生,就要用初始的这个表格除以包含筛选条件的表格:(测量学,林)和(数据库,信息),表示结果如下:

所有满足条件的学生都在新的表格中。我们修改除数(可以当做筛选条件理解)成为其他的比如所有班级为1,学号为1的同学选的课,可以同样将筛选结果计算出来。


感谢阅读,如有错误恳请批评指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go基本数据结构

1.jdk丰富的数据结构 Jdk提供了许多基本数据结构的实现,这些数据结构是Java Collections Framework的一部分,位于java.util包中。以下是一些常见的数据结构: ArrayList:一个可调整大小的数组实现,支持快速随机访问。 …

[Algorithm][贪心][合并区间][无重叠区间][用最少数量的箭引爆气球]详细讲解

目录 1.合并区间1.题目链接2.算法原理详解3.代码实现 2.无重叠区间1.题目链接2.算法原理详解3.代码实现 3.用最少数量的箭引爆气球1.题目链接2.算法原理详解3.代码实现 1.合并区间 1.题目链接 合并区间 2.算法原理详解 区间问题思路: 排序 左端点(本题)右端点 根…

Docker安装及使用记录

本文汇总一下 Docker 的安装过程和使用过程中的问题 安装过程 Windows Linux 更新软件源:Linux安装前可先更新以下各自发行版包管理器的软件源 卸载旧版本:如果之前安装过的话,可以先卸载 yum remove docker docker-common docker-sel…

『网络游戏』自适应制作登录UI【01】

首先创建项目 修改场景名字为SceneLogin 创建一个Plane面板 - 将摄像机照射Plane 新建游戏启动场景GameRoot 新建空节点重命名为GameRoot 在子级下创建Canvas 拖拽EventSystem至子级 在Canvas子级下创建空节点重命名为LoginWnd - 即登录窗口 创建公告按钮 创建字体文本 创建输入…

基于SpringBoot“花开富贵”花园管理系统【附源码】

效果如下: 系统注册页面 系统首页界面 植物信息详细页面 后台登录界面 管理员主界面 植物分类管理界面 植物信息管理界面 园艺记录管理界面 研究背景 随着城市化进程的加快和人们生活质量的提升,越来越多的人开始追求与自然和谐共生的生活方式&#xf…

RabbitMQ(学习前言)

目录 学习MQ之前有必要先去温故下微服务知识体系,以加深本章节的理解 一、微服务间的通讯方式 1. 基本介绍 2. 同步通讯 2.1. 什么是同步通讯 2.2. 同步通讯存在的问题 问题一:耦合度高 问题二:性能和吞吐能力下降 问题三&#xff1a…

YOLOv11改进,YOLOv11添加DCNv4可变性卷积(windows系统成功编译),二次创新C2f结构,全网最详细教程

改进训练结果前: 二次创新C2f结构训练结果: 摘要 引入了可变形卷积 v4 (DCNv4),这是一种为广泛视觉应用设计的高效且有效的操作算子。DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以…

【动态规划-4.2 最长递增子序列(LIS)】力扣300. 最长递增子序列

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的 子序列 。 示例 1&…

LVM——让Linux磁盘空间的弹性管理

什么是LVM? LVM(Logical Volume Manager)逻辑卷管理是在Linux2.4内核以上实现的磁盘管理技术。它是Linux环境下对 磁盘分区进行管理的一种机制。现在不仅仅是Linux系统上可以使用LVM这种磁盘管理机制,对于其它的类UNIX操作系统,以及windows操…

用Manim简单解释奇异值分解(SVD)和图像处理方面的应

一,介绍 奇异值分解(SVD)是一种重要的矩阵分解技术,在统计学、信号处理和机器学习等领域有广泛应用。对于任意给定的矩阵 A(可以是任意形状的矩阵),SVD将其分解为三个特定的矩阵的乘积&#x…

【时间盒子】-【9.任务设置项】自定义任务名称、任务时长等设置项组件

Tips: Stage、Link装饰器的使用; 参考我的帖子:https://developer.huawei.com/consumer/cn/forum/topic/0208152234389094513?fid0101587866109860105 一、预览 红色框:任务设置项列表,把它定义为一个组件对象SettingList。绿…

Python 工具库每日推荐【PyPDF2】

文章目录 引言Python PDF 处理库的重要性今日推荐:PyPDF2 工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:PDF文件合并案例分析高级特性加密和解密PDF添加水印扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计模式 专栏…

Vue基础(2)检测数据原理~生命周期

文章目录 检测数据原理1.更新时遇到的问题2.检测数据的原理-对象3. vue.set()的使用 收集表单数据过滤器内置指令1.v-text2.v-html3.v-cloak4.v-once5.v-pre 自定义指令生命周期1.挂载流程2.更新流程3.销毁流程 检测数据原理 1.Vue会监视data中的所有层次的数据 2.如何监测对象…

10月8日星期二今日早报简报微语报早读

10月8日星期二,农历九月初六,早报#微语早读。 1、我国自主研制的300兆瓦级F级重型燃气轮机在上海首次点火成功; 2、2024国庆档超21亿收官:《志愿军:存亡之战》票房8亿夺冠; 3、维克托安布罗斯&#xff0…

STM32工程环境搭建(库函数开发)

目录 1、移植固件库&标准库 2、新建工程 以STM32f401作为例子进行环境搭建 1、移植固件库&标准库 ①桌面创建工程文件夹并且提取内核文件 用户文件:用户自己编写的程序文件 .c .h文件 .c文件:具体函数功能源代码 .h文件:宏定义…

ctf.bugku - bp (弱密码top1000)

题目来源: bp - Bugku CTF 首先,下载top1000 ,弱密码文本: PasswordDic/top1000.txt at master k8gege/PasswordDic GitHub 访问页面,随便输入个密码 发送请求到 intruder 以密码问参数 加载top1000.txt 密码文本&…

springboot开发网站-使用redis数据库定时特征限制指定ip的访问次数

springboot开发网站-使用redis数据库定时特征限制指定ip的访问次数。近期网站经常有人恶意访问,提交了很多垃圾信息。为了屏蔽这类灌水帖,打算屏蔽ip地址,限制24小时内只能访问1次某个接口。下面是测试的案例代码内容。 1:首先&am…

实验三 Web基础-JavaScript

实验三 Web基础-JavaScript 目的: 1、理解和掌握Javascript基本语法 2、掌握JavaScript操作表单对象的方法 3、理解和掌握JavaScript的函数与事件 4、理解JavaScript的内置对象 实验要求: 1、使用JavaScript语言实现实验要求 2、要求提交实验报告&…

HTB:Pennyworth[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What does the acronym CVE stand for? 2.What do the three letters in CIA, referring to the CIA triad in cybersecurity, stand for? 3.What is the version of the service running on port 8080? 4.What version of Jenkins i…

【C++11】可变模板参数

文章目录 可变模板参数的概念递归函数方式展开参数包 STL容器中的empalce相关的接口函数emplace 与 insert / push_back 的区别 可变模板参数的概念 可变参数模板是 C11 引入的一种模板特性,允许定义可以接收任意数量参数的模板,广泛应用于函数和类的设计…