TD 5 : algèbre relationnelle
Produit fournisseur
On considère la base de données suivante :
Produit : numprod, nomprod, quantité
Fournisseur : numfour, nomfour, adresse, ville
- Donner un schéma conceptuel et un schéma relationnel
- Donner une expression algébrique et un arbre algébrique pour chacune des
requêtes suivantes :
- Les produits disponibles sur Bordeaux
- Les fournisseurs qui vendent tous les produits (cf. division)

Schéma relationnel retenu : Produit(numprod, nomprod),
Fournisseur(numfour, nomfour, adresse, ville),
Fournir(#numprod, #numfour, quantité). Le symbole ⋈ désigne la
jointure naturelle.
Nous cherchons les produits disponibles sur Bordeaux :
πnomprod(σville=’Bordeaux’(Produit⋈Fournir⋈Fournisseur))
Nous cherchons les fournisseurs qui vendent tous les produits. Le dividende et
le diviseur sont projetés pour que le schéma du diviseur soit strictement inclus
dans celui du dividende :
πnomfour((πnumfour,numprod(Fournir)÷πnumprod(Produit))⋈Fournisseur)
Élèves-matières
Soit le schéma relationnel suivant (les clés primaires sont en gras, les clés
étrangères sont précédées du symbole #) qui représente des élèves, des matières
et le fait que des élèves suivent des matières.
- Élève(Numéro Élève, Nom élève, Prénom élève)
- Matière(Numéro Matière, Nom Matière)
- Suivre(#Numéro Élève, #Numéro Matière)
Écrire en algèbre relationnelle les requêtes suivantes :
- Donner la liste des matières suivies par un étudiant qui s'appelle Jean
Dupont
πNom Matieˋre(σNom eˊleˋve=’Dupont’∧Preˊnom eˊleˋve=’Jean’(Eˊleˋve⋈Suivre⋈Matieˋre))
- Donner le nom et prénom des élèves qui suivent le cours de Base de Données
πNom eˊleˋve,Preˊnom eˊleˋve(σNom Matieˋre=’Base de Donneˊes’(Eˊleˋve⋈Suivre⋈Matieˋre))
- Donner la liste des élèves qui ont le même nom, mais pas le même prénom
On utilise deux copies renommées E1=ρE1(Eˊleˋve) et
E2=ρE2(Eˊleˋve) :
πE1.Nom,E1.Preˊnom(E1⋈E1.Nom=E2.Nom∧E1.Preˊnom=E2.PreˊnomE2)
- Donner la liste des élèves qui suivent tous les cours
πNom eˊleˋve,Preˊnom eˊleˋve((Suivre÷πNumeˊro Matieˋre(Matieˋre))⋈Eˊleˋve)