元组关系演算查询



我正在复习数据库课程,在过去的作业中我有以下问题:

数据库架构如下所示:

LIKES(drinker,beer);
FREQUENTS(drinker,bar);
SERVES(bar,beer,cost);
酒吧

可以提供许多啤酒,饮酒者可以经常光顾许多酒吧,他们可以喜欢很多啤酒。

但是,酒吧不能以不同的价格提供相同的啤酒。

在关系演算中编写以下查询:查找提供服务的柱线至少一种乔喜欢的啤酒,但不提供任何喜欢的啤酒迈克尔。

这是我所拥有的:

{P | ∃L1 ∈ LIKES ∃L2 ∈ LIKES ∃S ∈ SERVES
    (   L1.drinker = 'Joe' ^ S.beer = L1.beer
    ^   L2.drinker = 'Michael' ^ L1.beer != L2.beer
    ^   P.bar = S.bar
    )
}

这看起来可以吗?

机械问题:P似乎指的是来自SERVES的元组,但P从未定义过。添加 P 是 SERVE 的一个元素此外,您从 SERVES 返回元组,而不是条形图。你会想要返回 P.bar,并用一些东西包围这一切,以达到所有P的效果,这样这个内在条件。

现在逻辑本身的问题在于:你发现酒吧至少提供一种乔喜欢的饮料,但至少提供迈克尔不喜欢的饮料。这与迈克尔不喜欢的饮料不同。

有很多方法可以做到这一点,但是修改你必须说的不存在一个喜欢,这样饮酒者是迈克尔和啤酒=啤酒来自服务,其中酒吧是供应乔喜欢的酒吧。

有一个小问题。 P应该替换为 p.bar,因为只询问柱的名称,并且还像其他变量一样定义P。就是这样。

最新更新