SIG DCG (UE8) : Bases de données, SQL et processus

Tout le programme DCG, déjà prêt à réviser

Fiches, quiz, flashcards et infographies déjà créés, avec un tuteur IA. Paiement unique, dès 29 €.

Voir les packs DCG

Le modèle relationnel : relations, clés et contrainte d'intégrité référentielle

À retenir

Cadre programme : DCG, programme 2025 (arrêté du 4 août 2025, première session 2027), UE 8 « Systèmes d'information de gestion », partie 2 « Gérer des données du système d'information », sous-partie 2.1 « Structurer et manipuler des données via les bases de données », rubrique 2.1.1 « Structurer une base de données ».

Pourquoi c'est central à l'examen : l'épreuve écrite de 4 h donne presque toujours un schéma relationnel avant de poser des questions de requêtes ou de processus. Savoir lire ce schéma (clés, liens entre tables, règles de gestion cachées derrière une clé étrangère) conditionne la réussite de tout le reste de l'UE : une jointure fausse vient presque toujours d'un schéma mal lu.

01Pourquoi une base de données relationnelle

1.1 Le problème des données dispersées

Dans une petite entreprise, les clients sont souvent notés dans un fichier, les commandes dans un deuxième et les factures dans un troisième. Trois difficultés apparaissent vite.

  • Redondance : l'adresse d'un client est recopiée dans chaque fichier.
  • Incohérence : l'adresse est corrigée à un endroit et pas aux autres.
  • Partage impossible : deux services ne peuvent pas travailler en même temps sur la même donnée sans risquer de s'écraser mutuellement.

Une base de données regroupe les données de l'organisation en un ensemble structuré, partagé et géré par un système de gestion de bases de données relationnelles (SGBDR). Le SGBDR est le logiciel qui stocke les données, applique les règles de cohérence et répond aux requêtes. « Relationnelle » désigne la manière d'organiser les données : en tables reliées par des valeurs communes.

1.2 Ce que le programme demande

Le programme n'utilise que le modèle relationnel : relation, clé primaire, clé étrangère, dépendances fonctionnelles, normalisation (cours 14) et contrainte d'intégrité référentielle. Aucune autre technique de conception n'est attendue : le schéma est fourni ou se déduit directement des règles de gestion.

02Le vocabulaire du modèle relationnel

Une base relationnelle est un ensemble de relations, que l'on représente sous forme de tableaux à deux dimensions.

Terme du modèleDans le tableauExemple
RelationLa table entièreCLIENT
AttributUne colonneNomClient
DomaineL'ensemble des valeurs permises pour un attributVille : un texte ; Quantite : un entier positif
Tuple (ou enregistrement)Une ligne(1, Boulangerie Lemoine, Lyon, ...)
Valeur nulle (NULL)Une case sans valeur : information inconnue ou sans objetCourriel non renseigné

Voici la relation CLIENT d'une entreprise de fournitures de bureau, qui servira de fil rouge à tout le kit.

NumClientNomClientVilleCourriel
1Boulangerie LemoineLyoncontact@lemoine.example
2Cabinet AubertNantesNULL
3Garage PerrinLilleperrin@garage.example
4Mairie de ToursToursachats@tours.example
5Atelier DuvalLyonNULL
6Lycée MicheletRennesintendance@michelet.example
7Pharmacie RouxNantesroux@pharma.example

Propriétés à connaître :

  • une relation est un ensemble de tuples : deux lignes ne peuvent pas être identiques ;
  • l'ordre des lignes et des colonnes n'a pas de signification ;
  • chaque case contient une seule valeur (pas de liste dans une case) ;
  • toutes les valeurs d'une colonne appartiennent au même domaine.

À retenir

Le mot « table » est le terme courant des SGBDR et du langage de requêtes ; « relation » est le terme du modèle. Les deux désignent la même chose à l'examen.

03Le schéma relationnel et sa notation

Le schéma relationnel décrit la structure de la base sans les données : le nom de chaque relation et la liste de ses attributs. Le sujet utilise une notation proche de la suivante.

  • Le nom de la relation s'écrit en majuscules, suivi de ses attributs entre parenthèses.
  • La clé primaire est soulignée sur une copie ; dans ce cours, elle est écrite en gras.
  • Une clé étrangère est précédée du signe #.

Le schéma de la base du fil rouge :

À retenir

CATEGORIE (CodeCat, LibCat)

