数据库_数据模型(五)

笛卡尔乘积(cross-product)×

例:
R1

sidbidday
2210110/10/96
5810311/12/96

S1

sidsnameratingage
22dustin745.0
31lubber855.5
58rusty1035.0

R1和S1作笛卡尔乘积的结果是,R1和S1中的各个元组做两两拼接,即笛卡尔乘积的结果有2 * 3 = 6 条元组:

(sid)snameratingage(sid)bidday
22dustin745.02210110/10/96
22dustin745.05810311/12/96
31lubber855.52210110/10/96
31lubber855.55810311/12/96
58rusty1035.02210110/10/96
58rusty1035.05810311/12/96

注:1. 这两张表里都有sid这个属性。在同一张表里,不能有两个属性同名,这里存在一个冲突。在关系代数中,提供了Renaming operator:
ρ ( C ( 1 → s i d 1 , 5 → s i d 2 ) ) , S 1 × S 2 \rho \left( {C\left( {1 \to {\rm{sid}}1,{\kern 1pt} 5 \to sid2} \right)} \right),S1 \times S2 ρ(C(1sid1,5sid2)),S1×S2
上式中,1表示笛卡尔乘积结果中的第一个属性,5表示第五个属性。将第一个属性重命名为sid1,第5个属性重命名为sid2.
2. 笛卡尔乘积的结果常常拼接出很多没有意义的元组。我们更多时候要的是连接操作。

连接(Joins)

条件连接(Conditon Join)⋈这个云算符打不出来,以下用其他符号近似替代:

R ▹ ◃ C S = σ C ( R × S ) R \triangleright { \triangleleft _C}S = {\kern 1pt} {\kern 1pt} {\sigma _C}\left( {R \times S} \right) RCS=σC(R×S)

S 1 ▹ ◃ S 1. s i d &lt; R 1 . s i d R 1 S1 \triangleright { \triangleleft _{S1.{\rm{sid}}{\kern 1pt} {\rm{ &lt; }}{\kern 1pt} {\rm{R1}}{\rm{.sid}}}}R1 S1S1.sid<R1.sidR1
S1和R1的条件c的条件连接结果:S1和R1做笛卡尔乘积,再按条件C做选择操作:

(sid)snameratingage(sid)bidday
22dustin745.05810311/12/96
31lubber855.55810311/12/96

注:
1. 先做笛卡尔乘积,在选择,效率较低。有其他效率高的办法,查询优化的时候再提。
2. 条件连接也叫theta-join.

等值连接(equal join):条件C中,全是等值判断的连接。
S 1 ▹ ◃ s i d R 1 S1 \triangleright { \triangleleft _{sid}}R1 S1sidR1:按S1和R1 sid相等做等值连接。结果:

(sid)snameratingagebidday
22dustin745.010110/10/96
58rusty1035.010311/12/96

注:
等值属性去掉一列。

自然连接(Natural Join):两张表在它们所有公共属性上都做等值连接。

在上面等值连接的例子中,等值连接实际上就是自然连接,因为两个表只有一个公共属性sid。

除法操作(Dvision):除法操作并不是关系运算中的基本操作,但在实际应用开发中常用到。其适用于类似于下面的问题:
找到预定了所有船的水手。

假设A有两个属性:x和y;B有一个属性y,那么定义:
A / B = { ⟨ x ⟩ ∣ ∃ ⟨ x , y ⟩ ∈ A ∀ ⟨ y ⟩ ∈ B } A/B{\kern 1pt} {\kern 1pt} {\kern 1pt} = {\kern 1pt} {\kern 1pt} {\kern 1pt} \left\{ {\left\langle x \right\rangle {\kern 1pt} {\kern 1pt} |{\kern 1pt} {\kern 1pt} {\kern 1pt} \exists {\kern 1pt} {\kern 1pt} \left\langle {x,y} \right\rangle {\kern 1pt} \in {\kern 1pt} A{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \forall \left\langle y \right\rangle \in B} \right\} A/B={xx,yAyB}

即A/B的结果是,对关系B中任意一个y值,在关系A中都能找到<x,y>∈A,这样的x,就是符合除法条件的x。(即在关系A中与关系b里所有y值都有联系的x值)

通常,x和y可以是属性集合。

例 A/B

A

snopno
s1p1
s1p2
s1p3
s1p4
s2p1
s2p2
s3p2
s4p2
s4p4

B1

pno
p2

B2

pno
p2
p4

则A/B1:

sno
s1
s2
s3
s4

A/B2:

sno
s1
s4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值