Exercice 1 : Projections, sélections, jointures en algèbre relationnelle
🌐 Énoncé du problème / Cadre d’étude
Section titled “🌐 Énoncé du problème / Cadre d’étude”On s’intéresse à la gestion d’une plateforme de streaming musical. Le schéma relationnel de la base de données est composé de trois relations (tables) dont les schémas et attributs sont les suivants :
-
Artiste(id_artiste, nom, pays, annee_debut)id_artiste: (clé primaire)nom:pays:annee_debut:
-
Morceau(id_morceau, titre, id_artiste, duree, genre)id_morceau: (clé primaire)titre:id_artiste: (clé étrangère référant àArtiste.id_artiste)duree: (exprimée en secondes)genre:
-
Ecoute(id_utilisateur, id_morceau, date_ecoute)id_utilisateur:id_morceau: (clé étrangère référant àMorceau.id_morceau)date_ecoute:- (La clé primaire de cette relation est le triplet (
id_utilisateur,id_morceau,date_ecoute))
On rappelle les opérateurs de base de l’algèbre relationnelle :
- Sélection :
- Projection :
- Produit cartésien :
- Jointure naturelle :
- Jointure thêta :
- Renommage :
- Différence :
❓ Questions progressives
Section titled “❓ Questions progressives”- Question 1 (Sélection et projection simples) : Écrire l’expression en algèbre relationnelle permettant d’obtenir les titres et les genres de tous les morceaux dont la durée est strictement supérieure à secondes ( minutes).
- Question 2 (Jointure) : Écrire l’expression en algèbre relationnelle permettant d’obtenir le nom de l’artiste et le titre de ses morceaux pour tous les morceaux appartenant au genre
"Jazz". - Question 3 (Jointure complexe et agrégation implicite) : Écrire l’expression permettant d’obtenir les noms des artistes français (
pays = 'France') ayant au moins un morceau enregistré. - Question 4 (Différence / Requête universelle) : On souhaite obtenir les identifiants des utilisateurs (
id_utilisateur) qui ont écouté tous les morceaux du genre"Rock". Proposer une expression en algèbre relationnelle en utilisant l’opérateur de division (ou une expression équivalente avec la différence et le produit cartésien).
💡 Pistes & Indications méthodologiques
Section titled “💡 Pistes & Indications méthodologiques”- Question 1 : Identifiez d’abord la table source, puis appliquez la restriction () sur la durée, et enfin la projection () sur les attributs souhaités.
- Question 2 : Il est nécessaire de relier la table
Morceauet la tableArtistevia une jointure (naturelle ou thêta sur l’attribut communid_artiste), combinée avec une sélection sur le genre. - Question 3 : Veillez à n’utiliser que les opérateurs autorisés de l’algèbre relationnelle. Pensez à éliminer les doublons potentiels si un artiste a plusieurs morceaux de jazz, bien que l’algèbre relationnelle standard opère sur des ensembles (pas de doublons par définition, contrairement à SQL).
- Question 4 : La structure type pour “trouver qui vérifient tous les ” repose sur le schéma relationnel : . Rappelez-vous la définition de la division relationnelle .
📋 Corrigé détaillé pas à pas
Section titled “📋 Corrigé détaillé pas à pas”Correction de la Question 1
Section titled “Correction de la Question 1”On cherche les titres et genres des morceaux de plus de secondes.
- Source : table .
- Condition de sélection : .
- Attributs projetés : .
Expression de l’algèbre relationnelle :
Correction de la Question 2
Section titled “Correction de la Question 2”On cherche le nom de l’artiste et le titre de ses morceaux pour le genre "Jazz".
- On doit croiser les tables et via leur attribut commun .
- On filtre sur le genre
"Jazz". - On projette sur et .
Expression de l’algèbre relationnelle : (On peut également utiliser la jointure naturelle puisque l’attribut est commun aux deux relations).
Correction de la Question 3
Section titled “Correction de la Question 3”On cherche les noms des artistes français ayant enregistré au moins un morceau.
- On sélectionne les artistes français : .
- On effectue la jointure avec la table pour s’assurer qu’ils possèdent des morceaux.
- On projette uniquement sur le nom de l’artiste.
Expression de l’algèbre relationnelle :
Note de rigueur d’examinateur : La jointure naturelle avec Morceau filtre implicitement les artistes qui n’ont aucun morceau (puisque id_artiste doit apparaitre dans les deux tables, ce qui correspond à une inner join en SQL).
Correction de la Question 4
Section titled “Correction de la Question 4”On cherche les ayant écouté tous les morceaux du genre "Rock".
C’est un cas classique d’utilisation de la division relationnelle (notée ).
- Définissons l’ensemble des morceaux de référence (le diviseur ) :
- Définissons la relation des associations (utilisateurs, morceaux écoutés) (le dividende ) :
- On applique l’opération de division :
Rppel du cours sur la division (pour justification complète si demandé à l’oral) : renvoie l’ensemble des valeurs de la première projection de (ici ) qui sont en relation avec toutes les valeurs de (les du genre Rock).
Sous forme développée sans l’opérateur (en utilisant la double différence) :