SQL查询的关系代数和域关系演算
表:SQL查询的关系代数和域关系演算,sql,rdbms,relational-algebra,domain-calculus,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 (SEL
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”))
}
我写过的领域关系演算:
Π 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”))
}
{|
Ǝ竞赛(
Ǝ<姓名、俱乐部、年龄>辩手(
^pointsEnder=0^club=“Plato”))
}
明显的打字错误:在您的演算中,pointsEnder前面有一个错误的^
。你大概打算在代数中加入竞赛
和辩论者
你还没有提到你要使用的代数和微积分的版本。因此,我们只能猜测更正的可能性质。你不太可能需要比赛。
注意,你的代数和微积分并没有把初学者和名字等同起来。如果您的加入是自然的,您需要将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
^ ...)
Ǝ(
s=starter^e=ender^ps=pointsStarter^pe=pointsEnder^dd=debatate
^ ...)
我想知道关系代数和域演算是否是问题的正确答案请编辑您的问题,评论不是为了澄清,只是暂时的。另外,请给出你应该使用的代数和微积分变体的参考,因为有很多。此外,如果你想要的不仅仅是“是”或“否”,你应该证明你的工作是正确的。