Intégrité et SGBD

Comprendre les contraintes d’intégrité, repérer les anomalies et expliquer la persistance, la concurrence et la sécurité des accès.

Environ 40 minutes

  • Distinguer schéma et contenu
  • Justifier les contraintes d’intégrité
  • Expliquer les services d’un SGBD
Sommaire
  1. 1. Schéma, contenu et identifiants
  2. 2. Ce que les contraintes garantissent
  3. 3. Repérer une mauvaise organisation
  4. 4. Persistance et accès concurrents
  5. 5. Au bac : justifier une solution

Deux personnes réservent la dernière place au même moment. Un simple tableau suffit-il pour garantir une seule réservation ?

Une base de données organise des informations qui doivent rester cohérentes malgré les ajouts, les suppressions et les accès simultanés. Le système de gestion de bases de données, ou SGBD, est le logiciel chargé de gérer ces opérations. Nous partons d’une bibliothèque pour comprendre les contraintes, puis d’une réservation pour étudier les services du logiciel. Les prérequis sont les tables, les attributs et les identifiants. Les commandes SQL présentées servent à rendre les règles concrètes ; leur mémorisation détaillée ne remplace pas le raisonnement sur les données.

1. Schéma, contenu et identifiants

Un schéma relationnel décrit les noms des relations, leurs attributs, les domaines de valeurs et les contraintes. Le contenu est l’ensemble des enregistrements présents à un instant donné. Ajouter un livre change le contenu de la base, sans changer son schéma. Ajouter un attribut date_publication change la structure. Une relation est pensée comme un ensemble de tuples ; une table SQL la représente, mais SQL peut produire des lignes identiques si aucune contrainte ou opération ne les élimine.

Dans Auteur(id, nom), id est choisi comme clé primaire. Cette clé identifie un auteur sans ambiguïté : deux lignes ne doivent pas partager la même valeur de clé et l’identifiant ne doit pas être absent. Le nom ne convient pas, car deux personnes peuvent être homonymes. Une seule contrainte de clé primaire est définie par table, mais elle peut porter sur plusieurs attributs ensemble. Dans Inscription(eleve, atelier), le couple peut ainsi identifier une inscription alors que chacun de ses composants se répète.

Le même auteur peut être référencé par plusieurs livres. Chaque identifiant d’auteur utilisé dans Livre existe dans Auteur.

Dans Livre(id, titre, auteur), auteur est une clé étrangère référençant Auteur(id). Plusieurs livres peuvent renvoyer au même auteur. Cette répétition est normale : l’unicité concerne la clé primaire de Livre, pas sa clé étrangère. Dans cet exemple, chaque livre a un auteur obligatoire. Une bibliothèque réelle permettant plusieurs auteurs par livre demanderait une relation supplémentaire ; il faut toujours préciser les hypothèses du modèle avant de juger sa qualité.

Exemple résolu

Auteur contient (1, Lina) et (2, Sami). Livre contient déjà (11, Rivage, 1). Peut-on ajouter (12, Matin, 1), puis (11, Soir, 2), puis (13, Nuit, 9) ?

  1. Étape 1 : La première proposition utilise un nouvel identifiant de livre et un auteur existant.
  2. Étape 2 : La deuxième réutilise la clé primaire 11, déjà présente dans Livre.
  3. Étape 3 : La troisième emploie l’auteur 9, absent de la relation référencée.

Résultat : Seule la première insertion respecte les contraintes décrites. Les deux autres sont rejetées, respectivement pour duplication de clé et référence absente.

Piège à éviter : Une clé étrangère peut se répéter : interdire deux livres du même auteur confondrait identification et référence.

À toi d'essayer

Une relation Participation(eleve, club) utilise le couple comme clé primaire. (7, robotique) existe déjà. Peut-on ajouter (7, théâtre) ? Justifie.

Voir la réponse

Oui : le couple est différent. Le numéro 7 seul n’est pas la clé primaire dans ce modèle ; un élève peut participer à plusieurs clubs.

2. Ce que les contraintes garantissent

Une contrainte de domaine limite les valeurs acceptées : une quantité de livres disponibles doit être un entier supérieur ou égal à zéro. Une contrainte de relation porte sur les enregistrements d’une même relation, comme l’unicité d’une clé. Une contrainte de référence relie les valeurs de deux relations. Le SGBD contrôle les contraintes déclarées lors des modifications, y compris quand une autre application écrit dans la base. Une vérification uniquement placée dans un formulaire peut être oubliée par un autre programme.

