Un cap pour ce chapitre
Ce que vous saurez faire
- Repérer des faits répétés dans une relation.
- Expliquer les trois anomalies classiques.
- Proposer une séparation de relations avec des références.
Les bases utiles pour commencer
Une grande table qui mélange deux sujets
Imaginons Participation(id_membre, prenom, id_club, nom_club, salle). Lina et Sara participent toutes deux au club Robotique en B12. Le nom et la salle du club apparaissent donc sur plusieurs lignes. Ces valeurs décrivent le club, tandis que l’identifiant et le prénom décrivent une personne.
La répétition n’est pas toujours une erreur en soi, mais elle crée ici plusieurs copies d’un même fait : le club 1 est en salle B12. Une conception solide doit permettre de conserver cette information sans dépendre du nombre de participants et sans imposer sa modification à plusieurs endroits.
La question utile est : « De quel identifiant cette information dépend-elle ? » Si la salle est déterminée par le club, elle doit pouvoir être retrouvée avec son identifiant sans connaître ses membres. Le prénom dépend du membre. Mélanger ces faits sur une même ligne transforme chaque participation supplémentaire en nouvelle copie d’une information indépendante.
L’anomalie de mise à jour
Si Robotique déménage en C03, modifier seulement la ligne de Lina laisse celle de Sara en B12. La base affirme alors deux salles différentes pour le même club, alors que notre modèle lui attribue une salle unique. La nouvelle valeur n’est pas incohérente isolément ; c’est la contradiction entre les lignes qui pose problème.
Une solution consiste à séparer Club(id_club, nom, salle) de Membre(id_membre, prenom, id_club). La salle est modifiée une seule fois dans Club. Les membres continuent à référencer l’identifiant 1 et retrouvent sa salle actuelle par la relation entre les tables.
Une incohérence est différente d’une information unanimement périmée. Si toutes les lignes portent encore B12 après un déménagement, elles sont cohérentes entre elles mais ne décrivent plus la situation actuelle. Si certaines portent C03 et d’autres B12, le modèle affirme en plus des faits contradictoires. L’atelier permet de distinguer ces deux diagnostics.
L’insertion et la suppression révèlent aussi le mélange
Un nouveau club sans participant devrait pouvoir être enregistré. Dans la grande table centrée sur des participations, il faut pourtant inventer un membre ou introduire des valeurs absentes pour conserver ses informations. C’est une anomalie d’insertion : un fait légitime dépend artificiellement d’un autre fait.
Si Sara est la dernière membre d’un club, supprimer sa ligne peut aussi supprimer la seule information sur le nom et la salle de ce club. C’est une anomalie de suppression. Séparer les relations permet de retirer une inscription ou une personne sans effacer automatiquement l’existence du club.
Vérifier la nouvelle organisation
La séparation doit conserver des clés et des références explicites. Club possède une clé primaire id_club et Membre référence cette clé. Pour une personne inscrite à plusieurs clubs, il faudrait en plus une relation Inscription adaptée : la bonne structure dépend des règles du domaine. On ne doit pas imposer un seul club par personne si le besoin réel en autorise plusieurs.
Le programme demande de repérer et de corriger ces anomalies sur des exemples. Une présentation exhaustive des formes normales n’est pas nécessaire ici. Le raisonnement utile consiste à demander quel fait dépend de quel identifiant, où il doit être stocké et comment retrouver les informations ensemble.
Exemple suivi : décomposer puis reconstruire
La table mélangée contient (101,Lina,1,Robotique,B12), (103,Sara,1,Robotique,B12) et (102,Noé,2,Astronomie,C04). On sépare Club, contenant deux tuples, et Membre, contenant les trois identifiants, prénoms et références de club. Les informations du club 1 n’existent alors plus qu’une fois.
On peut reconstruire le tableau descriptif en associant chaque membre au club dont l’identifiant correspond à sa référence. Lina et Sara retrouveront tous deux B12 à partir du même fait. Une décomposition utile conserve donc les identifiants nécessaires à cette association. Séparer uniquement les noms et les salles sans clés explicites risquerait de rendre les correspondances ambiguës, notamment si deux clubs partagent un nom ou une salle.
Faire évoluer le besoin sans dupliquer les personnes
Si un membre peut désormais appartenir à plusieurs clubs, déplacer tous ses attributs dans une ligne par inscription répète son prénom. Une organisation adaptée comporte Membre(id_membre,prenom), Club(id_club,nom,salle) et Inscription(id_membre,id_club). Chaque type de fait est stocké dans sa relation propre.
Lina peut alors avoir deux inscriptions sans que son prénom soit copié deux fois. Un club sans membre existe dans Club, et quitter un club supprime une inscription sans nécessairement supprimer la personne. Ces choix doivent suivre les règles du domaine : faut-il conserver les anciens membres, autoriser plusieurs salles ou historiser les déménagements ? Le chapitre apprend à repérer les dépendances et les anomalies, sans demander une théorie exhaustive des formes normales.
À vous de faire varier les choses
Combien de copies faut-il corriger ?
Changez le nombre de membres de Robotique puis le nombre de lignes corrigées après un déménagement. Comparez la table répétitive à la relation séparée.
Lire le résultat de l’expérience initiale
Le même club possède deux salles contradictoires.
Dans la conception séparée, une seule ligne Club(1, Robotique, C03) suffit pour enregistrer le déménagement, quel que soit le nombre de membres.
| Membre fictif | id_club | Salle répétée | Salle dans Club séparé |
|---|---|---|---|
| 101 | 1 | C03 | C03 |
| 102 | 1 | B12 | C03 |
| 103 | 1 | B12 | C03 |
Conserver une seule occurrence du fait réduit le risque de copies contradictoires.
De la compréhension à l’autonomie
À vous de résoudre
Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.
Le même club, deux salles
Deux lignes portent id_club = 1 et nom_club = Robotique. L’une indique B12, l’autre C03, alors qu’un club doit avoir une seule salle. Quelle anomalie observe-t-on ?
Indice 1
Le même fait a été copié dans plusieurs lignes.
Indice 2
Une modification peut avoir oublié une copie.
Comprendre la correction
On observe une incohérence typique d’une anomalie de mise à jour. Les lignes répètent la salle du même club et ne sont plus synchronisées. Il faut rétablir la bonne salle et revoir l’organisation afin de stocker ce fait une seule fois dans la relation des clubs.
Un club sans membre
Le club Astronomie vient d’être créé mais n’a aucun inscrit. Pourquoi une table exigeant un membre sur chaque ligne représente-t-elle mal cette situation ?
Indice 1
L’existence du club ne dépend pas d’une inscription.
Indice 2
Une ligne inventée ne serait pas un fait réel.
Comprendre la correction
Le modèle oblige à associer le club à une personne inexistante ou à des valeurs absentes. Séparer Club et Membre permet d’insérer Astronomie dans Club tout en laissant zéro membre le référencer. Le modèle correspond alors aux faits réels.
Retirer la dernière inscription
La seule ligne contenant le club Photo est celle d’un membre qui quitte ce club. Que risque-t-on en supprimant la ligne dans la table mélangée ?
Indice 1
La ligne contient aussi des informations sur le club.
Indice 2
Le départ d’un membre ne signifie pas la fermeture du club.
Comprendre la correction
On risque de perdre le nom, l’identifiant et la salle du club Photo. C’est une anomalie de suppression. Avec une relation Club séparée, on peut supprimer l’inscription concernée tout en conservant les informations du club, selon les règles de références définies.
Justifier deux relations
Proposez deux relations pour un modèle où chaque membre appartient à un seul club et où chaque club possède un nom et une salle. Indiquez le lien entre elles.
Indice 1
Séparez les attributs de la personne et ceux du club.
Indice 2
L’identifiant du club permet de les rapprocher.
Comprendre la correction
On peut utiliser Club(id_club, nom, salle) et Membre(id_membre, prenom, id_club). Les clés primaires sont leurs identifiants respectifs. Membre.id_club référence Club.id_club. Le nom et la salle ne sont plus répétés pour chaque membre et peuvent être retrouvés par une jointure.
Un déménagement partiellement enregistré
Cinq lignes décrivent le même club initialement en B12. Après son déplacement en C03, trois lignes sont corrigées. Donnez le nombre de copies périmées et dites si les lignes se contredisent. Comparez au cas où aucune ligne n’a été corrigée.
Indice 1
Une copie non modifiée n’a pas encore la nouvelle salle.
Indice 2
Une seule valeur partagée peut être cohérente mais périmée.
Comprendre la correction
Deux copies restent en B12 et trois indiquent C03 : les lignes se contredisent. Si aucune n’avait été corrigée, les cinq seraient périmées mais cohérentes entre elles. Dans une relation Club séparée, une seule mise à jour suffit pour le fait « salle du club ».
Préserver le club sans ses membres
Photo ne possède plus aucun inscrit. Expliquez ce qui arrive si toutes ses informations figuraient seulement sur les lignes d’inscription supprimées. Proposez une organisation qui conserve l’existence de Photo et dites quelle relation peut alors être vide pour lui.
Indice 1
L’existence du club ne dépend pas nécessairement d’une participation.
Indice 2
Séparez les descriptions et les liens de participation.
Comprendre la correction
Supprimer la dernière ligne mélangée efface aussi les informations de Photo : c’est une anomalie de suppression. Une relation Club conserve son identifiant, son nom et sa salle. Aucune ligne Inscription ne le référence, ce qui représente correctement un club sans inscrit. Le club existe toujours malgré l’absence de participation.
Passer à plusieurs clubs
Lina 101 participe aux clubs 1 et 3 ; Noé 102 participe au club 1. Les clubs 1 et 3 sont Robotique en B12 et Photo en A02. Écrivez les tuples des trois relations Membre, Club et Inscription et indiquez où modifier le prénom de Lina.
Indice 1
Une ligne Membre suffit par personne.
Indice 2
Les participations portent les couples d’identifiants.
Comprendre la correction
Membre contient (101,Lina),(102,Noé). Club contient (1,Robotique,B12),(3,Photo,A02). Inscription contient (101,1),(101,3),(102,1). Renommer Lina modifie seulement Membre pour l’identifiant 101. Les trois participations restent valides puisque leurs références ne changent pas.
Les erreurs qui méritent un détour
- Supprimer toute répétition sans examiner les relations.
- Une clé étrangère répétée peut être parfaitement normale. Le problème est la duplication de faits qui devraient rester cohérents.
- Découper les tables sans conserver les liens.
- Les clés et références doivent permettre de reconstruire les informations nécessaires sans rapprochements ambigus.
La fiche à garder
L’essentiel à retenir
- Des faits répétés peuvent diverger lors d’une mise à jour.
- Un fait doit pouvoir être inséré ou supprimé sans effet indésirable sur un autre.
- Les références relient les informations séparées.
Le prochain pas
- Le rôle d’un système de gestion de bases de données
- SQL : comprendre et écrire des jointures
- SQL : insérer, modifier et supprimer des données
Retrouver le catalogue de Terminale
Ce chapitre s’appuie sur le programme officiel de Terminale (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.
