关系代数(Relational Algebra)概览

关系代数概览

传统的关系代数的操作包含四个大类
1 平常的集合操作—并、交、差
2 selection(选择):选择满足某些条件的行; projection(投影):选择某些属性 的列
3 合并两个关系元组的操作,包括笛卡尔乘积(Cartesian product)以及联合(join)操作
4 重命名(renaming)操作

以上是关系代数的操作,下面对其进行一一讲解:

关系的集合操作

三个基本的集合操作如下

  • R S
    R和S的并,是R有的或S有的或者两者都有的,如果一个元素在R和S中都有的话,那么只出现一次

  • R S
    R和S的交,是R和S所共有的元素

  • R — S
    是R和S的差集,其结果是出现在R中而不出现在S中的元素,R-S和S-R是不同的,S-R是出现在S中而不出现在R中的元素

在应用以上三个操作的时候,需要对关系R和S做出一定的限制

  • R和S必须具有相同属性集合的模式

  • 在应用以上三个操作的时候,关系S和R的列必须是有序的,两个关系的属性的顺序应该是一致的

例子:

name address gender birthdate
Zhang Shuai Xiajin, Dezhou, Shandong M 3/3/94
Wang Zi Mizhi, Yulin, Shanxi F 2/2/93

关系R

name address gender birthdate
Zhang Shuai Xiajin, Dezhou, Shandong M 3/3/94
Zhao Liu Jinhua, Shaoxing, Zhejiang M 5/5/96

关系S

对这两个关系应用以上三个操作的结果如下

  • R S
name address gender birthdate
Zhang Shuai Xiajin, Dezhoum, Shandong M 3/3/94
Wang Zi Mizhi,Yulin,Shanxi F 2/2/93
Zhao Liu Jinhua, Shaoxing, Zhejiang M 5/5/96
  • R S
name address gender birthdate
Zhang Shuai Xiajin, Dezhou, Shandong M 3/3/94
  • R — S
name address gender birthdate
Wang Zi Mizhi, Yulin, Shanxi F 2/2/93

投影(projection)

投影操作用于从关系R中找出拥有某些属性的列,表达式 πA1,A2,...,An(R) π A 1 , A 2 , . . . , A n ( R ) 的值为属性 A1,A2,...,An A 1 , A 2 , . . . , A n 的列,将这些列选择出来后,按原顺序排列

name address gender birthdate
Zhang Shuai Xiajin, Dezhoum, Shandong M 3/3/94
Wang Zi Mizhi,Yulin,Shanxi F 2/2/93
Zhao Liu Jinhua, Shaoxing, Zhejiang M 5/5/96

个人信息关系

应用如下表达式:

πname,birthdate π n a m e , b i r t h d a t e

得到如下关系:

name birthdate
Zhang Shuai 3/3/94
Wang Zi 2/2/93
Zhao Liu 5/5/96

需要注意的是:当仅选出一列时,如果该列中存在相同的值,那么只会保留一个值

选择(Selection)

选择操作用于选出满足条件的某些行,并且将整个操作记为 σC(R) σ C ( R ) 。C被称作条件表达式。考虑如下关系:

titile year length genre studioName producerC#
Star Wars 1977 124 sciFi Fox 12345
Galaxy Quest 1999 104 comedy Dreamworks 17890
Waune’s World 1992 95 comedy Paramount 99999

电影关系

使用如下操作

σlength100(Movies) σ l e n g t h ≥ 100 ( M o v i e s )

可以得到一下关系:

title year length genre studioname producerC#
Star War 1977 124 comedy Dreamworks 17890
Galaxy quest 1999 104 comedy Paramount 99999

条件C可以是一个复杂的表达式:

σlength100ANDstudioName=Fox(Movies) σ l e n g t h ≥ 100 A N D s t u d i o N a m e = ′ F o x ′ ( M o v i e s )

可以得到这样一个元组

title year length genre studioName producerC#
Star War 1977 124 true Fox 12345

笛卡尔乘积(Cartesian Product)

假设有两个关系R和S,则笛卡尔乘积就是将两个关系进行组合,组合的结果中第一部分可以是R中的任意一行,第二部分可以是S中的任意一行。其表达式为R×S,在进行组合的过程中,如果两个关系有相同的属性,且属性值是相同的,那需要将R或者S作为前缀放在属性之前,下例:

A B
1 2
3 4

关系R

B C D
2 5 6
4 7 8
9 10 11

关系S

A R.B S.B C D
1 2 2 5 6
1 2 4 7 8
1 2 9 10 11
3 4 2 5 6
3 4 4 7 8
3 4 9 10 11

R×S

自然连接(natural Joins)

自然连接是一种比较特殊的等价连接,其将关系中具有相同的列名的列进行匹配,对于某行来说,如果两个列名相同,且元素相同,则进行连接,使用R S代表此操作,下例
取上例中的R和S,R S的结果为

A B C D
1 2 5 6
3 4 7 8

RS R ⋈ S

再举一例:

A B C
1 2 3
6 7 8
9 7 8

关系U

B C D
2 3 4
2 3 5
7 8 10

关系V

A B C D
1 2 3 4
1 2 3 5
6 7 8 10
9 7 8 10

US U ⋈ S

theta-连接(theta-joins)

theta指的是一些随机条件,用代表 θ θ 。对于两个关系,用公式表示为 RCS R ⋈ C S
其基本步骤为:

  • 计算R和S的乘积

  • 选出满足条件C的元组

给出如下表达式:

UA<DS U ⋈ A < D S

对如下U和V进行操作:

A B C
1 2 3
6 7 8
9 7 8

关系U

B C D
2 3 4
2 3 5
7 8 10

关系V

给出U×V

A U.B U.C V.B V.C D
1 2 3 2 3 4
1 2 3 2 3 5
1 2 3 7 8 10
6 7 8 2 3 4
6 7 8 2 3 5
6 7 8 7 8 10
9 7 8 2 3 4
9 7 8 2 3 5
9 7 8 7 8 10

U×V

得出结果:

A U.B U.C V.B V.C D
1 2 3 2 3 4
1 2 3 2 3 5
1 2 3 7 8 10
6 7 8 7 8 10
9 7 8 7 8 10

UA<DS U ⋈ A < D S

或者更复杂一点的表达式

UA<DANDU.BV.BV U ⋈ A < D A N D U . B ≠ V . B V

A U.B U.C V.B V.C D
1 2 3 7 8 10

结果

对操作进行组合以进行查询

举一例:
由Fox制作的长度为100分钟以上的电影的标题和年份是多少?

  • 首先,查的是标题和年份,用的是projection
  • 由Fox制作的且100分钟以上,用的selection

先进行selection,然后进行projection,用公式可以表示为

πtitle,year(σlength100(Movies)studioName=Fox(Movies)) π t i t l e , y e a r ( σ l e n g t h ≥ 100 ( M o v i e s ) ⋂ s t u d i o N a m e = ′ F o x ′ ( M o v i e s ) )

或者,可以这样写:
πtitle,year(σlength100ANDstudioName=Fox(Movies)) π t i t l e , y e a r ( σ l e n g t h ≥ 100 A N D s t u d i o N a m e = ′ F o x ′ ( M o v i e s ) )

命名和重命名

使用 ρS(A1,A2,...,An)(R) ρ S ( A 1 , A 2 , . . . , A n ) ( R ) ,来重命名R,内部的元组是一样的,只是关系名和属性名改变了,如果不想改变属性名,那么只需要 ρS(R) ρ S ( R ) 即可
以上述的关系为例,在笛卡尔乘积部分,合并时存在相同的属性名,需要加前缀进行区分,由此,我们可以使用重命名方法:

A B X C D
1 2 2 5 6
1 2 4 7 8
1 2 9 10 11
3 4 2 5 6
3 4 4 7 8
3 4 9 10 11

ρX,C,D(S) ρ X , C , D ( S )

或者我们写成这样:
ρRS(A,B,X,C,D)(R×S) ρ R S ( A , B , X , C , D ) ( R × S )

你可能感兴趣的:(数据库学习,数据库系统基础教程,chapter2.4)