Exercices : bases de données relationnelles

Exercice 1 : QCM

Pour chaque question, une seule réponse est correcte.

1. Dans le modèle relationnel, comment appelle-t-on une ligne d’une table ?

  • A. Un attribut
  • B. Un n-uplet
  • C. Un domaine
  • D. Un schéma

Correction publiée après la séance.

2. Qu’est-ce que le domaine d’un attribut ?

  • A. Le nom de la table qui contient l’attribut
  • B. L’ensemble des valeurs que l’attribut peut prendre
  • C. Le nombre de lignes de la table
  • D. La valeur de l’attribut dans la première ligne

Correction publiée après la séance.

3. Une table a pour clé primaire l’attribut num. Quelle règle cette clé impose-t-elle ?

  • A. Les valeurs de num sont rangées dans l’ordre croissant.
  • B. Deux lignes n’ont jamais la même valeur de num, et num n’est jamais vide.
  • C. Chaque valeur de num désigne une ligne d’une autre table.
  • D. Les valeurs de num sont forcément des entiers.

Correction publiée après la séance.

4. Dans le schéma Seances(id_seance, #id_film, #num_salle, jour, heure), que signifie le dièse placé devant id_film ?

  • A. id_film est la clé primaire de la table Seances.
  • B. id_film désigne une ligne de la table des films, par la clé primaire de cette ligne.
  • C. id_film est rangé par ordre croissant.
  • D. id_film est un entier.

Correction publiée après la séance.

5. Laquelle de ces opérations modifie la structure d’une base de données, et non son contenu ?

  • A. Enregistrer un nouveau film
  • B. Corriger l’année d’un film
  • C. Ajouter un attribut pays à la table des films
  • D. Supprimer une séance annulée

Correction publiée après la séance.

6. Quelle contrainte d’intégrité empêche d’enregistrer une séance dans une salle qui n’existe pas ?

  • A. La contrainte de domaine
  • B. La contrainte de relation
  • C. La contrainte de référence
  • D. Aucune : le SGBD accepte l’opération

Correction publiée après la séance.


Exercice 2 : les services rendus par un SGBD

Un cinéma vend ses places à la caisse et sur son site. Toutes les ventes sont enregistrées dans une base de données gérée par un SGBD. Pour chacune des situations a) à d), nommer le service du SGBD qui intervient.

Indice

Le cours présente quatre services : la persistance des données, la gestion des accès concurrents, l’efficacité de traitement des requêtes et la sécurisation des accès. Chaque situation en illustre un.

a) Un spectateur à la caisse et un autre sur le site achètent au même instant la dernière place de la séance de 20 h 30 : une seule des deux ventes aboutit.

b) Une coupure de courant survient pendant l’enregistrement d’une vente. Au redémarrage, cette vente est soit enregistrée en entier, soit absente, et toutes les ventes précédentes sont toujours là.

c) Un caissier peut enregistrer des ventes, mais il ne peut ni modifier le prix des places, ni consulter les recettes du cinéma.

d) La base contient plusieurs millions de ventes, et pourtant retrouver une vente à partir de son numéro est immédiat.

e) Le gérant propose de remplacer la base par un fichier CSV que la caisse et le site modifient tous les deux. Expliquer ce qui pourrait se produire dans la situation a).

Indice

Chaque programme lit le fichier, voit une place libre, enregistre sa vente, puis réécrit le fichier : que devient la vente enregistrée par le premier ?

Correction publiée après la séance.


Exercice 3 : lire une table et son schéma (exercice guidé)

Le cinéma enregistre ses films dans la table suivante, où la durée est donnée en minutes.

id_filmtitreanneeduree
1Le Voyage de Chihiro2001125
2Intouchables2011112
3La Grande Vadrouille1966132
4Le Roi lion199488

a) Quel est le nom de cette relation ? Donner ses attributs, puis son nombre de n-uplets.

Indice

Les attributs sont les colonnes, les n-uplets sont les lignes, sans compter la ligne des noms de colonnes.

b) Proposer un domaine pour chaque attribut, puis écrire le schéma de la relation avec ses domaines, dans la notation du cours.

Indice

Pour chaque colonne, se demander si ses valeurs sont des entiers ou des chaînes de caractères. Dans la notation du cours, un entier s’écrit INT et une chaîne de caractères TEXT.

