2013-02-26 4 views
0

J'ai ces tablesalgèbre relationnelle requêtes

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 

Je voudrais récupérer les anniversaires de chacun des enfants de chaque employée en utilisant uniquement les opérations d'algèbre relationnelle suivante {σ, π, ∪, ρ, -, ×}. Jusqu'à présent j'ai π bdate (σ {sex = 'f'} Employé) x (σ {relation = 'enfant'} Dépendant), mais je ne pense pas que ce soit correct.

Répondre

0

Que signifie x? Une jointure naturelle? Produit cartésien ?

Si c'est un produit cartésien, ce produit cartésien aura/pourrait avoir deux attributs distincts nommés BDATE. Vous devez faire avec.

S'il s'agit d'une jointure naturelle, l'attribut BDATE fera partie des champs de jointure. Vous devrez faire avec.

+0

× en algèbre relationnelle est toujours une jointure cartésienne. –

0

π bdate (σ{sex = 'f'} Employee) x (σ{relationship='child'} Dependent) a ambigu bdate s, et rejoindra chaque salariée avec chaque enfant, même sans rapport.

Dans toute expression d'algèbre relationnelle, vous commencez en projetant les attributs que vous aimez:

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

Maintenant, vous pouvez sélectionner les tuples à rejoindre:

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

Et les rejoindre:

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

Sélectionnez uniquement les personnes à charge de chaque employé:

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

De cela, sélectionnez la date de naissance à charge:

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

Si vous êtes bien informé sur l'algèbre relationnelle, vous Constater que je ne l'ai pas fait cela de la manière la plus efficace possible. Vous auriez raison, mais cela montre chaque étape séparément. L'optimisation de cette requête est laissée comme un exercice pour le lecteur.

Questions connexes