下图显示了一个小型数据库,
我有一个问题
给出一个关系代数表达式,找出从 2012 年 12 月 1 日开始主持被告“迈克”审判的法官的姓名。
给出的答案是
但我认为它也应该加入JUDGE
表,如下所示:
如果我对此有误,请发表评论
下图显示了一个小型数据库,
我有一个问题
给出一个关系代数表达式,找出从 2012 年 12 月 1 日开始主持被告“迈克”审判的法官的姓名。
给出的答案是
但我认为它也应该加入JUDGE
表,如下所示:
如果我对此有误,请发表评论
不,您无需加入JUDGE
表格即可获得法官的姓名。
注意sJname
的主键是怎么来的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
aDEFENDANT
的主键是他的 ID,所以只有那个 ID 出现在TRIAL
表中,所以如果我们需要按姓名选择被告,我们必须使用连接。
至于你的问题标题:是的,你当然可以加入三个以上的表。如果您觉得难以想象,请回想一下R ⨝ S ⨝ T = (R ⨝ S) ⨝ T
。请注意,自然连接也具有很好的可交换性和关联性。