关系代数全解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

因为关系被解释为某个谓词的外延,关系代数的每个运算在谓词演算中都有对应者。例如,自然连接是逻辑AND()的对应者。如果关系R和S分别表示谓词p1和p2的外延,则R和S的自然连接(R S)是表示谓词p1p2的外延的关系。

认识到 Codd 的代数事实上关于一阶逻辑不完备是很重要的。实现它会引起不可

R S = {r s| r R, s S}

主条目:投影 (关系代数)

投影是写为的一元运算,这里的是属性名字的集合。这种投影的结果定义为当所有在中的元组被限制为集合的时候所获得的集合。

广义选择是写为 的一元运算,这里的 是由正常选择中所允许的原子

和逻辑算子 (与)、(或) 和 (非)构成的命题公式。这种选择选出 中使

成立的所有元组。

主条目:重命名 (关系代数) 重命名是写为

的一元运算,这里的结果同一于

,除了在所有元组中

的 字段被重命名为 字段之外。它被简单的用来重命名关系的属性或关系自身。

连接和类似连接的运算

自然连接 (⋈)

自然连接是写为 (R ⋈ S ) 的二元运算,这里的 R 和 S 是关系。[1]自然连接的结果是在 R 和 S 中的在它们的公共属性名字上相等的所有元组的组合。例如下面是表格“雇员”和“部门”和它们的自然连接:

雇员

Name

EmpI d DeptNa me

Harry 3415 财务 Sally 2241 销售 George 3401 财务 Harrie

t

2202 销售

部门 DeptNa me Manage

r 财务 George 销售 Harrie t 生产

Charle s

雇员 ⋈ 部门 Name

EmpI d DeptNa me Manage

r

Harry 3415 财务 George Sally 2241 销售 Harrie

t George 3401 财务 George Harrie

t

2202 销售

Harrie t

工作因为外键在相同名字的属性之间保持。如果不是这样,外键成立于从部门.manager到Emp.emp-number,则我们必须在采用自然连接之前必须重命名这些列。这种自然连接有时叫做相等连接(参见θ-连接)。

更形式的说,自然连接的语义定义为:

R S = { t s : t R, s S, fun (t s) }

这里的 fun(r) 是对于二元关系r为真的谓词,当且仅当r是函数二元关系。通常要求R和S必须至少有一个公共属性,但是如果省略了这个约束则在那种特殊情况下自然连接就完全变成上面定义的笛卡尔积。

自然连接可以用 Codd 的原始运算模拟如下。假定b1,...,b m是公共于R和S 的公共属性名字,a1,...,a n是唯一于R的属性名字而c1,...,c k是唯一于S 的属性名字。进一步假定属性名字d1,...,d m不在R和S二者中。第一步我们可以重命名S中的公共属性名字: : S' := ρd1/b1(...ρdm/bm( S)...),接着我们采用笛卡尔积并选择要连接的元组: : T:= σb1=d1(...σbm=dm(R×S')...),最后我们采用一个投影来去掉重命名的属性: : U := πa1,...,an,b1,...,bm,c1,...,ck(T) 。

θ-连接和相等连接

考虑分别列出车模和船模的价格的表“车”和“船”。假设一个顾客要购买一个车模和一个船模,但不想为船花费比车更多的钱。在关系上的θ-连接CarPrice ≥BoatPrice生成所有可能选项的一个表。

CarMod el CarPri ce

CarA 20'000 CarB 30'000 CarC 50'000

BoatMod

el

BoatPri

ce

Boat1 10'000

Boat2 40'000

Boat3 60'000

车船

CarMod

el

CarPri

ce

BoatMod

el

BoatPri

ce

CarA 20'000 Boat1 10'000

CarB 30'000 Boat1 10'000

CarC 50'000 Boat1 10'000

CarC 50'000 Boat2 40'000

如果我们要组合来自两个关系的元组,而组合条件不是简单的共享属性上的相等,则有一种更一般形式的连接算子才方便,这就是θ-连接(或 theta-连接)。θ-

连接是写为或的二元算子,这里的a和b是属性名字,θ是在集合 {<, ≤, =, >, ≥} 中的二元关系,v是值常量,而R和S是关系。这个运算的结果由在R和S中满足关系θ的元素的所有组合构成。只有

S和R的表头是不相交的,即不包含公共属性的情况下,θ-连接的结果才是有定义的。

这个运算可以用基本运算模拟如下:

R

φS = σφ(R×S)

在算子θ是等号算子 (=) 的时候这个连接也相等连接。

但是要注意,支持自然连接和重命名的计算机语言可以不需要θ-连接,因为它可以通过对自然连接(在没有公共属性的时候的它退化为笛卡尔积)的选择来完成。

半连接 (⋉)(⋊)

半连接是类似于自然连接的写为R⋉S的连接,这里的R和S是关系。[2]半连接的结果只是在S中有在公共属性名字上相等的元组所有的R中的元组。例如下面的例子是“雇员”和“部门”和它们的半连接的表:

雇员

Name EmpI

d

DeptNam

e

Harry 3415 财务Sally 2241 销售George 3401 财务

Harrie t 2202 生产

部门

DeptNam

e

Manage

r

销售

Harrie

t

生产

Charle

s

雇员⋉部门

Name

EmpI

d

DeptNam

e

Sally 2241 销售

Harrie

t

2202 生产

更形式的说半连接的语义定义如下:

R S = { t : t R, s S, fun (t s) }

这里的 fun(r) 定义同于自然连接。

半连接可以被使用自然连接模拟如下。假定a1,...,a n是R的属性名字,则:

R S =

a1,..,an

(R S)

因为我们可以通过基本运算模拟自然连接因此也就可以模拟半连接。

反连接 (▷)

相关文档
最新文档