Information

Author(s) Quentin Cappart
Deadline No deadline
Submission limit No limitation

Sign in

Opération de division

Cette question va vous introduire à l'opérateur relationnel de division. Une description de cet opérateur est disponible dans l'ouvrage de référence (exercices pratiques du chapitre 2).

Division (\(\div\))

L’opérateur de division, permet d’exprimer des requêtes de type "pour tout". Considérons deux relations \(R(X, Y)\) et \(S(Y)\), où les attributs de \(S\) sont inclus dans ceux de \(R\) (indiqué par \(S \subseteq R\)).

La division : \(R \div S\) produit une relation sur les attributs \(X\) tels que :

  • \(x \in R \div S \iff \forall y \in S,\ (x,y) \in R\)

Intuitivement, on ne retourne les valeurs de \(X\) qui sont seulement associées à toutes les valeurs de \(S\). Cet opérateur est très utile pour exprimer des requêtes du style:

  • Les étudiants ayant suivi tous les cours obligatoires.
  • Les instructeurs enseignant tous les cours d’un département.

Exemple

Considérons les relations :

  • \(\mathsf{prereq}(\underline{course\_id},\underline{prereq\_id})\)
  • \(\mathsf{course}(\underline{course\_id}, title, dept\_name, credits)\)

On souhaite trouver les cours qui ont tous les cours du département ``Physics`` comme prérequis.

  • Etape 1: ensemble des cours du département Physics.
    • \(S \leftarrow \pi_{course\_id}(\sigma_{dept\_name='Physics'}(course))\)
    • Cela correspond à \(S(course\_id)\).
  • Étape 2: relation des prérequis.
    • \(R \leftarrow \pi_{course\_id, prereq\_id}(prereq)\)
    • Cela correspond à \(R(course\_id, prereq\_id)\).
  • Étape 3: Division.
    • \(R \div S\)
    • On obtient ainsi les \(course\_id\) tels que pour chaque cours de Physics, ce cours apparaît comme prérequis.

Question

Considérez les 3 relations suivantes venant de la base de données university et répondez aux questions suivantes.

Table: instructor
ID name dept_name salary
10101 Srinivasan Comp. Sci. 65000
12121 Wu Finance 90000
15151 Mozart Music 40000
22222 Einstein Physics 95000
32343 El Said History 60000
33456 Gold Physics 87000
45565 Katz Comp. Sci. 75000
58583 Califieri History 62000
76543 Singh Finance 80000
76766 Crick Biology 72000
83821 Brandt Comp. Sci. 92000
98345 Kim Elec. Eng. 80000
Table: department
dept_name building budget
Biology Watson 90000
Comp. Sci. Taylor 100000
Elec. Eng. Taylor 85000
Finance Painter 120000
History Painter 50000
Music Packard 80000
Physics Watson 70000
Table: student
ID name dept_name tot_cred
00128 Zhang Comp. Sci. 102
12345 Shankar Comp. Sci. 32
19991 Brandt History 80
23121 Chavez Finance 110
44553 Peltier Physics 56
45678 Levy Physics 46
54321 Williams Comp. Sci. 54
55739 Sanchez Music 38
70557 Snow Physics 0
76543 Brown Comp. Sci. 58
76653 Aoi Elec. Eng. 60
98765 Bourikas Elec. Eng. 98
98988 Tanaka Biology 120

Question 1:
  • \(R \leftarrow \pi_{dept\_name,ID}(student)\)
  • \(S \leftarrow \pi_{ID}(\sigma_{dept\_name='Physics'}(student))\)
  • \(|R \div S|\)
Question 2:
  • \(R \leftarrow \pi_{dept\_name,building}(department)\)
  • \(S \leftarrow \pi_{building}(\sigma_{building='Watson'}(department))\)
  • \(|R \div S|\)
Question 3:
  • \(R \leftarrow \pi_{building,dept\_name}(department)\)
  • \(S \leftarrow \pi_{dept\_name}(\sigma_{building='Taylor'}(department))\)
  • \(|R \div S|\)
Question 4:
  • \(R \leftarrow \pi_{dept\_name,ID}(instructor)\)
  • \(S \leftarrow \pi_{ID}(\sigma_{dept\_name='Physics'}(instructor))\)
  • \(|R \div S|\)
Question 5:
  • \(R \leftarrow \pi_{building,ID}(instructor \bowtie department)\)
  • \(S \leftarrow \pi_{ID}(instructor)\)
  • \(|R \div S|\)