【问题标题】:Projection of 2 tables in Relational Algebra关系代数中 2 个表的投影
【发布时间】:2013-11-22 19:54:27
【问题描述】:

考虑这两个表:

Cd(cd_id、title、no_tracks、日期、位置、周)

乐队 (band_id, band_name)

任务是:列出关系代数中的所有乐队名称和 cd 标题。

我是这样写的:Π band_name (Band) AND Π title (Cd),但我不确定这是否正确。

我也在考虑 Union,但我不确定。

【问题讨论】:

  • 你是指笛卡尔积吗?
  • 编辑了我的问题,现在说清楚了,对不起。

标签: algebra relational relational-algebra


【解决方案1】:

是的,Union 是要走的路,但 popovits 的回答并不完全正确。 在关系代数中,两个操作数必须是“联合兼容”——即具有相同名称的属性(以及相同类型的属性)——参考http://en.wikipedia.org/wiki/Relational_algebra,“集合运算符”部分。所以:

1) 重命名属性,使它们具有相同的名称。

2) 您可能必须对这些值进行操作,以使它们具有相同的类型。 (例如:字段 title 和 band_name 的长度是否相同?)

需要注意的是,如果您的 CD 标题与 band_name 相同,则您只会得到一个元组。 (同名专辑很可能会出现这种情况)。

请注意,RA 比 SQL 更规范。所以:

1) 如果 SQL UNION 的列名称不同,SQL 会从左侧操作数中获取名称。

2) SQL 也采用左操作数的类型。

(如果 title 被声明比 band_name 短,您可能会被截断。)

在 SQL 中,您可以使用 UNION ALL http://en.wikipedia.org/wiki/Set_operations_(SQL) 在同名专辑的结果中重复。 RA 中不允许重复,因为每个关系都必须是一个集合。

【讨论】:

    【解决方案2】:

    这确实是通过联合来完成的。

    π title(Cd) ∪ π band_name(Band)
    

    【讨论】:

    • 谢谢,顺便问一下,这里的顺序(把title(Cd)放在第一位)会影响结果吗?
    • 不,集合根据定义是无序的,所以没关系。
    • 嘿@popovitsj 你知道这个答案吗:stackoverflow.com/questions/20154463/…
    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 2013-02-04
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    相关资源
    最近更新 更多