Aller au contenu

Un mot pour Fahmio

Tu écris. Tu continues.

Un problème, une idée — assez pour qu’on comprenne, puis tu retournes à ta copie.

On lit. Tu n’as rien d’autre à faire.

Où veux-tu aller ?

↑ ↓ pour parcourir · Entrée pour ouvrir · Échap pour fermer

Fahmio
Fahmio
Bac Tunisie
BD-IBases de données et SQL

Contrainte d'intégrité violée : requêtes refusées, lignes fautives à l'insertion, V/F justifié par la clause, mot-clé de contrainte

Idée directrice

Le sujet donne les requêtes de création (clé primaire, clés étrangères, CHECK, NOT NULL, UNIQUE, DEFAULT) et le contenu des tables, puis fait diagnostiquer : quelle contrainte une requête ou une ligne à insérer viole-t-elle, et laquelle autorise ou interdit une opération. Trois familles suffisent pour nommer la faute — intégrité de table (clé primaire répétée ou vide), intégrité référentielle (ligne mère absente ou encore référencée), intégrité de domaine (valeur hors CHECK, champ obligatoire vide) — et chaque réponse se justifie par la clause précise de la création.

Ce qui aide à reconnaître la démarche

« Indiquer pour chaque requête la contrainte d'intégrité non respectée et justifier la réponse » ; « le SGBD génère des erreurs au niveau de quelques lignes » ; « en identifiant les deux anomalies détectées ainsi que la contrainte d'intégrité non respectée » ; « Justifier votre réponse par la clause de la contrainte correspondante » ; « mettre une croix (X) devant la bonne réponse »

Besoin d’un point de départ ? Voir la méthode
  • Doublon ou vide sur la clé primaire, simple ou composée → intégrité de table ; valeur de clé étrangère absente de la table mère, ou suppression d'une ligne mère encore référencée sans ON DELETE CASCADE → intégrité référentielle ; valeur refusée par CHECK, champ NOT NULL vide, valeur trop longue → intégrité de domaine.
  • Lignes à insérer : les traiter dans l'ordre, table mère d'abord, en ajoutant chaque ligne acceptée ; répondre par ligne, table, champ et contrainte.
  • V/F : citer la clause exacte (PRIMARY KEY, REFERENCES … ON DELETE CASCADE, UNIQUE, CHECK, NOT NULL, DEFAULT) ; une colonne sans NOT NULL accepte l'absence de valeur.
  • Mot-clé : DEFAULT remplit, UNIQUE interdit un doublon hors clé, NOT NULL oblige la saisie, CHECK borne les valeurs, REFERENCES relie ; modifier une table existante → ALTER TABLE.
Les pièges à vérifier dans ta démarche