PRODUIT (RefProduit, Designation, PrixHT, Stock, #CodeCat)

CLIENT (NumClient, NomClient, Ville, Courriel)

COMMANDE (NumCommande, DateCommande, #NumClient)

LIGNE_COMMANDE (#NumCommande, #RefProduit, Quantite)

Pour LIGNE_COMMANDE, les deux attributs sont à la fois en gras (ils forment ensemble la clé primaire) et précédés de

(chacun est une clé étrangère). C'est une situation très fréquente : on écrit #NumCommande, #RefProduit.

Le sujet peut aussi donner le schéma sous forme graphique (rectangles reliés par des flèches de la clé étrangère vers la clé primaire référencée). La lecture est la même : suivre la flèche, c'est suivre la clé étrangère.

04La clé primaire

4.1 Définition et qualités

La clé primaire d'une relation est l'attribut (ou le groupe d'attributs) qui identifie chaque tuple de façon unique. Elle respecte quatre qualités.

  1. Unicité : deux tuples n'ont jamais la même valeur de clé.
  2. Non-nullité : la clé est toujours renseignée. C'est la contrainte d'entité.
  3. Minimalité : on ne retient que les attributs nécessaires à l'identification ; si on peut en retirer un sans perdre l'unicité, il n'appartient pas à la clé.
  4. Stabilité : la valeur ne change pas pendant la vie du tuple.

4.2 Clé simple et clé composée

Clé simpleClé composée
Nombre d'attributsUn seulDeux ou plus
ExempleNumClient identifie un client(NumCommande, RefProduit) identifie une ligne de commande
RaisonUn numéro suffitUne commande contient plusieurs produits et un produit figure dans plusieurs commandes : seule la combinaison est unique

4.3 Choisir une bonne clé

Le nom du client est un mauvais choix : deux clients peuvent avoir le même nom, un nom peut être modifié. On préfère un identifiant artificiel (numéro, code) attribué par l'organisation : c'est ce que montrent NumClient, RefProduit ou NumCommande.

05La clé étrangère

Une clé étrangère est un attribut (ou un groupe d'attributs) d'une relation dont les valeurs référencent la clé primaire d'une autre relation (ou parfois de la même). Elle matérialise le lien entre deux tables.

Exemple : dans COMMANDE, l'attribut #NumClient référence CLIENT. La commande 101 porte la valeur 1 : elle a été passée par le client numéro 1.

NumCommandeDateCommandeNumClient
1012026-01-121
1022026-01-203
1032026-02-031
1042026-02-104
1052026-02-252
1062026-03-046
1072026-03-154
1082026-03-281

5.1 Lire une règle de gestion dans une clé étrangère

La place de la clé étrangère révèle la règle de gestion.

SchémaRègle de gestion lue
COMMANDE (..., #NumClient)Une commande est passée par un seul client ; un client peut passer plusieurs commandes
PRODUIT (..., #CodeCat)Un produit appartient à une seule catégorie ; une catégorie regroupe plusieurs produits
LIGNE_COMMANDE (#NumCommande, #RefProduit, Quantite)Une commande contient plusieurs produits, un produit peut figurer dans plusieurs commandes, avec une quantité pour chaque couple

La règle générale : pour un lien « un à plusieurs », la clé étrangère se place dans la table du côté « plusieurs ». Pour un lien « plusieurs à plusieurs », on crée une table de liaison dont la clé primaire est formée des clés étrangères vers les deux tables liées.

5.2 Clé étrangère facultative et clé étrangère réflexive

Une clé étrangère peut accepter la valeur nulle quand le lien est facultatif. Dans EMPLOYE (NumEmploye, NomEmploye, Fonction, #NumResponsable), la directrice n'a pas de responsable : son NumResponsable est nul. La clé étrangère référence ici la même relation : on parle de clé étrangère réflexive (cours 16).

06La contrainte d'intégrité référentielle

6.1 Énoncé

La contrainte d'intégrité référentielle impose que toute valeur non nulle d'une clé étrangère existe comme valeur de la clé primaire référencée. Autrement dit, on ne peut pas faire référence à quelque chose qui n'existe pas.

6.2 Ce que le SGBDR refuse

OpérationExempleRésultat
Ajouter dans la table qui porte la clé étrangère une valeur inexistanteCommande 109 pour le client 99, qui n'existe pasRefusée
Supprimer dans la table référencée une ligne encore utiliséeSupprimer le client 1, qui a trois commandesRefusée (comportement par défaut)
Modifier la clé primaire d'une ligne encore référencéeRenuméroter le client 1 en 10Refusée
Supprimer une ligne qui n'est référencée nulle partSupprimer le client 5, qui n'a aucune commandeAcceptée

Pour ne pas laisser de commandes « orphelines », il faut donc supprimer d'abord les lignes dépendantes (les lignes de commande, puis la commande), puis la ligne référencée (cours 19).

6.3 Les trois niveaux de cohérence

ContrainteElle garantitExemple
De domaineUne valeur appartient au domaine de son attributUne quantité n'est pas un texte
D'entitéLa clé primaire est unique et non nulleDeux clients n'ont pas le même NumClient
RéférentielleUne clé étrangère pointe vers une ligne existanteUne commande pointe vers un client existant

07Interpréter un schéma : méthode

  1. Repérer la clé primaire de chaque relation (gras ou soulignement) et dire si elle est simple ou composée.
  2. Repérer les clés étrangères (signe #) et la relation qu'elles référencent.
  3. Traduire en règle de gestion chaque clé étrangère avec la phrase « un X a un seul Y, un Y a plusieurs X ».
  4. Tracer les chemins : pour relier deux tables éloignées (par exemple CLIENT et PRODUIT), suivre les clés étrangères de proche en proche : CLIENT, COMMANDE, LIGNE_COMMANDE, PRODUIT. Ce chemin servira de squelette aux jointures (cours 16).
  5. Vérifier les règles du modèle avec la liste de contrôle du paragraphe suivant.

08Vérifier les règles du modèle relationnel

Pour un schéma ou un jeu de données proposé, contrôler dans l'ordre :

ContrôleQuestionAnomalie type
CléChaque relation a-t-elle une clé primaire ?Table sans identifiant
UnicitéLes valeurs de la clé sont-elles toutes différentes ?Deux lignes avec le même numéro
Non-nullitéLa clé est-elle toujours renseignée ?Une ligne avec une clé vide
AtomicitéChaque case contient-elle une seule valeur ?« P01, P02 » dans une case
RéférencesChaque clé étrangère pointe-t-elle une ligne existante ?Commande d'un client inconnu
DomaineLes valeurs sont-elles du bon type ?Une date écrite « bientôt »

La redondance et les dépendances entre attributs sont étudiées au cours 14.

Exemples corrigés

Cas 1 : lire le schéma d'une entreprise de fournitures de bureau

Énoncé. L'entreprise du fil rouge fournit des organisations. Son schéma relationnel est celui du paragraphe 3 :

À retenir

CATEGORIE (CodeCat, LibCat)

PRODUIT (RefProduit, Designation, PrixHT, Stock, #CodeCat)

CLIENT (NumClient, NomClient, Ville, Courriel)

COMMANDE (NumCommande, DateCommande, #NumClient)

LIGNE_COMMANDE (#NumCommande, #RefProduit, Quantite)

Voici le contenu de deux relations.

RefProduitDesignationPrixHTStockCodeCat
P01Ramette papier A44.50200PAP
P02Classeur à levier3.00150PAP
P03Clavier sans fil25.0040INF
P04Souris optique12.0060INF
P05Chaise de bureau90.0015MOB
P06Bureau 120 cm150.008MOB
P07Lampe de bureau35.0012MOB
P08Agrafeuse8.000PAP
NumCommandeRefProduitQuantite
101P0120
101P0210
102P032
103P0110
103P045
104P054
104P062
105P031
105P041
106P0150
106P0220
106P053
107P052
107P074
108P015
108P033

Questions.

  1. Quelle est la clé primaire de chaque relation ? Quelles sont les clés étrangères ?
  2. Quelles règles de gestion peut-on lire dans ce schéma ?
  3. Quelles tables faut-il traverser pour connaître les désignations des produits commandés par un client donné ?
  4. Combien de lignes de commande contient la commande 106, et que représente chacune ?
  5. L'ajout d'une ligne de commande (101, 'P01', 5) est-il possible ? Et celui de (109, 'P01', 5) ?

Corrigé.

  1. Les clés sont :
RelationClé primaireClés étrangères
CATEGORIECodeCat (simple)aucune
PRODUITRefProduit (simple)CodeCat, qui référence CATEGORIE
CLIENTNumClient (simple)aucune
COMMANDENumCommande (simple)NumClient, qui référence CLIENT
LIGNE_COMMANDE(NumCommande, RefProduit) (composée)NumCommande, qui référence COMMANDE ; RefProduit, qui référence PRODUIT
  1. Règles lues : un produit appartient à une seule catégorie ; une commande est passée par un seul client ; un client peut passer plusieurs commandes ; une commande contient plusieurs produits et un produit peut être commandé plusieurs fois, avec une quantité par commande ; un même produit ne figure qu'une seule fois par commande (c'est ce que dit la clé composée : pour regrouper des achats du même produit, on augmente la quantité).

  2. Le chemin est CLIENT, COMMANDE, LIGNE_COMMANDE, PRODUIT : on suit NumClient de CLIENT vers COMMANDE, NumCommande de COMMANDE vers LIGNE_COMMANDE, puis RefProduit de LIGNE_COMMANDE vers PRODUIT. La table LIGNE_COMMANDE est indispensable : c'est elle qui fait le pont.

  3. La commande 106 compte 3 lignes : le produit P01 en quantité 50, P02 en quantité 20 et P05 en quantité 3. Chaque ligne est un tuple distinct dont la clé est le couple (106, produit).

  4. Le couple (101, 'P01') existe déjà dans la relation (20 unités commandées) : une seconde ligne avec la même clé violerait la contrainte d'entité (unicité de la clé primaire). Il faut modifier la quantité existante. Le couple (109, 'P01') est refusé pour une autre raison : la commande 109 n'existe pas dans COMMANDE, ce qui viole la contrainte d'intégrité référentielle.

Cas 2 : contrôler un fichier importé et rendre compte à la direction

Énoncé. Un organisme de formation a importé trois fichiers dans une base, mais sans activer les contrôles du SGBDR. Le schéma attendu est :

À retenir

FORMATION (CodeFormation, IntituleFormation, DureeJours)

STAGIAIRE (NumStagiaire, NomStagiaire, Entreprise)

INSCRIPTION (#NumStagiaire, #CodeFormation, DateInscription)

Règle de gestion : un stagiaire ne s'inscrit qu'une seule fois à une formation donnée. Les données importées sont les suivantes.

CodeFormationIntituleFormationDureeJours
F01Initiation à la comptabilité3
F02Gestion de la paie2
F03Bases de données4
NumStagiaireNomStagiaireEntreprise
11MartinAtelier Duval
12BernardMairie de Tours
13PetitGarage Perrin
12BertrandLycée Michelet
NULLRouxPharmacie Roux
NumStagiaireCodeFormationDateInscription
11F012026-03-02
11F032026-03-05
12F022026-03-06
13F042026-03-09
15F012026-03-10
11F012026-03-12

Questions.

  1. Relever toutes les anomalies au regard du modèle relationnel, en nommant la contrainte violée.
  2. Que faire de chaque anomalie ?
  3. Rédiger une courte note à la directrice de l'organisme.

Corrigé.

  1. Les anomalies sont les suivantes.
N°OùAnomalieContrainte violée
A1STAGIAIRELe numéro 12 apparaît deux fois, pour Bernard et pour BertrandUnicité de la clé primaire (contrainte d'entité)
A2STAGIAIREUne ligne (Roux) n'a pas de numéroNon-nullité de la clé primaire (contrainte d'entité)
A3INSCRIPTIONLa formation F04 n'existe pas dans FORMATIONIntégrité référentielle
A4INSCRIPTIONLe stagiaire 15 n'existe pas dans STAGIAIREIntégrité référentielle
A5INSCRIPTIONLe couple (11, F01) figure deux fois (2 et 12 mars)Unicité de la clé composée, et règle de gestion de l'énoncé
  1. Traitement.

    • A1 : deux personnes différentes partagent un numéro ; il faut en attribuer un nouveau à l'une d'elles après vérification auprès de la source (si c'est la même personne, fusionner les deux lignes).
    • A2 : attribuer un numéro avant tout enregistrement.
    • A3 : créer la formation F04 si elle existe réellement, sinon corriger le code dans l'inscription.
    • A4 : créer le stagiaire 15 ou corriger le numéro.
    • A5 : vérifier laquelle des deux dates est la bonne et supprimer l'autre inscription.
  2. Note à la directrice.

À retenir

Objet : fiabilité de la base importée. Les contrôles de cohérence sur les trois fichiers importés ont révélé cinq anomalies : un numéro de stagiaire en double, un stagiaire sans numéro, deux inscriptions pointant vers une formation ou un stagiaire inconnus et une inscription en double. Aucune n'est grave isolément, mais leur cumul montre que les contrôles du SGBDR n'étaient pas actifs pendant l'import. Je recommande de corriger ces cinq lignes, puis d'importer à nouveau avec les clés primaires et les clés étrangères déclarées : le système refusera alors lui-même les lignes incohérentes, ce qui est préférable à un contrôle manuel à chaque import.

Vocabulaire essentiel

TermeDéfinition
SGBDRSystème de gestion de bases de données relationnelles : logiciel qui stocke les données et applique les règles de cohérence
Relation (table)Ensemble de tuples décrits par les mêmes attributs
AttributUne colonne d'une relation, associée à un domaine
TupleUne ligne d'une relation
DomaineEnsemble des valeurs permises pour un attribut
Schéma relationnelListe des relations et de leurs attributs, avec clés primaires et clés étrangères
Clé primaireAttribut ou groupe d'attributs identifiant de façon unique chaque tuple
Clé composéeClé primaire formée de plusieurs attributs
Clé étrangèreAttribut dont les valeurs référencent la clé primaire d'une relation
Contrainte d'intégrité référentielleToute valeur non nulle d'une clé étrangère doit exister dans la relation référencée
Table de liaisonTable dont la clé est formée des clés étrangères de deux tables, pour relier « plusieurs à plusieurs »
Valeur nulle (NULL)Absence de valeur : information inconnue ou sans objet

Points clés à retenir

  1. Une base relationnelle est un ensemble de relations (tables) reliées par des clés.
  2. Une relation est un ensemble de tuples : pas de doublon, ordre sans importance, une valeur par case.
  3. La clé primaire est unique, jamais nulle, minimale et stable ; on préfère un identifiant artificiel au nom.
  4. Une clé composée est nécessaire quand l'identification passe par la combinaison de plusieurs attributs (ligne de commande).
  5. La clé étrangère se place du côté « plusieurs » ; un lien « plusieurs à plusieurs » exige une table de liaison.
  6. L'intégrité référentielle interdit de référencer une ligne inexistante et de supprimer une ligne encore référencée.
  7. Pour lire un schéma : clés primaires, clés étrangères, règles de gestion, chemins entre tables.
  8. Les contrôles de cohérence s'appliquent aux trois niveaux : domaine, entité, référence.

Pièges fréquents

  1. Confondre clé primaire et clé étrangère : dans LIGNE_COMMANDE, #NumCommande est à la fois partie de la clé primaire et clé étrangère.
  2. Oublier qu'une clé composée est un tout : on ne peut pas dire que NumCommande seul identifie une ligne.
  3. Placer la clé étrangère du mauvais côté : elle va dans la table du côté « plusieurs » (COMMANDE porte NumClient, pas l'inverse).
  4. Croire qu'une clé étrangère doit toujours être renseignée : elle peut être nulle si le lien est facultatif.
  5. Prendre le nom comme clé primaire : deux homonymes suffisent à casser l'unicité.
  6. Confondre « refusé par l'intégrité » et « impossible » : supprimer un client référencé est possible une fois ses commandes supprimées.
  7. Chercher un MCD ou un schéma entité-association : le programme ne les demande pas, le schéma relationnel est la seule modélisation attendue.
  8. Oublier de nommer la contrainte : en cas d'anomalie, préciser s'il s'agit de l'unicité de la clé, de sa non-nullité ou de l'intégrité référentielle.

Q&R pour le tuteur IA

Q : Quelle différence entre une relation et une table ? R : Aucune dans le cadre du programme. « Relation » est le terme du modèle relationnel, « table » celui des SGBDR et du langage de requêtes. Les deux désignent un ensemble de lignes décrites par les mêmes colonnes.

Q : Pourquoi LIGNE_COMMANDE a-t-elle une clé primaire composée ? R : Parce qu'aucun attribut seul ne suffit à identifier une ligne : une commande contient plusieurs produits et un produit apparaît dans plusieurs commandes. Seul le couple (NumCommande, RefProduit) est unique.

Q : À quoi sert la contrainte d'intégrité référentielle ? R : Elle garantit qu'une clé étrangère ne pointe jamais vers une ligne qui n'existe pas. Elle empêche par exemple d'enregistrer une commande pour un client absent de la table CLIENT, ou de supprimer un client qui a encore des commandes.

Q : Une clé étrangère peut-elle être nulle ? R : Oui, si le lien est facultatif, comme NumResponsable pour la directrice d'une équipe. La contrainte référentielle ne s'applique qu'aux valeurs non nulles.

Q : Comment lire une règle de gestion dans un schéma ? R : Regarder où se trouve la clé étrangère. Si COMMANDE contient #NumClient, une commande a un seul client et un client peut avoir plusieurs commandes. Si une table a une clé composée de deux clés étrangères, c'est une table de liaison : le lien est « plusieurs à plusieurs ».

Q : Doit-on dessiner un modèle conceptuel (entités et associations) pour répondre à l'examen ? R : Non. Le programme se limite au modèle relationnel : le candidat lit, vérifie ou adapte un schéma relationnel.

Tu as lu le cours. Passe maintenant à la pratique :

SIG DCG (UE8) : Bases de données, SQL et processus

Ajoute gratuitement le Kit à ton espace, puis utilise tes jetons pour générer un quiz, créer des flashcards ou poser tes questions au Tuteur IA.

Quiz, flashcards et fiches déjà prêts

Voir les packs DCG