当前位置: 首页 > news >正文

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

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


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


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.mrgr.cn/news/45057.html

相关文章:

  • MySQL存储过程原理、实现及优化
  • C++ | Leetcode C++题解之第463题岛屿的周长
  • RT-Thread实时操作系统 动态线程的创立
  • 【数学二】一元函数微分学-微分的计算
  • 销冠的至高艺术:让自己不像销售
  • 个人点餐导出—未来之窗行业应用跨平台架构
  • 如何让客户主动成为你的品牌大使
  • @KafkaListener的作用
  • 开放式耳机是什么意思?分享几款适合各类运动佩戴的蓝牙耳机
  • leetcode-哈希篇1
  • 第一讲:Go语言开发入门:环境搭建与基础语法
  • Raft 常见问题解答
  • 多元化网络团队应对复杂威胁
  • Python笔记之识别到当前python脚本所在的目录,而不是执行python命令的目录
  • 【ShuQiHere】 重新定义搜索:本体搜索引擎的时代
  • City Builder Urban 城市都市街道建筑场景模型
  • Golang | Leetcode Golang题解之第462题最小操作次数使数组元素相等II
  • Python | Leetcode Python题解之第463题岛屿的周长
  • Sharding 分页原理分析
  • 拆一个烙铁的射频电源