下图显示了一个小型数据库,
我有一个问题
Give a relational algebra expression to find the name of the judge who presides over the trial for defendant known as “Mike” starting on 1.12.2012.
给出的答案是
但我认为它应该加入 JUDGE
表以及类似这样的内容:
如果我的观点有误,请发表评论
最佳答案
不,您不需要加入 JUDGE
表来获取法官的姓名。
注意Jname
是JUDGE
的主键,也就是说,法官由她的名字唯一标识; TRIAL
表实际上包含 Jname
表示哪个法官主持了给定的审判:
Judge | Defendant | Number | Sdate
Dredd | 1 | 1 | 1.12.2012
Dredd | 2 | 2 | 2.12.2012
Rico | 1 | 3 | 1.12.2012
您可以看到选择元组如何在不加入任何内容的情况下为我们提供法官的名字。(如果您想知道,这是一个非常糟糕的设计,您永远不应该在现实世界中使用。)
相反,我们必须将 DEFENDANT
与 TRIAL
连接起来:DEFENDANT
的主键是他的 ID,因此只有该 ID出现在 TRIAL
表中,因此如果我们需要按姓名选择被告,我们必须使用联接。
至于你的问题标题:是的,你当然可以加入三个以上的表。如果您觉得很难想象,请回想一下R ⨝ S ⨝ T = (R ⨝ S) ⨝ T
。请注意,自然连接也具有良好的交换性和关联性。
关于relational-algebra - 我可以使用自然连接来连接 3 个表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19740069/