1

我正在修改数据库课程,我从过去的作业中有以下问题,我不确定我是否有正确的答案。这是问题:

The database schema is as follows:
• LIKES(drinker,beer);
• FREQUENTS(drinker,bar);
• SERVES(bar,beer,cost);
• Bars can serve many beers, drinkers can frequent many bars, and they can like many beers.
    However, a bar cannot serve the same beer at different costs.

Write the following query in relational calculus: Find bars that serve at least one beer liked by Joe, but do not serve any beer liked by
Michael.

这是我所拥有的:

{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)}

这看起来好吗?谢谢

4

2 回答 2

1

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

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

有很多方法可以做到这一点,但是修改你必须说不存在 LIKES 的内容,例如饮酒者是 Michael,啤酒 = 来自 SERVES 的啤酒,其中 bar 是提供 Joe 喜欢的东西的酒吧。

于 2012-06-16T21:03:06.527 回答
0

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

于 2014-03-17T13:26:35.523 回答