我正在复习数据库课程,在过去的作业中我有以下问题:
数据库架构如下所示:
酒吧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
。就是这样。