我正在攻读考试,其中包括关系代数的概念。 这本书说我不能在两个相同的关系上做一个theta连接(一个无论什么条件的连接),所以让我假设我有:
person(ssn, name, surname, age)
disease(ssn_p, gravity, code)
来自人的ssn是主键。 来自疾病的代码是主键,而ssn_p是引用person.name的外键。 那么我可以在两个具有共同字段的关系上进行联接吗? 因此,例如,有两个关系(选择和投影的结果):
R1(ssn, name)
R2(ssn_p name)
我可以在R1和R2之间进行连接(我找不到要粘贴的符号,对不起)?
答案 0 :(得分:2)
当关系共享属性时,您无法执行theta-join。原因是theta-join基本上并置了属性。换句话说,如果a1, a2, ..., an
中的R1
属性为b1, b2, ..., bm
,而R2
中的属性属于R1
,那么R2
上的theta-join的结果和{ {1}}将是具有属性R3
的{{1}}关系。如果a1, a2, ..., an, b1, b2, ..., bm
和R1
共享任何属性,则R2
将具有重复的属性。关系代数中不允许重复的属性。
如果您希望在关系共享某些属性时执行theta-join,则可以对其中一个关系执行重命名操作,以便所有属性都变得不同。