关系代数中 Select 行 "one of each"

Select rows with "one of each" in relational algebra

假设我有一个 Personstable,属性为 {name, pet}。我如何 select 拥有每种宠物 (dog, cat, bird) 的人的名字,但是如果他们的宠物在 table 中,那么每个人只有一种宠物。

示例:Bob, DogBob, Cat 是 table 中唯一的行。因此,Bob每种宠物各一只。但是添加 Lynda, Bird 后, Bob 不再有每种宠物。

我认为第一步是π(pet)。由于关系代数删除了重复项,因此您会得到各种宠物的列表。不知道这之后该怎么做,但我想我需要加入 π(pet)Persons.

我已经尝试了一些东西,例如 Natural Join 和 Cross 产品,但我还没有得出结果,我没有想法。

可以通过 Division operator:

找到问题的答案

人÷π宠物(人)

这个关系代数表达式 returns 只与列 name 的关系,包含拥有所有不同种类宠物的人的所有姓名目前[=25] =] 存在于 Persons table 本身。

除法是一个运算符,从某种意义上说,它是乘积运算符的逆运算(名称正是源于这一事实)。它是一个派生运算符,可以根据投影、集差和乘积来定义(例如参见 [​​=13=])。