问题问:
给定两个关系 A 和 B,它们都超过属性 x 和 y。在bag语义下编写一个查询,如果B为空则返回A,否则返回B
我解释这个问题的方式是“空的”意味着关系中没有元组。
这个问题是在一般意义上给出的,因此没有与每个关系相关联的值。
希望有人可以指导我开始。
编辑:到目前为止,我看到如果B为空,则A union B会产生正确的答案。但是在B不为空的情况下,我们需要取与B的交集,即(A union B) intersect B但这在B为空时不起作用
编辑:在A和B都是非空的情况下举一个例子:
答:((1,1),(2,2))
B : ((3,3), (4,4))
查询应返回: ((3,3), (4,4))
但是,如果我们将B更改为: ()
查询应返回: ((1,1), (2,2))
我只是想不通集合运算符的可能组合可以让我实现这一目标。
编辑:这是一个链接,基本上是用于教我们关系代数的确切幻灯片,大约 3/4 的方式定义了我的问题使用的袋子上的代数。课堂上使用的教科书是 Ramakrishnan 和 Gehrke 第 3 版第 100 页的“数据库管理系统”,但这是可选文本,我们被告知我们的主要参考资料应该是幻灯片。
为了浓缩幻灯片,我们的代数有选择、投影、重命名、笛卡尔积、并集和差集。所有其他操作都可以由这些操作组合而成。
为了解决问题的根源,我上学期为我的数据库模块准备了一张旧问题表,我最近重新审视了它,为我即将进行的一个项目修改了关系代数,但这个问题困扰了我好几天。提出问题的讲师已经离开,很遗憾我不能问他们。
正如您所注意到的,如果 B = ∅, A ∪ B返回 A,否则返回来自 A 和 B 的元组。
换句话说,结果是正确的,除了当 B 非空时包含 A。
您需要一个额外的表达式 E,如果 B 非空,它将返回 A;否则∅。
然后将通过以下方式给出所需的结果:
(A ∪ B) - E
只有当 B 非空时,才会从结果中删除 A。
要找到 E,请考虑当 B = ∅ 时A × B 的行为。
这应该足以让您找到合适的 E 并解决您的问题。
下面的剧透解决方案。