-1

私はこれらのテーブルを持っています

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

次の関係代数演算{σ、π、∪、ρ、-、×}のみを使用して、すべての女性従業員の各子の誕生日を取得したいと思います。

これまでのところ、πbdate(σ{sex ='f'} Employee)x(σ{relationship ='child'} Dependent)がありますが、正しくないと思います。

4

2 に答える 2

0

π bdate (σ{sex = 'f'} Employee) x (σ{relationship='child'} Dependent)あいまいなbdates を持っており、すべての女性従業員に、無関係の子供も含めてすべての子供を連れて行きます。

関係代数式では、関心のある属性を射影することから始めます。

π(ssn, sex)Employee ...something... π(essn, bdate, relationship)Dependent

結合するタプルを選択できるようになりました。

(σ{sex='f'} π(ssn, sex)Employee) ...something...
(σ{relationship='child'} π(essn, bdate, relationship)Dependent)

そしてそれらに参加してください:

(σ{sex='f'} π(ssn, sex)Employee) ×
(σ{relationship='child'} π(essn, bdate, relationship)Dependent)

各従業員の扶養家族のみを選択します。

σ{ssn=essn} ((σ{sex='f'} π(ssn, sex)Employee) ×
(σ{relationship='child'} π(essn, bdate, relationship)Dependent))

そこから、依存する生年月日を選択します。

π(bdate)(σ{ssn=essn} ((σ{sex='f'} π(ssn, sex)Employee) ×
(σ{relationship='child'} π(essn, bdate, relationship)Dependent)))

リレーショナル代数に精通している場合は、私が可能な限り効率的な方法でこれを行っていないと思うかもしれません。あなたは正しいでしょうが、これは各ステップを個別に示しています。このクエリの最適化は、読者の演習として残されています。

于 2013-02-27T00:58:14.593 に答える
0

x は何の略ですか? 自然結合?デカルト積 ?

デカルト積の場合、そのデカルト積は、BDATE という名前の 2 つの異なる属性を持つ可能性があります。あなたはそれに対処する必要があります。

自然結合の場合、BDATE 属性は結合フィールドの一部になります。あなたはそれに対処する必要があります。

于 2013-02-27T00:07:10.187 に答える