c) Le domaine de l’attribut duree peut être plus restreint que l’ensemble des entiers. Proposer une restriction, et donner une valeur qu’elle empêcherait d’enregistrer.

Indice

Quelles valeurs entières n’ont aucun sens pour une durée de film ?

d) Un nouveau film intitulé Le Roi lion est sorti en 2019. Pourquoi l’attribut titre ne peut-il pas servir de clé primaire ? Écrire le schéma de la relation, sans les domaines, en soulignant sa clé primaire.

Indice

Une clé primaire doit rester unique, pour tous les films que le cinéma enregistrera.

e) Classer les opérations suivantes selon qu’elles modifient la structure de la base ou son contenu :

  1. enregistrer le film Le Roi lion de 2019 ;
  2. ajouter un attribut realisateur à la table Films ;
  3. corriger la durée d’un film ;
  4. créer une table Salles ;
  5. supprimer le film n° 3.
Indice

La structure comprend les tables, leurs attributs et leurs domaines ; le contenu est l’ensemble des n-uplets enregistrés.

Correction publiée après la séance.


Exercice 4 : choisir une clé primaire

Le cinéma propose une carte d’abonnement. Les abonnés sont enregistrés dans la table Abonnes ; Hugo Moreau n’a pas donné d’adresse électronique.

num_cartenomprenomdate_naissanceemail
A1027BernardLucie2008-03-14lucie.bernard@exemple.fr
A1028MoreauHugo2007-11-02
A1031BernardLucie1975-06-30l.bernard@exemple.fr
A1032PetitNadia2008-03-14nadia.petit@exemple.fr

a) En s’appuyant sur les données, expliquer pourquoi l’attribut nom ne peut pas être la clé primaire de cette table. Même question pour le groupe d’attributs (nom, prenom), puis pour l’attribut date_naissance.

Indice

Chercher, pour chaque proposition, deux lignes qui ont la même valeur.

b) Toutes les adresses électroniques présentes dans la table sont différentes. Pourquoi l’attribut email ne peut-il pas, pour autant, servir de clé primaire ?

Indice

Une clé primaire respecte deux règles. Les données respectent-elles la seconde ? Et la première restera-t-elle vraie pour tous les abonnés à venir ?

c) Quel attribut choisir comme clé primaire ? Écrire le schéma de la relation en soulignant cette clé.

Indice

Le cinéma attribue lui-même un numéro différent à chaque carte.

d) Les abonnés notent de 1 à 5 les films qu’ils ont vus, une seule fois par film. Les notes sont enregistrées dans la table Avis(#num_carte, #id_film, note). Expliquer pourquoi aucun attribut seul ne peut servir de clé primaire, puis indiquer quel groupe d’attributs peut jouer ce rôle.

Indice

Un abonné peut noter plusieurs films, et un film peut être noté par plusieurs abonnés. Qu’est-ce qui ne peut pas se répéter ?

Correction publiée après la séance.


Exercice 5 : lire un schéma relationnel

La base du cinéma a le schéma relationnel suivant :

  • Films(id_film, titre, annee, duree)
  • Salles(num_salle, nb_places)
  • Seances(id_seance, #id_film, #num_salle, jour, heure)

La table Films a le contenu de l’exercice 3. Voici le contenu des deux autres tables.

Salles

num_sallenb_places
1180
295
340

Seances

id_seanceid_filmnum_sallejourheure
121samedi14:00
223samedi20:30
342samedi16:00
411dimanche15:00
542dimanche11:00

a) Lire ce schéma à l’aide des trois questions du cours : quelles sont les tables, quels sont leurs attributs, et quels liens les clés étrangères établissent-elles ?

Indice

Pour chaque attribut précédé d’un dièse, chercher la table dont il reprend la clé primaire.

b) Quel film est projeté lors de la séance 3, et combien de places compte la salle où elle a lieu ?

Indice

Lire la ligne de la séance 3, puis chercher la valeur de id_film dans la table Films et celle de num_salle dans la table Salles.

c) Quels films peut-on voir le samedi, et dans quelles salles ?

Indice

Repérer les séances du samedi, puis faire pour chacune la même recherche qu’à la question b).

d) Quel film n’a aucune séance ?

Indice

Pour chaque film, chercher son identifiant dans la colonne id_film de la table Seances.