Tenir pour fautive une clé étrangère qui se répète (un agriculteur livre plusieurs fois) ; chercher la faute dans la mauvaise table (le CIN « 1357246 » est une erreur de Livraison, pas d'Agriculteur) ; oublier qu'une ligne acceptée plus haut existe pour les suivantes ; croire qu'une suppression est toujours propagée (seule la clé étrangère déclarée ON DELETE CASCADE le fait) ; appeler « référentielle » une valeur hors CHECK ; justifier par une règle générale au lieu de la clause de la requête.

Sujet principal

Exercice (6 points) — dans l'esprit des sessions 2016–2025, section Sciences de l'informatique

18 questionsCorrigé masqué

La coopérative Zitouna Plus de Sfax suit les livraisons d'olives de ses adhérents aux huileries de la région à l'aide de la base de données Gestion_Huileries, dont la représentation textuelle est la suivante (clés primaires soulignées, clés étrangères suivies de #) :

  • Huilerie ( codeHui , nomHui , ville , capaciteJour )
  • Agriculteur ( cinAgr , nomAgr , telAgr )
  • Variete ( codeVar , libVar )
  • Livraison ( numLiv , dateLiv , poidsKg , etat , codeVar# , cinAgr# , codeHui# )
ChampDescription
capaciteJourQuantité d'olives, en kg, qu'une huilerie peut triturer en une journée.
cinAgrNuméro de la carte d'identité d'un agriculteur, 8 chiffres.
telAgrTéléphone d'un agriculteur, 8 chiffres.
poidsKgPoids d'olives livré, en kg.
etatÉtat d'une livraison : « A » (en attente de trituration) ou « T » (triturée).

Les tables ont été créées par les requêtes suivantes :

CREATE TABLE Huilerie (
  codeHui CHAR(4) PRIMARY KEY,
  nomHui VARCHAR(30) NOT NULL UNIQUE,
  ville VARCHAR(20) NOT NULL,
  capaciteJour INT CHECK (capaciteJour > 0)
);
CREATE TABLE Agriculteur (
  cinAgr CHAR(8) PRIMARY KEY,
  nomAgr VARCHAR(40) NOT NULL,
  telAgr CHAR(8) UNIQUE
);
CREATE TABLE Variete (
  codeVar CHAR(3) PRIMARY KEY,
  libVar VARCHAR(20) NOT NULL
);
CREATE TABLE Livraison (
  numLiv INT PRIMARY KEY,
  dateLiv DATE NOT NULL,
  poidsKg INT NOT NULL
    CHECK (poidsKg BETWEEN 50 AND 5000),
  etat CHAR(1) DEFAULT 'A'
    CHECK (etat IN ('A', 'T')),
  codeVar CHAR(3),
  cinAgr CHAR(8),
  codeHui CHAR(4),
  FOREIGN KEY (codeVar)
    REFERENCES Variete (codeVar),
  FOREIGN KEY (cinAgr)
    REFERENCES Agriculteur (cinAgr),
  FOREIGN KEY (codeHui)
    REFERENCES Huilerie (codeHui)
    ON DELETE CASCADE
);

On donne le contenu actuel des tables ; chaque question part de ce contenu.

Table Huilerie

codeHuinomHuivillecapaciteJour
H001Huilerie El AmalSfax40000
H002Zitouna SahelMahdia25000
H003Huilerie NourSfax18000

Table Agriculteur

cinAgrnomAgrtelAgr
04512378Ben Salem Moncef98456123
07789012Trabelsi Najet22314567
09876543Gharbi Hedi

Table Variete

codeVarlibVar
CHMChemlali
CHTChétoui
OUSOueslati

Table Livraison

numLivdateLivpoidsKgetatcodeVarcinAgrcodeHui
3012025-11-181200TCHM04512378H001
3022025-11-18800TCHT07789012H002
3032025-11-202500ACHM09876543H001
3042025-11-21650AOUS04512378H003

Requêtes de la question 1 :

-- a)
INSERT INTO Agriculteur
VALUES ('07789012', 'Jlassi Rim', '55667788');
-- b)
UPDATE Livraison SET codeVar = 'ARB'
WHERE numLiv = 304;
-- c)
DELETE FROM Agriculteur
WHERE cinAgr = '04512378';
-- d)
INSERT INTO Livraison (numLiv, dateLiv,
  poidsKg, codeVar, cinAgr, codeHui)
VALUES (305, '2025-11-22', 7200, 'CHT',
        '07789012', 'H002');

Document 1 — lignes à insérer, dans l'ordre, d'abord dans la table Agriculteur puis dans la table Livraison (toutes les variétés et toutes les huileries citées existent déjà) :

N° lignecinAgrnomAgrtelAgr
111223344Mansouri Fathi97111222
212345678Ayari Samia50123456
313572468Hammami Lotfi21987654
412345678Dridi Kamel93456789
N° lignenumLivdateLivpoidsKgetatcodeVarcinAgrcodeHui
13052025-11-24900ACHM11223344H002
23062025-11-241500ACHT1357246H001
33072025-11-2530AOUS12345678H003
43082025-11-252200TCHM13572468H003
53042025-11-26700ACHT11223344H001
63092025-11-261100XCHM12345678H002

Propositions de la question 3 :

  • a. La suppression de l'huilerie « H003 » entraîne la suppression automatique de la livraison 304.
  • b. Il est possible d'enregistrer deux huileries portant le même nom.
  • c. Une livraison enregistrée sans préciser son état prend l'état « A ».
  • d. Il est possible d'enregistrer un agriculteur sans numéro de téléphone.
  • e. Il est possible d'enregistrer une huilerie dont la capacité journalière vaut 0 kg.
  • f. La suppression de la variété « OUS » entraîne la suppression automatique de la livraison 304.

