0

我有这些桌子

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(σ 部门(dname = 'research'))

我真的很困惑,很困惑......我不知道是否可以在没有等值连接操作的情况下做到这一点。

4

1 回答 1

0

开始写评论,然后改变了主意。:)

如果您查看Wikipedia,您会发现这个等价物:

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

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

所以...

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

(我们需要使用重命名,以免进入无意义的dnumber = dnumber地方。)

于 2013-02-26T04:16:43.773 回答