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 の効果に合わせて何かで囲み、この内部状態を実現します。

次に、ロジック自体の問題です。ジョーが好きな飲み物を少なくとも 1 杯提供し、マイケルが嫌いな飲み物を少なくとも 1 杯提供するバーを見つけます。それは、マイケルが好きな飲み物がないことと同じではありません。

これを行うには多くの方法がありますが、バーがジョーの好きなものを提供するバーである SERVES の場合、drinker が Michael で、beer =beer などの LIKES が存在しないことを変更する必要があります。

于 2012-06-16T21:03:06.527 に答える