Filière : ING-A1 TD N° 2 A.
U :2024-2025
Bases de données
Exercice 2 : CJH (#IdCours, Jour, Heure) CS (IdCours, IdSalle)
ENA (IdEtudiant, Nom, Adresse) CEN (#IdCours, #IdEtudiant, Note)
Partie1 :
1
Page
Partie2 :
1) Donner les noms des étudiants qui π Nom (σ IdCours='Algo' (ENA ⨝ CEN))
suivent le cours ‘Algo’.
2) Donner les notes en ‘Archi’ des π Note (σ Nom='Titi' (ENA) ⨝ σ IdCours='Archi' (CEN))
étudiants dont le nom est ‘Titi’.
π Note (σ Nom='Titi' ∧ IdCours ='Archi' (ENA ⨝ CEN))
3) Donner les couples (jour, heure) π Jour, Heure (σ IdSalle='S1' (CS) ⨝ CJH)
pour lesquels la salle ‘S1’ est occupée
par un cours.
4) Donner les identifiants des étudiants π IdEtudiant (ENA) - π IdEtudiant (σ Note ≠ 'A' (CEN ⨝ ENA))
qui n’ont que des notes ‘A’.
5) Donner la salle où se trouve ‘Toto’ π IdSalle (σ Nom='Toto' (ENA) ⨝ CEN ⨝ σ Jour='Lu' ∧ Heure='9h'
le lundi à 9h. (CJH) ⨝ CS)
Explication de requête 5 : π IdSalle (σ Nom='Toto' (ENA) ⨝ CEN ⨝ σ Jour='Lundi' ∧ Heure='9h' (CJH) ⨝ CS)
1. σ Nom='Toto' (ENA): On sélectionne les informations de l'étudiant 'Toto' dans la table ENA.
2. ⨝ CEN: On joint ce résultat avec la table CEN pour obtenir les cours auxquels 'Toto' est inscrit et ses
notes.
3. σ Jour='Lundi' ∧ Heure='9h' (CJH): On sélectionne les informations des cours qui se déroulent le lundi à 9h
dans la table CJH.
4. ⨝ CS: On joint ce résultat avec la table CS pour obtenir les salles associées à ces cours.
5. π IdSalle: On projette uniquement l'attribut IdSalle pour obtenir le résultat final, c'est-à-dire la salle où se
2
trouve 'Toto' le lundi à 9h.
Page
Autre corrigé Partie2
1. Donner les noms des étudiants qui suivent le cours ‘Algo’. 2. Donner les notes en ‘Archi’ des étudiants dont
le nom est ‘Titi’.
R1= CEN ∞ ([Link] = ENA. IdEtudiant) ENA
R1= CEN ∞ ([Link] = ENA. IdEtudiant) ENA
R2= σ IdCours = ’Algo’ (R1)
R2= σ IdCours = ’Archi’ (R1)
RES = π Nom(R2)
R3 = σ Nom=’Titi’ (R2)
π Nom (σ NomCours='Algo' (ENA ⨝ CEN))
RES = π Note(R3)
π Note (σ Nom='Titi' (ENA) ⨝ σ IdCours='Archi' (CEN))
π Note (σ Nom='Titi' ∧ IdCours ='Archi' (ENA ⨝ CEN))
3. Donner les couples (jour, heure) pour lesquels la salle ‘S1’ 4. Donner les identifiants des étudiants qui n’ont
est occupée par un cours. que des notes ‘A’.
R1= CS ∞ ([Link] = CJH. Idcours) CJH R1= σ Note = ’A’ (CEN)
R2= σ IdSalle = ’S1’ (R1) R2= σ Note <>’A’ (CEN)
RES = π Jour,Heure(R2) R3= R1 - R2
π Jour, Heure (σ IdSalle='S1' (CS) ⨝ CJH) RES = π IdEtudiant (R3)
πIdEtudiant (CEN) - πIdEtudiant (σNote ≠ 'A'(CEN))
5. Donner la salle où se trouve ‘Toto’ le lundi à 9h. π IdSalle (σ Nom='Toto' (ENA) ⨝ CEN ⨝
R1= CEN ∞ ([Link] = ENA. IdEtudiant) ENA σ Jour='Lu' ∧ Heure='9h' (CJH) ⨝ CS)
R2= R1∞ ([Link] = CJH. Idcours) CJH
R3= R2 ∞ ([Link] = CS. Idcours) CS
R4= σ Nom=’Toto’ (R3)
R5= σ Jour=’Lu’ (R4)
R6= σ Heure=’9h’ (R5)
RES = π IdSalle (R6)
3
Page
Exercice 3 :
1) Les invités du repas du 02/10/2009. π Invité (σ date='02/10/2009' (REPAS))
2) Les dates auxquelles un « Bœuf π Date (σ Plat=' Bœuf Bourguignon ' (MENU))
Bourguignon » a été servi.
3) Les plats préférés de « Mme Mariem ». π Plat (σ Personne='Mme Mariem' (PREFERENCE))
4) Les plats qui ont été servis à « Mr π Plat (σ Invité='Mr Hichem' (REPAS ⨝ [Link] = [Link] MENU))
Hichem ».
5) Les personnes invitées qui ont été servi π PERSONNE (PREFERENCE ⨝ PRÉFÉ[Link] = [Link]
par leurs plats préférés. MENU) ⨝ PRÉFÉ[Link] = [Link]É) ( REPAS)
6) Les personnes qui n’ont jamais été invité. π Personne (PREFERENCE)- π Invité (REPAS)
7) Les invités qui ont assisté à tous les π INVITÉ (REPAS) - π INVITÉ ( (π INVITÉ (REPAS) × π DATE
repas. (REPAS)) - π INVITÉ,DATE (REPAS))
Requête7 : π INVITÉ (REPAS) - π INVITÉ ( (π INVITÉ (REPAS) × π DATE (REPAS)) - π INVITÉ,DATE (REPAS))
Décomposons l'expression étape par étape :
1. π INVITÉ (REPAS)
o Cette première projection donne l'ensemble de tous les invités
2. π DATE (REPAS)
o Cette projection donne l'ensemble de toutes les dates
3. π INVITÉ (REPAS) × π DATE (REPAS)
o Produit cartésien qui crée toutes les combinaisons possibles invité-date
4. π INVITÉ,DATE (REPAS)
o Les combinaisons invité-date qui existent réellement dans REPAS
5. (π INVITÉ (REPAS) × π DATE (REPAS)) - π INVITÉ,DATE (REPAS)
o Soustrait les combinaisons réelles des combinaisons possibles
o Résultat : les combinaisons manquantes (repas auxquels un invité n'a pas assisté)
6. π INVITÉ (...soustraction précédente...)
o Projette sur INVITÉ pour avoir la liste des invités qui ont manqué au moins un repas
7. π INVITÉ (REPAS) - π INVITÉ (...) (Expression finale)
o Soustrait les invités avec des dates manquantes de l'ensemble total des invités
o Résultat : invités qui n'ont manqué aucun repas
4
Page
Exercice 4 :
R1= π Nomjoueur, Prime (σ Nomsponsor='Peugeot' and 1984<Année<1990 (Gain))
R2= π Nom, age (JOUEUR ⨝ [Link] = [Link] (σ LieuTournoi= 'Roland Garros' (RENCONTRE)))
∪ π Nom, age (JOUEUR ⨝ [Link] = [Link] (σ LieuTournoi= 'Roland Garros' (RENCONTRE)))
R3= π Nom, Nationalité (σ Nomsponsor='Peugeot' and LieuTournoi= 'Roland Garros' (Gain) ⨝ JOUEUR)
R4= [π Nom, Nationalité (JOUEUR ⨝ Nom = NomGagnant (σ LieuTournoi= 'Roland Garros' and Année=1985 (RENCONTRE)))
∩ π Nom, Nationalité (JOUEUR ⨝ Nom = NomGagnant (σ LieuTournoi= 'Wimbledon' and Année=1985 (RENCONTRE)))]
∪ [ π Nom, Nationalité (JOUEUR ⨝ Nom = NomPerdant (σ LieuTournoi= 'Roland Garros' and Année=1985 (RENCONTRE)))
∩ π Nom, Nationalité (JOUEUR ⨝ Nom = NomPerdant (σ LieuTournoi= 'Wimbledon' and Année=1985 (RENCONTRE)))]
R5= π Nomjoueur (σ LieuTournoi= 'Roland Garros' (Gain)- σ LieuTournoi= 'Roland Garros' and Prime <1MF (Gain) )
5
Page
Requete 6 :
π Nom,Prénom,Age,Nationalité (
JOUEUR ⨝ (
π Nom (JOUEUR) -
π Nom (
(π Nom (JOUEUR) × π Année (σ LieuTournoi='Roland Garros' (RENCONTRE))) -
(π NomGagnant AS Nom,Année (σ LieuTournoi='Roland Garros' (RENCONTRE)))
(π NomPerdant AS Nom,Année (σ LieuTournoi='Roland Garros' (RENCONTRE)))
) ) )
Le mécanisme complet :
1. Crée toutes les combinaisons possibles joueur-année
2. Soustrait les combinaisons réellement observes et on obtient ainsi les combinaisons manquantes
3. Projette pour avoir les joueurs avec des participations manquantes
4. Soustrait ces joueurs de l'ensemble des joueurs
Cette soustraction fonctionne en deux temps :
1. Première soustraction (interne) :
(π Nom (JOUEUR) × π Année (σ LieuTournoi='Roland Garros' (RENCONTRE))) - [Combinaisons réelles des
participations]
o
Cette soustraction identifie les paires (joueur, année) manquantes
2. Deuxième soustraction (externe) :
π Nom (JOUEUR) - [Résultat de la première soustraction]
o Cette soustraction élimine les joueurs qui ont manqué au moins un tournoi
o Le résultat final contient uniquement les joueurs ayant participé à tous les tournois
6
Page
Expliquons étape par étape:
1. Construction des combinaisons possibles:
o Crée toutes les combinaisons possibles joueur-année pour Roland Garros
o π Nom (JOUEUR) × π Année (σ LieuTournoi='Roland Garros' (RENCONTRE))
2. Construction des participations réelles:
o Union des gagnants et perdants :
o (π NomGagnant AS NomJoueur,Année (σ LieuTournoi='Roland Garros' (RENCONTRE))) ∪
(π NomPerdant AS NomJoueur,Année (σ LieuTournoi='Roland Garros' (RENCONTRE)))
3. Identification des joueurs avec participation complète :
o Soustrait les combinaisons réelles des combinaisons possibles
o Les joueurs qui restent sont ceux qui n'ont pas participé à tous les tournois
4. Obtention du résultat final :
o Projette les attributs demandés (Nom, Prénom, Age, Nationalité)
o Joint avec la table JOUEUR pour récupérer toutes les informations
7
Page
Arbres algébriques
Requete1 Requete2
Requete3 Requete5
8
Page
Requete4
9
Page