0

表:

Contest(starter, ender, pointsStarter, pointsEnder, debatedate)
Debater(name, club, age)

询问:

提供比赛的所有比赛细节,其中首发辩手是“柏拉图”俱乐部的成员,并阻止他的对手得分。

我写的SQL:

SELECT starter, pointsStarter, ender, pointsEnder, debatedate
FROM contest
WHERE pointsEnder = 0
AND starter IN (SELECT name FROM debater WHERE club = 'Plato')

我写过的关系代数:

Π starter,ender,pointsStarter,pointsEnder,debatedate (
    Ϭ Contest.pointsEnder=0 (
        Ϭ club=”Plato” (Contest Debater)))

我写过的领域关系演算:

{< starter,ender,pointsStarter,pointsEnder,debatedate> | 
    Ǝ < starter,ender,pointsStarter,pointsEnder,debatedate > ϵ Contest (
        Ǝ < name,club,age > ϵ Debater (
            ^ pointsEnder=0 ^ club=”Plato”))
}
4

1 回答 1

0

^明显的错别字:在您的微积分中,pointsEnder 之前有一个错误。你大概打算在你的代数中加入Contest& 。Debater

您没有参考您要使用的代数和微积分的版本。所以我们只能猜测修正的可能性质。您不太可能需要Contest..

请注意,您的代数和微积分并没有等同于启动器和名称。如果你的加入是自然的,你需要重命名namestarteraround Debater。你最里面的微积分需要一个附加的合取来把它们等同起来。

您不想通过以下方式删除结果列:

Π starter,ender,pointsStarter,pointsEnder,debatedate (...)

您想要删除非结果列。如果您的加入是自然的,那就是:

Π club, age (...)

类似地,微积分查询的结果列必须在右侧表达式中显示为自由(不被Ǝ量化)。所以而不是:

Ǝ < ... > ϵ Contest (...)

你需要类似的东西:

Ǝ < s,e,ps,pe,dd > ϵ Contest (
        s=starter ^ e=ender ^ ps=pointsStarter ^ pe=pointsEnder ^ dd=debatedate
    ^   ...)
于 2017-04-26T05:40:55.480 回答