【问题标题】:Theta Join in Relational Algebra CorrectnessTheta 加入关系代数的正确性
【发布时间】:2013-11-22 21:04:34
【问题描述】:

考虑这两个表:

乐队(band_id、乐队名)

Band_Member(band_id、member_name、dob、国家、性别)

任务:使用 theta Join 列出乐队成员的姓名和他们所在的乐队的名称。

好吧,我的疑问是在加入后仅显示乐队名称和成员名称的步骤。

这就是我完成 theta-join 的方式:σ Band_Member.band_id = Band.band_id (Band_member x Band)

这就是我认为只显示乐队名称和成员名称可能是正确的方式:

Π band_name, member_name (σ Band_Member.band_id = Band.band_id (Band_member x Band))

编辑: 我也想知道以这些方式编写相同任务的笛卡尔积是否正确:

Π 乐队名称,成员名称(乐队成员 x 乐队)

Π 成员名称 (Band_Member) x Π 乐队名称 (Band_Member)

【问题讨论】:

  • 不需要θ连接,为什么必须使用?
  • 嗯,基本上是因为我的老师希望我们这样做。

标签: algebra relational relational-algebra


【解决方案1】:
Π band_name, member_name (σ Band_Member.band_id = Band.band_id (Band_member × Band))

显示每个乐队的所有乐队成员。

Π band_name, member_name (Band_Member x Band)

这会列出每个乐队的任何乐队的每个成员,无论他们是否是该乐队的成员。这和你之前的表达不一样。

Π member_name (Band_Member) x Π band_name (Band_Member)

这是一个关系,包含任何乐队的每个成员,每个乐队都有一个成员(这是所有乐队的子集)。这和你之前的任何一个表达都不一样。

第一个表达式的更惯用方式是自然连接:

Π band_name, member_name (Band_Member ⋈ Band)

这和你的第一个表达式是一样的。

【讨论】:

  • 我找不到你写的符号,这就是我用选择运算符做的原因。在这种情况下,第三个表达式将是一种更正确的方法,即简单地在两个表之间进行笛卡尔积并显示 band_member 和 band_name 列?
  • 不,(Band_Member ⋈ Band) 表示(σ (where every attribute with the same names in every table are equal) (Band_member × Band))
  • 那将是第四个表达式,不是吗?我的意思是这个:Π member_name (Band_Member) x Π band_name (Band_Member)
  • Π member_name (Band_Member) x Π band_name (Band_Member) 是一个关系,而不是一个列表。它将每个乐队成员与每个拥有成员的乐队联系起来。 Π band_name, member_name (Band_member × Band) 将每个乐队成员与每个乐队联系起来,即使他们不是该乐队的成员,即使乐队没有成员。它们不一样。
  • 哦,我知道了。第一个表达式不显示没有任何乐队成员的乐队或没有乐队的乐队成员是吗?
猜你喜欢
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
相关资源
最近更新 更多