e) Un même film peut-il être projeté dans plusieurs salles ? Une même salle peut-elle accueillir plusieurs films ? Répondre en s’appuyant sur les données, puis expliquer comment le schéma le permet.

Indice

Chaque séance relie un film et une salle. Qu’est-ce qui empêcherait deux séances de désigner le même film, ou la même salle ?

f) Pourquoi le titre du film n’est-il pas écrit dans la table Seances ?

Indice

Combien de fois le titre d’Intouchables serait-il écrit ? Que faudrait-il faire pour corriger ce titre ?

Correction publiée après la séance.


Exercice 6 : anomalies d’une table unique

Avant d’utiliser cette base, le cinéma enregistrait ses réservations dans une seule table, où la durée du film est en minutes et la salle donnée par son numéro.

num_reservationspectateuremailtitredureejourheuresalle
501Chloé Rouxchloe.roux@exemple.frIntouchables112samedi14:001
502Sami Haddadsami.haddad@exemple.frIntouchables112samedi14:001
503Chloé Rouxchloe.roux@exemple.frLe Roi lion88samedi16:002
504Malik Benalim.benali@exemple.frIntouchables115samedi20:303

a) Quelles informations sont recopiées dans plusieurs lignes ? Comment appelle-t-on ce défaut ?

Indice

Comparer les lignes deux à deux : spectateur, film, séance.

b) La durée d’Intouchables n’est pas la même dans toutes les lignes. Comment cette incohérence a-t-elle pu se produire ? Quelle anomalie révèle-t-elle ?

Indice

La durée est recopiée à chaque réservation : que se passe-t-il si on la corrige dans une ligne seulement ?

c) Le cinéma veut programmer une séance de La Grande Vadrouille le dimanche à 18 h, avant que quiconque l’ait réservée. Pourquoi est-ce impossible avec cette table ? Quelle anomalie est-ce ?

Indice

Que décrit chaque ligne de la table ? Quelles colonnes resteraient vides ?

d) Malik Benali annule la réservation 504, et l’on supprime la ligne. Quelles informations perd-on en même temps ? Quelle anomalie est-ce ?

Indice

La séance du samedi à 20 h 30 figure-t-elle dans une autre ligne ?

e) Proposer un découpage en plusieurs tables qui supprime ces anomalies : reprendre les tables Films, Salles et Seances de l’exercice 5, et ajouter une table des spectateurs et une table des réservations. Écrire le schéma relationnel, en soulignant les clés primaires et en précédant les clés étrangères d’un dièse.

Indice

Une réservation relie un spectateur à une séance : elle a donc deux clés étrangères.

f) Vérifier que ce découpage supprime chacune des trois anomalies des questions b) à d).

Indice

Pour chaque anomalie, dire dans quelle table l’information concernée est désormais écrite, et combien de fois.

Correction publiée après la séance.


Exercice 7 : opération acceptée ou refusée ?

On reprend la base de l’exercice 5, avec le contenu de ses trois tables. En plus des clés primaires et étrangères, le cinéma a restreint deux domaines : la durée d’un film et le nombre de places d’une salle sont des entiers strictement positifs.

On tente les opérations suivantes, l’une après l’autre. Pour chacune, indiquer si le SGBD l’accepte ou la refuse, et justifier en nommant la contrainte d’intégrité concernée.

Indice

Pour chaque opération, vérifier les trois contraintes : les valeurs appartiennent-elles à leur domaine ? La clé primaire reste-t-elle unique et non vide ? Chaque clé étrangère désigne-t-elle encore une ligne qui existe ?

  1. Ajouter à la table Films la ligne (5, Le Roi lion, 2019, 118).
  2. Ajouter à la table Films la ligne (2, Astérix et Obélix : Mission Cléopâtre, 2002, 107).
  3. Ajouter à la table Salles la ligne (4, 0).
  4. Ajouter à la table Seances la ligne (6, 3, 7, dimanche, 18:00).
  5. Ajouter à la table Seances une séance sans identifiant, pour le film 3, en salle 2, le dimanche à 18:00.
  6. Ajouter à la table Seances la ligne (6, 3, 2, dimanche, 18:00).
  7. Supprimer de la table Films le film 3, La Grande Vadrouille.
  8. Supprimer de la table Films le film 5, Le Roi lion de 2019.
  9. Changer le numéro de la salle 2 en 5.

Correction publiée après la séance.