SQL查询的关系代数与域关系演算

时间:2017-04-25 13:18:38

标签: sql rdbms relational-algebra domain-calculus

表格:

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

1 个答案:

答案 0 :(得分:0)

明显错别字:在微积分中的pointsEnder之前有一个错误的^。你可能想要在Contest&amp;在你的代数中Debater

您尚未提及代数和版本的版本。你要使用的微积分。所以我们只能猜测修正的可能性。您不太可能需要Contest.

注意你的代数&amp;微积分没有等同于起动器和放大器。名称。如果您的加入是自然的,则需要在name周围将starter重命名为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
    ^   ...)