【发布时间】:2013-11-02 08:01:49
【问题描述】:
下图显示了一个小型数据库,
我有个问题
给出一个关系代数表达式来找出法官的名字 主持对被称为“迈克”的被告的审判 2012 年 1 月 12 日。
给出的答案是
但我认为它应该加入 JUDGE 表以及类似这样的东西:
如果我错了,请发表评论
【问题讨论】:
下图显示了一个小型数据库,
我有个问题
给出一个关系代数表达式来找出法官的名字 主持对被称为“迈克”的被告的审判 2012 年 1 月 12 日。
给出的答案是
但我认为它应该加入 JUDGE 表以及类似这样的东西:
如果我错了,请发表评论
【问题讨论】:
不,您无需加入JUDGE 表即可获取法官的姓名。
注意Jname是JUDGEs的主键,也就是说,一个法官是由她的名字唯一标识的; 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。请注意,自然连接也具有很好的可交换性和关联性。
【讨论】: