Aller au contenu
Apprendre.
  • M1 · toutes les matières15 matières : Préparation de données, API & sécurité, CI/CD, Docker, Merise, Dataviz, KNIME, ML appliqué : projet LoL, SQL & UML, SQL avancé, Machine Learning, Git, IA frugale & responsable, Qualité des données, MathématiquesAnnée
  • M2 · toutes les matières4 matières : Deep Learning, AI Act, Comex & Fundraising, Gouvernance & DataMeshAnnée
  • Deep LearningM2 · 4 modules · Réseaux de neurones, CNN, texte, modèles génératifs.Matière
  • Préparation de donnéesM1 · 3 modules · Nettoyer, transformer et fusionner des données avec Python.Matière
  • API & sécuritéM1 · 2 modules · Consommer, concevoir et sécuriser des API.Matière
  • CI/CDM1 · 1 module · Intégration et livraison continues.Matière
  • DockerM1 · 3 modules · Conteneurs, images, volumes, réseaux, Compose.Matière
  • MeriseM1 · 2 modules · Modéliser une base : MCD, MLD, MPD.Matière
  • DatavizM1 · 2 modules · Visualiser pour comprendre et décider.Matière
  • KNIMEM1 · 1 module · Explorer et nettoyer des données en workflow.Matière
  • ML appliqué : projet LoLM1 · 2 modules · Du besoin métier au POC de vision par ordinateur.Matière
  • SQL & UMLM1 · 3 modules · Modèles UML et requêtes SQL.Matière
  • SQL avancéM1 · 3 modules · Jointures, fenêtres, CTE, optimisation.Matière
  • Machine LearningM1 · 3 modules · Régression, classification, segmentation, projet.Matière

↑↓ naviguer↵ ouvre le résultat en surbrillanceesc fermer

Partie 1 · Le cas

Le cas unitee et le modèle de données

Seconde moitié du cours : une étude de cas (« Veille automatisée des marchés publics, secteur bâtiment modulaire, bâtiment en kit et assemblage rapide », SQL avancé : procédures, fonctions, triggers, transactions, sauvegarde, automatisation). L'entreprise unitee conçoit, assemble et déploie des bâtiments modulaires, des structures préfabriquées, des bases vie de chantier, des classes temporaires et des extensions rapides pour des clients publics et parapublics.

Aujourd'hui la veille est manuelle : plusieurs collaborateurs consultent différents portails, ce qui provoque des pertes de temps, des doublons, des oublis et une qualification irrégulière. La direction veut une base relationnelle qui centralise les annonces, calcule un niveau de pertinence, suit les événements techniques, déclenche des notifications et produit un tableau de bord. Elle ne veut pas « un simple ensemble de tables » mais un système SQL robuste, industrialisable et supervisable.

Ce que le système doit faire : récupérer des annonces depuis plusieurs sources ; détecter et empêcher les doublons ; évaluer les marchés selon des critères métier ; générer une alerte e-mail pour les opportunités critiques ; laisser une trace de toute opération importante ; prévoir une sauvegarde complète ; fournir un dashboard.

Remarque : le cours ne fixe pas de SGBD (il évoque ENUM, LONGTEXT, DATETIME, DECIMAL). Les exercices de ce site tournent sur SQLite : la syntaxe est parfois adaptée (exemple ajouté).

Les cinq volets

VoletObjectifDétails attendus
Collecterecevoir ou intégrer de nouvelles annoncesAPI, scraping, flux RSS ; planification via CRON ; formats JSON, XML, HTML ; déduplication initiale
Qualificationévaluer et prioriser selon la pertinencescore (mots-clés, montant, localisation) ; niveau faible, moyen, élevé ; stockage du score
Traçabilitésuivi complet des actions techniques et métierlogs techniques (erreurs, appels API) ; logs métier (qualification, modification) ; historisation ; auditabilité
Sauvegardesécurité et restauration des donnéessauvegardes automatiques quotidiennes/hebdomadaires ; export SQL ou dump ; versionning ; stockage externe possible
Pilotageanalyser et suivre via des indicateursdashboard (graphiques, KPI) ; statistiques ; filtres ; historique et tendances

Vérifie que tu as compris

Quel volet du cas est chargé de l'« auditabilité » et de l'historisation des changements ?

Données et modélisation

Chaque annonce peut contenir : identifiant externe (VARCHAR(100), pas forcément unique globalement : à utiliser avec la source, clé composite), source (table référentiel recommandée), titre (VARCHAR(255), index pour recherche rapide), résumé (TEXT, peut être NULL), description détaillée (LONGTEXT), acheteur public (normalisation possible : table acheteur), localisation (VARCHAR(150), peut être découpée en ville, département, région), date de publication (DATETIME, index important), date limite de réponse (DATETIME, permet des alertes), budget estimatif (DECIMAL(15,2), peut être NULL), lien source (TEXT, doit être unique si possible), mots-clés détectés (idéalement table mot_cle + relation N:N), statut de traitement (ENUM ou VARCHAR(50), ex : NEW, QUALIFIED, IGNORED, RESPONDED).

La partie modélisation demande : identifier les entités, proposer tables principales et tables de support, définir clés primaires et étrangères, préciser les contraintes d'unicité pertinentes, proposer une stratégie d'indexation minimale, et justifier les tables techniques de logs, notifications et sauvegardes. Le schéma doit servir à la fois l'exploitation métier et la supervision technique.

À toi de coder

Empêcher les doublons : clé composite (source, identifiant externe)

Cas unitee : une même annonce peut être relayée par plusieurs sources, et l'identifiant externe n'est pas unique globalement : on l'utilise avec la source (clé composite). Les doublons doivent être détectés et empêchés.

Complète la contrainte d'unicité sur (source_id, ext_id) et utilise l'insertion qui ignore les doublons. Le même X1 venant de deux sources différentes doit être conservé deux fois ; le doublon exact (même source, même X1) doit être ignoré. (Syntaxe SQLite : exemple adapté ; le cours ne fixe pas le SGBD.)

Ctrl/⌘+Entrée

À toi de coder

Indexer la date de publication

Le cas précise que la date de publication est un « index important » (et le titre : index pour recherche rapide). Un index évite de parcourir toute la table. EXPLAIN QUERY PLAN (SQLite) montre ce que le moteur compte faire.

Complète la création de l'index idx_marche_date sur date_pub. Le plan avant l'index parcourt la table (SCAN), le plan après utilise l'index.

Ctrl/⌘+Entrée