Drinker (drinker, age, address)
Like(drinker, beer)
Beer (beer, manufacturer)
Bar (bar, owner, address)
Frequent(drinker, bar)
Sell (bar, beer, price)
找到那些能够在他经常光顾的酒吧找到他喜欢的所有啤酒的饮用者。
我不确定我的答案,并希望对我是否在正确的轨道上进行一些验证:
R1:=πdrinker,bar,beer(LIKE⨝FREQUENT)
R2:=πdrinker,bar,beer(FREQUENT⨝SELL)
R3:=πdrinker,bar(R1-R2)
Solution:= FREQUENT - R3
R1尝试获取所有饮酒者,喜欢啤酒,酒吧参观
R2试图让所有酒吧的所有啤酒频繁饮用
R3让所有饮酒者和酒吧成分不能满足所有饮用的啤酒
最后,从整个集合中减去这些集合(R3)
这是对的吗?
答案 0 :(得分:0)
R1:=πdrinker,bar,beer(LIKE⨝FREQUENT)
这是Like(drinker, beer) AND Frequent(drinker, bar)
行。你需要投射吗?无论如何投射是否合理?
R2:=πdrinker,bar,beer(FREQUENT⨝SELL)
这是FOR SOME price, Frequent(drinker, bar) AND Sell(bar, beer, price)
行。你需要投射吗?无论如何投射是否合理?
R3:=πdrinker,bar(R1-R2)
这是行
FOR SOME beer,
Like(drinker, beer) AND Frequent(drinker, bar)
AND NOT FOR SOME price, Frequent(drinker, bar) AND Sell(bar, beer, price)
Solution:= FREQUENT - R3
这是行
Frequent(drinker, bar)
AND NOT FOR SOME beer,
Like(drinker, beer) AND Frequent(drinker, bar)
AND NOT FOR SOME price, Frequent(drinker, bar) AND Sell(bar, beer, price)
我如何证明我的主张?
这是
Frequent(drinker, bar)
AND FOR ALL beer,
NOT (Like(drinker, beer) AND Frequent(drinker, bar))
OR FOR SOME price, Frequent(drinker, bar) AND Sell(bar, beer, price)
即
Frequent(drinker, bar)
AND FOR ALL beer,
Like(drinker, beer) AND Frequent(drinker, bar)
IMPLIES FOR SOME price, Frequent(drinker, bar) AND Sell(bar, beer, price)
即
Frequent(drinker, bar)
AND FOR ALL beer,
Like(drinker, beer) IMPLIES FOR SOME price, Sell(bar, beer, price)
为什么?
这是饮酒者频繁酒吧的行,对于所有啤酒,如果饮酒者喜欢啤酒,那么酒吧会以某种价格出售啤酒。这是对的吗?
如果R
& S
在R(...)
& S(...)
分别表示R(...) OR S(...)
所在行的关系是什么样的?你怎么能算出来的?为什么这是一个问题?如果R
& S
在...
中具有相同的属性?那么IMPLIES
呢?
我们可以使用什么样的启发式方法从简单的最终非正式表达式开始,并尝试获取那些(Like
s与那些)drinker
s& bar
进入FOR ALL
和IMPLIES
?即从简单的版本开始,并编写生成我的重写?
这样做的机械方法,即始终有效,使用 prenex normal form 作为Codd用来证明 Codd定理,它表示(一种形式的)关系代数可以表达任何关系微积分的形式。