2012-05-09 2 views
1

私はデータベースコースを改訂しており、正しい答えがあるかどうかわからない過去の課題から次の質問があります。ここで質問です:ここではTuple Relational Calculusクエリ

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

これは大丈夫に見えるのか? ありがとう

答えて

1

機械的な問題: PはSERVESからのタプルを参照しているようですが、Pは定義されません。 Add in a PはSERVESの要素です また、バーではなくSERVESからタプルを返します。あなたはP.barを返すことを望み、このすべてをPの効果のために何かに囲み、この内部条件を取り入れたいと思うでしょう。

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

これを行うにはたくさんの方法がありますが、酒飲みはマイケルで、SERVESのビール=ビールはジョーが好きなものを提供するバーであるというLIKESは存在しないと言わなければなりません。

0

多少の問題があります。 Pp.barに置き換えます。これは、バーの名前のみが尋ねられ、他の変数と同様にPを定義するためです。それでおしまい。

関連する問題