2013-11-22 38 views
0

考虑到这些2个表:投影2个表中关系代数

镉(cd_id,标题,no_tracks,日期,位置,周)

频带(band_id,band_name)

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

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

我也在想联盟,但我不确定。

+0

你的意思是笛卡尔积? – wvdz

+0

编辑我的问题现在明确表示,对不起。 –

回答

0

这确实是用一个工会来完成的。

π title(Cd) ∪ π band_name(Band) 
+0

顺便说一句,谢谢你这里的顺序(把标题(Cd)放在第一位)会干扰结果吗? –

+0

不,集合的定义是无序的,所以没关系。 – wvdz

+0

非常感谢! –

1

是的,联盟是要走的路,但popovits的答案并不完全正确。 在关系代数中,两个操作数必须是'Union Compatible' - 它具有相同名称的属性(以及相同类型的属性) - ref http://en.wikipedia.org/wiki/Relational_algebra,“设置操作符”一节。所以:

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

2)您可能需要操纵这些值,以使它们是相同的类型。 (例如:字段标题和band_name长度是否相同?)

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

请注意,RA比SQL更有纪律性。因此:

1)如果到SQL UNION的列是不同名称的,则SQL从左操作数获取名称。

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

(如果标题宣称比band_name短你可以得到截断。)

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