给出以下表格架构
customer (name: string, credit: integer)
allowance (no: string, type: string)
asker(cname: string, lno: string)
asker.cname和asker.lno是引用客户的外键,分别是allowance,其键是name,分别是no(number)
我正在尝试为查询编写关系代数,以查找共享相同限额的客户名称对。避免将自己列入客户(蒂姆,蒂姆),并避免一遍又一遍地列出(例如(蒂姆,简)和(简,蒂姆)应该是一个)
我试过的是:
ρ(Cust1, π no (allownace)
ρ(Cust2, π no (allownace)
π name, name((Cust1 ∩ Cust2)(customer))
我认为这是不正确的。特别是,我遇到麻烦,我需要找到具有相同津贴的客户,同时也避免客户自己并重复。
答案 0 :(得分:1)
通过σ(name1<> name2)消除(Tim,Tim)。 (关系(船)是非反身的。)
只消除(Tim,Jane)中的一个& (Jane,Tim)但不是(Tim,Tim)通过σ(name1 op name2),其中 op 是< =或> =之一。 (关系(船)是反对称的。)
通过σ(name1 op name2)消除这两种情况,其中 op 是<或者>。 (这种关系是非反身和反对称的。)
(重新查询&代数见this answer。)