Besoins de la question 4 — la coopérative se propose de créer la table Ouvrier ( matOuv , nomOuv , numCnss , salaireJour , codeHui# ) :

  • a. Attribuer au salaire journalier la valeur 30 dinars lorsqu'aucune valeur ne lui est affectée : ☐ CHECK ☐ DEFAULT ☐ NULL
  • b. Interdire que deux ouvriers aient le même numéro de CNSS : ☐ REFERENCES ☐ DISTINCT ☐ UNIQUE
  • c. Relier chaque ouvrier à l'huilerie où il travaille : ☐ REFERENCES ☐ UNIQUE ☐ NOT NULL
  • d. Ajouter plus tard, à la table déjà créée, une contrainte nommée « ckSal » interdisant un salaire nul ou négatif : ☐ UPDATE ☐ CREATE TABLE ☐ ALTER TABLE
  1. L'exécution de chacune des requêtes a), b), c) et d) génère une erreur. Indiquer pour chaque requête la contrainte d'intégrité non respectée et justifier la réponse.
  2. Lors de l'insertion des lignes du document 1, le SGBD génère des erreurs au niveau de quelques lignes. Pour chaque erreur, indiquer le numéro de la ligne, le nom de la table, le nom du champ ainsi que la contrainte d'intégrité non respectée (intégrité de table (clé primaire), intégrité référentielle ou intégrité de domaine).
  3. Pour chacune des propositions a) à f), répondre par V si elle est correcte ou par F dans le cas contraire, et justifier la réponse par la clause de la contrainte correspondante utilisée dans les requêtes de création.
  4. Pour chacun des besoins a) à d), mettre une croix devant le mot-clé SQL qui convient.
Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : comparer la valeur en cause au contenu des tables : clé déjà présente → intégrité de table ; valeur de clé étrangère absente de la table mère, ou ligne mère encore référencée → intégrité référentielle ; valeur interdite par CHECK ou champ NOT NULL vide → intégrité de domaine.

  • 1.a Intégrité de table (clé primaire) : le CIN « 07789012 » est déjà celui de Trabelsi Najet ; cinAgr est la clé primaire d'Agriculteur et ne peut pas se répéter.
  • 1.b Intégrité référentielle : la variété « ARB » n'existe pas dans la table mère Variete ; la clé étrangère codeVar de la livraison 304 référencerait une ligne inexistante.
  • 1.c Intégrité référentielle : les livraisons 301 et 304 référencent cet agriculteur. La clé étrangère cinAgr est déclarée sans ON DELETE CASCADE : la suppression laisserait deux livraisons orphelines, le SGBD la refuse.
  • 1.d Intégrité de domaine : 7200 kg sort de l'intervalle imposé par CHECK (poidsKg BETWEEN 50 AND 5000).

2. Idée : insérer les lignes dans l'ordre en tenant à jour le contenu des tables : une ligne acceptée devient une ligne mère possible pour les suivantes, une ligne refusée n'est pas enregistrée.

LigneTableChampContrainte non respectée
4AgriculteurcinAgrIntégrité de table (clé primaire) : « 12345678 » vient d'être inséré à la ligne 2
2LivraisoncinAgrIntégrité référentielle : « 1357246 » (7 chiffres) n'existe pas dans Agriculteur
3LivraisonpoidsKgIntégrité de domaine : 30 kg est inférieur au minimum de 50 kg
5LivraisonnumLivIntégrité de table (clé primaire) : la livraison 304 existe déjà
6LivraisonetatIntégrité de domaine : « X » n'est ni « A » ni « T »

La ligne 3 de Livraison ne viole aucune contrainte référentielle : l'agriculteur « 12345678 » existe (Ayari Samia, ligne 2 d'Agriculteur) ; seul le poids est en cause. Les lignes 1 et 4 de Livraison et les lignes 1 à 3 d'Agriculteur sont enregistrées.

3. Idée : chaque réponse se justifie par la clause précise de la requête CREATE TABLE qui autorise ou interdit l'opération.

PropositionRéponseClause justificative
aVON DELETE CASCADE sur la clé étrangère codeHui de Livraison
bFnomHui VARCHAR(30) NOT NULL UNIQUE
cVetat CHAR(1) DEFAULT 'A'
dVtelAgr CHAR(8) UNIQUE, sans NOT NULL : la saisie n'est pas obligatoire (Gharbi Hedi n'a pas de téléphone)
eFCHECK (capaciteJour > 0) : 0 n'est pas strictement positif
fFFOREIGN KEY (codeVar) REFERENCES Variete (codeVar), sans ON DELETE CASCADE : « OUS » est encore référencée par la livraison 304, sa suppression est refusée

4. Idée : DEFAULT remplit à la place de l'utilisateur, UNIQUE interdit un doublon sur une colonne qui n'est pas la clé, REFERENCES crée le lien avec la table mère ; une contrainte ajoutée à une table existante passe par ALTER TABLE.

a. DEFAULT ; b. UNIQUE ; c. REFERENCES ; d. ALTER TABLE. Par exemple :

