关系代数的具体操作

时间:2013-02-26 04:06:27

标签: relational-algebra

我有这些表

Employee(ssn, name, sex, address, salary, bdate, dno, superssn)
fk:superssn is ssn in Employee
fk:dno is dnumber in Department

Department(dnumber, dname, mgrssn, mgrstartdate)
fk:mgrssn is ssn in Employee

Dept_locations(dnumber, dlocation)
fk:dnumber is dnumber in Department

Project(pnumber, pname, plocation, dnum)
fk:dnum is dnumber in Department

Dependent(essn, dependent_name, sex, bdate, relationship)
fk: essn is ssn in Employee

Works_on(essn,pno,hours)
fk: essn is ssn in Employee; pno is pnumber in Project

我想仅使用以下关系代数运算{σ,π,∪,ρ, - ,×}来检索财务部门的位置列表。

到目前为止我有: πdlocation(σdepartment(dname ='research'))

我真的被卡住了,感到很困惑......我不知道如果没有等值操作可以做到这一点。

1 个答案:

答案 0 :(得分:0)

开始写评论然后改变了我的想法。 :)

如果你看Wikipedia,你会发现这个等价:

R ⋈_φ S = σ_φ(R × S)

特别是在限制是平等的情况下,它是等值的。这意味着,equijoin相当于对两个字段相等的两个表的笛卡尔积的限制。

因此...

π_{dlocation}(
  σ_{dnumber = loc_dnumber}(
    σ_{dname = "finance"}(department)
    ×
    ρ_{loc_dnumber / dnumber}(dept_locations)))

(我们需要使用重命名,以便我们不会进入无意义的dnumber = dnumber位置。)