SQL fournit notamment PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL et CHECK. NOT NULL refuse le marqueur NULL, qui représente ici une information absente ; il ne refuse pas à lui seul une chaîne de caractères vide. UNIQUE sert à imposer l’unicité d’un attribut ou d’un groupe d’attributs. Pour les valeurs NULL, les détails de certaines contraintes dépendent du SGBD. Nous utilisons donc des identifiants entiers et déclarons explicitement les références obligatoires.

Une expérience locale avec SQLite peut créer les deux tables par les instructions suivantes. CREATE TABLE Auteur (id INTEGER PRIMARY KEY, nom TEXT NOT NULL); CREATE TABLE Livre (id INTEGER PRIMARY KEY, titre TEXT NOT NULL, auteur INTEGER NOT NULL REFERENCES Auteur(id)); Avant de commencer les modifications, PRAGMA foreign_keys = ON; active le contrôle des clés étrangères pour la connexion SQLite utilisée. Ce réglage propre à SQLite n’est pas une propriété du modèle relationnel.

Une clé étrangère peut aussi référencer une clé candidate déclarée UNIQUE, sous les conditions du SGBD. Elle ne doit donc pas nécessairement viser la clé primaire. Inversement, une valeur autorisée par les contraintes peut être factuellement fausse : un titre mal orthographié reste une chaîne valide. Les contraintes garantissent des règles formalisées, pas la vérité de toute information saisie.

Exemple résolu

La table Stock(id, quantite) impose une clé primaire et CHECK(quantite >= 0), avec quantite NOT NULL. Compare une quantité de 0, de −2 et la valeur NULL.

  1. Étape 1 : Zéro satisfait la condition supérieure ou égale à zéro : un stock épuisé est une situation valide.
  2. Étape 2 : La valeur −2 viole la condition CHECK.
  3. Étape 3 : NULL est refusé par NOT NULL ; le test de positivité ne doit pas être utilisé seul pour imposer la présence de la donnée.

Résultat : La quantité 0 est acceptée. Les deux autres propositions sont rejetées par des contraintes différentes.

Piège à éviter : Confondre positif et strictement positif ferait rejeter à tort un stock nul.

À toi d'essayer

Un champ nom est TEXT NOT NULL. Un programme y enregistre une chaîne vide. La seule contrainte NOT NULL suffit-elle à refuser cette valeur ?

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

3. Repérer une mauvaise organisation

Supposons que chaque ligne d’une table Emprunt recopie l’identifiant du livre, son titre, le numéro de l’auteur et son nom. Si dix emprunts concernent le même auteur, son nom est répété dix fois. Une correction du nom peut ne toucher que neuf lignes : la base fournit alors deux informations contradictoires sur la même personne. C’est une anomalie de mise à jour, provoquée par une redondance évitable.

Une anomalie d’insertion apparaît si l’on ne peut pas enregistrer un nouvel auteur tant qu’aucun livre ou emprunt ne le concerne. Une anomalie de suppression apparaît si effacer le dernier emprunt d’un livre fait aussi disparaître la seule information enregistrée sur ce livre. Ces défauts viennent du mélange de plusieurs faits indépendants dans une seule relation. Séparer Auteur, Livre et Emprunt permet de conserver chaque fait à sa place, puis de retrouver les informations par une jointure.

Toute répétition n’est pas une anomalie. Répéter auteur=1 dans plusieurs livres exprime justement un lien entre les relations. Pour argumenter, demande-toi quel fait est stocké, de quel identifiant il dépend et ce que ferait une modification. Une décomposition doit préserver les informations et leurs liens : couper arbitrairement un tableau en deux sans identifiant commun empêcherait de reconstruire les correspondances.

Exemple résolu

Une table Reservation(numero, salle, capacite) contient (41, A, 20) et (42, A, 20). La capacité de A devient 24. Propose une organisation évitant deux corrections.

  1. Étape 1 : La capacité décrit la salle, pas chaque réservation.
  2. Étape 2 : On crée Salle(code, capacite), avec code comme clé primaire.
  3. Étape 3 : Reservation(numero, salle) garde une référence à Salle(code). Une correction de la salle A devient unique.

Résultat : Salle contient (A, 24). Les réservations 41 et 42 conservent salle=A : une jointure permet de retrouver la capacité actualisée.

Piège à éviter : Recopier 24 dans toutes les réservations conserve le risque de désaccord lors de la modification suivante.

4. Persistance et accès concurrents

La persistance signifie que les données enregistrées sont conservées au-delà de la fin du programme qui les utilise. Une liste Python uniquement en mémoire disparaît avec son processus ; une base stockée durablement permet de rouvrir les données. Cela ne dispense pas de sauvegardes : une suppression autorisée, une panne matérielle ou une mauvaise manipulation peuvent toujours rendre une récupération nécessaire. Une base SQLite créée en mémoire pour un exercice ne constitue pas un stockage persistant.

