BUT Informatique study materials
BUT Informatique study resources

BUT Informatique: Gérer des données de l'information

BUT Informatique · Work through your exam, one topic at a time.

All guide sections

Gérer des données de l'information

« Gérer des données de l'information » porte sur la conception et l'interrogation de bases de données : modèle conceptuel, normalisation, SQL, transactions et stockage. L'épreuve teste la rigueur du schéma autant que la justesse des requêtes.

Règles et concepts clés

  • Du MCD au MLD : entités → tables, association many-to-many → table de jonction, clé primaire (unique, non NULL), clé étrangère (intégrité référentielle).
  • Normalisation : 1FN = valeurs atomiques, pas de liste dans une colonne ; 2FN = pas de dépendance à une partie seulement d'une clé composite ; 3FN = pas de dépendance transitive entre attributs non clés. On dénormalise parfois volontairement pour la lecture (table de reporting).
  • SQL : WHERE filtre les lignes avant agrégation, HAVING filtre les groupes après ; COUNT(*) compte les lignes, COUNT(col) ignore les NULL ; les agrégats ignorent NULL ; NULL = NULL vaut UNKNOWN, d'où IS NULL. Un NOT IN sur une sous-requête contenant NULL ne renvoie aucune ligne.
  • Transactions : ACID ; niveaux d'isolation et anomalies associées (lecture sale, lecture non répétable, lignes fantômes).
  • Index, vues, plans d'exécution : un EXPLAIN affichant un Seq Scan sur une grande table signale un index manquant.
  • NoSQL : document (MongoDB), clé-valeur (Redis), colonne large, graphe ; on choisit selon le motif d'accès, pas par mode.
  • RGPD : minimisation, finalité, durée de conservation, droit d'accès et d'effacement.

Exemple travaillé

Tables client(id, ville) et commande(id, client_id, date_cmd, montant). Question : clients de Lyon ayant passé plus de 3 commandes en 2025.

SELECT c.id, c.ville, COUNT(*) AS nb
FROM client c
JOIN commande o ON o.client_id = c.id
WHERE c.ville = 'Lyon'
  AND o.date_cmd >= '2025-01-01'
  AND o.date_cmd <  '2026-01-01'
GROUP BY c.id, c.ville
HAVING COUNT(*) > 3;

Le filtre sur l'année va dans WHERE (il porte sur des lignes), le seuil de commandes dans HAVING (il porte sur un groupe). GROUP BY doit contenir toutes les colonnes non agrégées du SELECT. La borne stricte < '2026-01-01' évite de rater le 31 décembre à 23 h.

Pièges qui coûtent des points

  • Écrire WHERE COUNT(*) > 3 : un agrégat ne se filtre pas dans WHERE.
  • Transformer un LEFT JOIN en INNER JOIN en filtrant la table de droite dans le WHERE.
  • Croire que la 3FN est toujours optimale, même en lecture intensive.
  • Comparer des dates stockées en texte ou ignorer les fuseaux horaires.