CREATE TABLE Ouvrier (
  matOuv INT PRIMARY KEY,
  nomOuv VARCHAR(40) NOT NULL,
  numCnss CHAR(10) UNIQUE,
  salaireJour DECIMAL(6,3) DEFAULT 30,
  codeHui CHAR(4),
  FOREIGN KEY (codeHui)
    REFERENCES Huilerie (codeHui)
);
ALTER TABLE Ouvrier
ADD CONSTRAINT ckSal
CHECK (salaireJour > 0);

Changer d’énoncé, garder le raisonnement

Choisis un seul transfert après le sujet principal. Qu’est-ce qui change ? Quel résultat ou quelle méthode peux-tu réutiliser ? Les autres exercices restent disponibles pour une prochaine séance.

Variantes rencontrées : erreur d'insertion due à une valeur trop longue (contrôle 2015) ; deux anomalies dans le contenu de deux tables, clé dupliquée et service inexistant (contrôle 2016) ; type de contrainte d'une clause ON DELETE CASCADE, CHECK ou PRIMARY KEY (contrôle 2019) ; V/F justifié par la clause de la création (principale 2020) ; rôle de l'intégrité référentielle et table créée sans clé (contrôle 2021) ; quatre requêtes en erreur (principale 2021) ; tableau contrainte / type de contrainte / champs (principale 2024) ; mots-clés DEFAULT, REFERENCES, NOT NULL, UNIQUE, ON DELETE CASCADE, ALTER TABLE et erreurs d'insertion ligne par ligne (contrôle 2025) ; phrases à compléter : référentielle, composée, de domaine (principale 2025).

Exercices d'entraînement — une nuance à la fois

1 Drill BD-I.1 — clé primaire composée : doublon du couple, répétition d'une seule composante, composante vide
Entraînement 01 / 04

Drill BD-I.1 — clé primaire composée : doublon du couple, répétition d'une seule composante, composante vide

3 questionsCorrigé masqué

Lors d'un tournoi scolaire de handball, les buts marqués sont enregistrés dans la table Participation, créée par la requête suivante. Les tables Joueur et Rencontre existent déjà : elles contiennent les joueurs d'identifiants 7, 12 et 15 et les rencontres d'identifiants 1, 2 et 3.

CREATE TABLE Participation (
  idJoueur INT,
  idMatch INT,
  buts INT DEFAULT 0 CHECK (buts >= 0),
  CONSTRAINT pkPart
    PRIMARY KEY (idJoueur, idMatch),
  FOREIGN KEY (idJoueur)
    REFERENCES Joueur (idJoueur),
  FOREIGN KEY (idMatch)
    REFERENCES Rencontre (idMatch)
);

Contenu actuel de la table Participation :

idJoueuridMatchbuts
713
1215
720

Lignes à insérer, dans l'ordre :

N° ligneidJoueuridMatchbuts
11224
2712
31536
4151
51221
61542

(La case vide de la ligne 4 signifie qu'aucune valeur n'est fournie : NULL.)

  1. Pour chaque ligne, dire si elle est acceptée ou refusée par le SGBD ; en cas de refus, préciser la contrainte d'intégrité non respectée et justifier.
  2. Expliquer, en s'appuyant sur le contenu de la table, pourquoi le champ idJoueur ne pourrait pas être, seul, la clé primaire de Participation.
  3. Combien de lignes la table Participation contient-elle après ces insertions ?
Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : avec une clé composée, c'est le couple (idJoueur, idMatch) qui ne doit pas se répéter ; chacune des deux valeurs peut réapparaître seule. Aucune composante de la clé ne peut rester vide.

  • Ligne 1 : acceptée ; 12 et 2 existent déjà séparément, mais le couple (12, 2) est nouveau.
  • Ligne 2 : refusée, intégrité de table (clé primaire) : le couple (7, 1) existe déjà.
  • Ligne 3 : acceptée.
  • Ligne 4 : refusée, intégrité de table (clé primaire) : idMatch fait partie de la clé primaire et ne peut pas être NULL.
  • Ligne 5 : refusée, intégrité de table (clé primaire) : le couple (12, 2) vient d'être inséré à la ligne 1.
  • Ligne 6 : refusée, intégrité référentielle : la rencontre 4 n'existe pas dans la table Rencontre.

2. Le joueur 7 a déjà deux lignes (rencontres 1 et 2) : un joueur participe à plusieurs rencontres, idJoueur se répète donc et ne peut pas identifier seul une ligne.

