考虑这两个表:
Cd(cd_id,title,no_tracks,date,position,weeks)
Band(band_id,band_name)
任务是:列出关系代数中的所有乐队名称和CD标题。
我用这种方式写道:Πband_name(Band)ANDΠtitle(Cd),但我不确定这是否正确。
我也在考虑联盟,但我不确定。
答案 0 :(得分:1)
是的,联盟是要走的路,但popovits的回答并不完全正确。 在关系代数中,两个操作数必须是'Union Compatible' - 具有相同名称的属性(以及相同类型的那些属性) - ref http://en.wikipedia.org/wiki/Relational_algebra,section'Set operators'。所以:
1)重命名属性,使它们名称相同。
2)您可能必须操纵值以使它们是相同的类型。 (例如:字段title和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中不允许重复,因为每个关系必须是一个集合。
答案 1 :(得分:0)
这确实是通过工会完成的。
π title(Cd) ∪ π band_name(Band)