Les deux demandes ont lu la même disponibilité. Sans protection de la réservation, chacune peut croire avoir obtenu la dernière place.

Deux utilisateurs peuvent lire la même donnée avant de la modifier. Le résultat d’un programme correct lorsqu’il agit seul peut devenir incorrect en présence d’un autre programme. Le SGBD fournit des mécanismes pour organiser les accès concurrents. Une transaction regroupe des opérations constituant une unité logique, par exemple vérifier la disponibilité et enregistrer une réservation. Selon le système et le mode choisi, un conflit peut entraîner une attente ou un rejet à traiter ; il ne faut pas promettre que toute transaction réussit immédiatement.

Le SGBD facilite aussi l’efficacité des requêtes, notamment grâce aux index et à l’organisation du traitement. Un index peut accélérer certaines recherches tout en prenant de la place et en ajoutant du travail lors des modifications. Enfin, la sécurisation des accès distingue les droits : consulter un catalogue ne donne pas nécessairement le droit de le modifier. Les fonctions exactes varient selon le logiciel et sa configuration ; une base n’est pas automatiquement protégée parce qu’elle utilise SQL.

À toi d'essayer

Une association remplace une liste Python par une base stockée sur disque. Elle affirme que cela empêche automatiquement deux adhérents de réserver le même objet. Évalue cette conclusion et indique le besoin restant.

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

5. Au bac : justifier une solution

Au bac : analyser une base et ses services

  1. Repère la clé de chaque relation et écris ce qu’une ligne représente. Lis les hypothèses avant de proposer une contrainte.
  2. Pour chaque modification proposée, vérifie le domaine, la clé et les références. Cite la valeur en cause au lieu de dire seulement que la base est incohérente.
  3. Pour une anomalie, décris un scénario précis d’insertion, de suppression ou de correction. Propose ensuite une séparation en conservant les liens.
  4. Distingue les besoins de persistance, de concurrence, d’efficacité et de droits. Une réponse justifiée relie chaque mécanisme au problème rencontré.
Attention :

Erreurs fréquentes : utiliser un nom comme identifiant sans vérifier les homonymes ; imposer UNIQUE sur toute clé étrangère ; croire que NULL et chaîne vide sont identiques ; déduire la vérité d’une donnée du seul succès de son insertion.

Vocabulaire

Intégrité :
Respect des règles déclarées sur les valeurs et les liens.
SGBD :
Logiciel organisant le stockage, les requêtes et les modifications d’une base.
Transaction :
Groupe d’opérations traité comme une unité logique.
Accès concurrents :
Accès dont les périodes d’activité se chevauchent.

Relier les besoins aux mécanismes

BesoinRéponse
Identifier une ligneClé primaire
Éviter une référence absenteClé étrangère
Conserver après fermetureStockage persistant
Coordonner plusieurs utilisateursGestion des accès concurrents

S’entraîner : retrouve les activités disponibles dans la rubrique Exercices du site. Pour poursuivre, étudie comment les requêtes SQL utilisent les liens entre relations afin de sélectionner et de mettre à jour les données.

À retenir

  • Le schéma décrit la structure ; le contenu décrit les enregistrements présents.
  • Une clé primaire peut être composée de plusieurs attributs.
  • Une référence obligatoire doit viser une valeur existante de la relation référencée.
  • Un SGBD fournit notamment persistance, concurrence, efficacité et gestion des accès.

Fiche de révision

Diagnostic d’un tableau

quelle entité représente la ligne, et quel identifiant distingue deux lignes ?

Une redondance devient dangereuse lorsque le même fait peut être corrigé à plusieurs endroits indépendamment.

Avant une réservation, distinguer la conservation du résultat et la coordination des demandes simultanées.

Exemple repère

deux livres peuvent partager un auteur ; deux lignes de Livre ne partagent pas leur clé primaire.

Questions fréquentes

Une base valide contient-elle forcément des informations vraies ?

Non. Elle respecte les contraintes déclarées, qui ne contrôlent pas tous les faits du monde réel.

Un stockage persistant remplace-t-il les sauvegardes ?

Non. La persistance conserve les données entre les exécutions ; les sauvegardes permettent d’envisager une récupération après certains incidents.

Et maintenant ?

Tu as lu le cours. L’étape suivante tient en une action.

Relis le coursReprends l’essentiel avant de passer à la suite.

Prolonge l’expérience !

Continue à explorer ce chapitre à travers de nouvelles activités, des défis et des expériences interactives. Avec Premium, l’apprentissage continue !

Ici, tu débloques aussi 2 corrections détaillées.

Parent ? Suivez les progrès de votre enfant.

Tous les cours de NSI