3. Trois lignes initiales et deux lignes acceptées (1 et 3) : 5\boxed{5} lignes.

2 Drill BD-I.2 — données déjà saisies : doublon de clé et référence orpheline
Entraînement 02 / 04

Drill BD-I.2 — données déjà saisies : doublon de clé et référence orpheline

4 questionsCorrigé masqué

Le lycée pilote de Gafsa gère le matériel de ses laboratoires avec deux tables, Laboratoire ( codeLab , nomLab , etage ) et Equipement ( numEq , desEq , dateAchat , codeLab# ). Elles ont été remplies par import d'un ancien tableur, avant la déclaration des contraintes d'intégrité. Voici leur contenu :

codeLabnomLabetage
L1Physique1
L2Chimie1
L3SVT2
L4Informatique2
numEqdesEqdateAchatcodeLab
1001Oscilloscope numérique2019-10-02L1
1002Microscope binoculaire2020-01-15L3
1003Vidéoprojecteur2021-09-20L4
1002Balance de précision2022-03-11L2
1005Carte Arduino Uno2023-11-06L5
1006Générateur BF2024-02-28L1
  1. Analyser le contenu des deux tables afin d'identifier les deux anomalies présentes et, pour chacune, la contrainte d'intégrité non respectée.
  2. La balance de précision doit recevoir le numéro 1004, encore libre. Écrire la requête correspondante.
  3. La carte Arduino Uno se trouve en réalité au laboratoire d'Informatique. Écrire la requête correspondante.
  4. Les corrections faites, les contraintes sont déclarées : clé primaire de chaque table et clé étrangère codeLab, sans autre option. Expliquer pourquoi la requête DELETE FROM Laboratoire WHERE codeLab = 'L2'; est alors refusée.
Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : chercher dans Equipement une valeur de clé primaire répétée, puis une valeur de codeLab absente de Laboratoire.

Anomalie détectéeContrainte d'intégrité non respectée
Le numéro 1002 est attribué à deux équipements (microscope et balance).Intégrité de table (unicité de la clé primaire numEq)
La carte Arduino Uno (1005) est rattachée au laboratoire L5, absent de la table Laboratoire.Intégrité référentielle (clé étrangère codeLab)

2. Idée : WHERE numEq = 1002 toucherait les deux lignes, microscope compris : il faut une condition qui ne vise que la balance.

UPDATE Equipement SET numEq = 1004
WHERE desEq = 'Balance de précision';

3. Le numéro 1005 est désormais unique, il suffit à désigner la ligne :

UPDATE Equipement SET codeLab = 'L4'
WHERE numEq = 1005;

4. La balance (1004) est rattachée au laboratoire L2 : la supprimer rendrait sa clé étrangère orpheline. Sans ON DELETE CASCADE, le SGBD refuse la suppression (intégrité référentielle).

3 Drill BD-I.3 — CHECK : valeur hors liste, bornes de BETWEEN, inégalité stricte, UPDATE refusé en bloc
Entraînement 03 / 04

Drill BD-I.3 — CHECK : valeur hors liste, bornes de BETWEEN, inégalité stricte, UPDATE refusé en bloc

2 questionsCorrigé masqué

Un hôtel de Tabarka enregistre ses chambres dans la table Chambre créée par la requête suivante (prixNuit en dinars) :

CREATE TABLE Chambre (
  numCh INT PRIMARY KEY,
  typeCh VARCHAR(10) NOT NULL
    CHECK (typeCh IN ('Single', 'Double',
                      'Suite')),
  etage INT CHECK (etage BETWEEN 0 AND 6),
  prixNuit DECIMAL(6,3) CHECK (prixNuit > 0)
);

Contenu actuel de la table :

numChtypeChetageprixNuit
101Single195.000
102Double1140.000
201Suite2260.000
202Single2110.000

Lignes à insérer, dans l'ordre :

N° lignenumChtypeChetageprixNuit
1601Double6150.000
2305Triple3180.000
3701Suite7300.000
410Single00.000
5203Double2135.500

Requêtes de la question 2, exécutées dans cet ordre après les insertions :

-- a)
UPDATE Chambre SET prixNuit = prixNuit - 100
WHERE typeCh = 'Single';
-- b)
UPDATE Chambre SET prixNuit = prixNuit * 0.9
WHERE typeCh = 'Suite';
  1. Pour chaque ligne, dire si elle est acceptée ; en cas de refus, préciser le champ et la contrainte d'intégrité non respectée.
  2. Pour chacune des requêtes a) et b), dire si elle est exécutée ou refusée ; donner ensuite le prix de chaque chambre de type « Single » et de type « Suite ».
Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : tester chaque valeur contre sa clause CHECK : IN exige une valeur de la liste, BETWEEN inclut ses deux bornes, > 0 exclut 0.

  • Ligne 1 : acceptée ; l'étage 6 est une borne de BETWEEN 0 AND 6, donc autorisé.
  • Ligne 2 : refusée, champ typeCh, intégrité de domaine : « Triple » n'est pas dans la liste.
  • Ligne 3 : refusée, champ etage, intégrité de domaine : 7 dépasse 6.
  • Ligne 4 : refusée, champ prixNuit, intégrité de domaine : 0 n'est pas strictement positif (l'étage 0, lui, est autorisé).
  • Ligne 5 : acceptée.

2.a Idée : une mise à jour est vérifiée ligne par ligne ; si une seule ligne viole la contrainte, toute la requête est annulée.

La chambre 101 passerait à 95−100=−595 - 100 = -5 dinars : la requête a) est refusée (CHECK (prixNuit > 0)). La chambre 202 n'est donc pas modifiée non plus ; les chambres Single restent à 95,000 et 110,000 dinars.

2.b Exécutée : la seule suite (201) passe à 260×0,9=234,000 D260 \times 0{,}9 = \boxed{234{,}000\text{ D}}, valeur positive.

4 Drill BD-I.4 — champ obligatoire : NOT NULL, DEFAULT et NULL explicite
Entraînement 04 / 04

Drill BD-I.4 — champ obligatoire : NOT NULL, DEFAULT et NULL explicite

3 questionsCorrigé masqué

Un club sportif de Monastir enregistre ses adhérents dans la table Adherent créée par la requête suivante (categorie : « J » pour junior, « S » pour senior). Elle contient déjà les adhérents numérotés de 1 à 57.

CREATE TABLE Adherent (
  numAdh INT PRIMARY KEY,
  nomAdh VARCHAR(40) NOT NULL,
  telAdh CHAR(8),
  categorie CHAR(1) NOT NULL DEFAULT 'J',
  dateInsc DATE NOT NULL
);

Requêtes à examiner, chacune exécutée sur la table dans son état initial :

-- a)
INSERT INTO Adherent (numAdh, nomAdh,
                      dateInsc)
VALUES (58, 'Kefi Amira', '2025-09-15');
-- b)
INSERT INTO Adherent (numAdh, telAdh,
                      categorie, dateInsc)
VALUES (59, '24681357', 'S', '2025-09-15');
-- c)
INSERT INTO Adherent
VALUES (60, 'Mejri Aziz', '53124578',
        NULL, '2025-09-16');
-- d)
INSERT INTO Adherent (numAdh, nomAdh,
                      telAdh, dateInsc)
VALUES (61, 'Ouni Salma', NULL,
        '2025-09-16');
  1. Pour chaque requête, dire si elle est acceptée ou refusée ; en cas de refus, préciser le champ et la contrainte d'intégrité non respectée.
  2. Pour chaque requête acceptée, donner la ligne enregistrée (valeurs des cinq champs).
  3. Réécrire la requête c) pour qu'elle soit acceptée et que l'adhérent reçoive la catégorie par défaut.
Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : une colonne absente de la liste reçoit sa valeur par défaut, ou NULL si elle n'en a pas ; NULL est refusé dans une colonne NOT NULL, même quand elle a un DEFAULT, si on l'écrit explicitement.

  • a) Acceptée : telAdh reçoit NULL, categorie reçoit « J ».
  • b) Refusée, champ nomAdh, intégrité de domaine : NOT NULL sans valeur par défaut, le nom est obligatoire.
  • c) Refusée, champ categorie, intégrité de domaine : la valeur NULL est écrite ; DEFAULT ne s'applique que si la colonne est omise.
  • d) Acceptée : telAdh accepte NULL, categorie prend « J ».

2.

numAdhnomAdhtelAdhcategoriedateInsc
58Kefi AmiraNULLJ2025-09-15
61Ouni SalmaNULLJ2025-09-16

3. Idée : omettre categorie dans la liste des colonnes pour que DEFAULT s'applique.

INSERT INTO Adherent (numAdh, nomAdh,
                      telAdh, dateInsc)
VALUES (60, 'Mejri Aziz', '53124578',
        '2025-09-16');

Relier ce raisonnement au bac

Choisis une filière pour voir les sujets qui étayent ce scénario.