Sql - Gestion De Projets

Excellent ! Vous êtes motivé(e) ! Voici un autre exercice complet de SQL (SQLite), cette fois-ci axé sur la gestion d’un système de suivi de projets. Préparez-vous, il y aura beaucoup de questions !

1. Modèle Logique des Données (MLD) en ER Diagram

erDiagram
    PROJET ||--o{ TACHE : contient
    EMPLOYE ||--o{ PARTICIPATION : participe_a
    PROJET ||--o{ PARTICIPATION : concerne
    TACHE ||--o{ DEPENDANCE : est_predecesseur_de
    TACHE ||--o{ DEPENDANCE : est_successeur_de
    EMPLOYE ||--o{ AFFECTATION : est_assigne_a
    TACHE ||--o{ AFFECTATION : concerne
    PROJET {
        INTEGER id_projet PK
        VARCHAR nom_projet
        DATE date_debut
        DATE date_fin_prevue
        DATE date_fin_reelle
        VARCHAR statut
    }
    TACHE {
        INTEGER id_tache PK
        VARCHAR nom_tache
        TEXT description
        DATE date_debut_prevue
        DATE date_fin_prevue
        DATE date_fin_reelle
        INTEGER id_projet FK
        INTEGER priorite
        VARCHAR statut
    }
    EMPLOYE {
        INTEGER id_employe PK
        VARCHAR nom
        VARCHAR prenom
        VARCHAR email
        VARCHAR telephone
        VARCHAR poste
    }
    PARTICIPATION {
        INTEGER id_participation PK
        INTEGER id_employe FK
        INTEGER id_projet FK
        VARCHAR role
        DATE date_debut_participation
        DATE date_fin_participation
    }
    DEPENDANCE {
        INTEGER id_dependance PK
        INTEGER id_tache_predecesseur FK
        INTEGER id_tache_successeur FK
        VARCHAR type_dependance
    }
    AFFECTATION {
        INTEGER id_affectation PK
        INTEGER id_employe FK
        INTEGER id_tache FK
        DATE date_debut_affectation
        DATE date_fin_affectation
        FLOAT taux_effort
    }

2. Création de la Base de Données et des Tables (À faire par vous)

Créez une nouvelle base de données nommée gestion_projets.db et exécutez les instructions SQL pour créer les tables basées sur le diagramme ER ci-dessus. Définissez soigneusement les clés primaires et étrangères.

3. Insertion de Données (Instructions et Données)

Insérez les données suivantes dans les tables que vous avez créées.

Table PROJET:

id_projetnom_projetdate_debutdate_fin_prevuedate_fin_reellestatut
1Refonte du site web2024-05-012024-08-312024-09-15Terminé
2Développement application mobile2024-07-152025-01-31NULLEn cours
3Lancement nouveau produit2025-01-012025-06-30NULLPlanifié
4Campagne marketing Q32025-07-012025-09-30NULLPlanifié

Table TACHE:

id_tachenom_tachedescriptiondate_debut_prevuedate_fin_prevuedate_fin_reelleid_projetprioritestatut
1Analyse des besoinsRecueillir et analyser les besoins des utilisateurs2024-05-012024-05-152024-05-1211Terminé
2Conception de l’interfaceCréer les maquettes et les wireframes2024-05-162024-06-152024-06-2012Terminé
3Développement front-endImplémenter l’interface utilisateur2024-06-162024-07-312024-08-1012Terminé
4Développement back-endCréer la logique serveur et la base de données2024-06-162024-08-152024-09-0112Terminé
5Tests et validationTester l’application et corriger les bugs2024-08-012024-08-312024-09-1511Terminé
6Conception des écransCréer les maquettes pour l’application mobile2024-07-152024-08-30NULL21En cours
7Développement iOSDévelopper la version iOS de l’application2024-09-012024-12-15NULL22À faire
8Développement AndroidDévelopper la version Android de l’application2024-09-012024-12-15NULL22À faire
9Tests application mobileTester les versions iOS et Android2024-12-162025-01-31NULL21À faire
10Étude de marchéAnalyser le marché pour le nouveau produit2025-01-012025-02-282025-02-2531Terminé
11Développement du produitCréer et prototyper le nouveau produit2025-03-012025-05-31NULL32En cours
12Préparation du lancementPlanifier la logistique et la communication2025-05-012025-06-30NULL31Planifié
13Définition des objectifsFixer les buts de la campagne marketing2025-07-012025-07-15NULL41Planifié
14Création des supports marketingConcevoir les visuels et les textes2025-07-162025-08-15NULL42Planifié
15Lancement de la campagneDiffuser les supports sur les canaux choisis2025-08-162025-09-30NULL41Planifié

Table EMPLOYE:

id_employenomprenomemailtelephoneposte
1DuboisMarie[adresse e-mail supprimée]06 11 22 33 44Chef de projet
2LefevrePierre[adresse e-mail supprimée]07 55 66 77 88Développeur front-end
3GarciaSophie[adresse e-mail supprimée]06 99 88 77 66Développeur back-end
4ChenLi[adresse e-mail supprimée]07 12 34 56 78Designer UI/UX
5RossiAntoine[adresse e-mail supprimée]06 44 33 22 11Testeur QA
6MoreauIsabelle[adresse e-mail supprimée]07 88 99 00 11Responsable marketing

Table PARTICIPATION:

id_participationid_employeid_projetroledate_debut_participationdate_fin_participation
111Chef de projet2024-05-012024-09-15
221Développeur front2024-06-162024-08-10
331Développeur back2024-06-162024-09-01
441Designer UI/UX2024-05-162024-06-20
551Testeur QA2024-08-012024-09-15
612Chef de projet2024-07-15NULL
742Designer UI/UX2024-07-152024-08-30
822Développeur iOS2024-09-012024-12-15
932Développeur Android2024-09-012024-12-15
1052Testeur QA2024-12-162025-01-31
1113Chef de projet2025-01-01NULL
1243Designer UI/UX2025-03-012025-05-31
1323Développeur produit2025-03-012025-05-31
1464Responsable2025-07-01NULL
1544Créateur contenu2025-07-162025-08-15

Table DEPENDANCE:

id_dependanceid_tache_predecesseurid_tache_successeurtype_dependance
112Fin à Début
223Fin à Début
324Fin à Début
435Fin à Début
545Fin à Début
667Fin à Début
768Fin à Début
879Fin à Début
989Fin à Début
101011Fin à Début
111112Fin à Début
121314Fin à Début
131415Fin à Début

Table AFFECTATION:

id_affectationid_employeid_tachedate_debut_affectationdate_fin_affectationtaux_effort
1232024-06-162024-07-310.8
2342024-06-162024-08-151.0
3552024-08-012024-09-150.5
4462024-07-152024-08-300.75
5272024-09-012024-12-150.9
6382024-09-012024-12-150.9
7592024-12-162025-01-310.6
82112025-03-012025-05-311.0
96152025-08-162025-09-300.5
104142025-07-162025-08-150.8

Instructions pour l’insertion (À faire par vous) :

Utilisez l’instruction INSERT INTO pour ajouter toutes ces données dans les tables correspondantes. Soyez patient(e), il y en a beaucoup !

4. Requêtes SQL (Plus de 100 !) (À faire par vous)

Accrochez-vous, voici une longue liste de requêtes SQL pour explorer votre base de données de gestion de projets.

Requêtes Simples (SELECT, FROM, WHERE):

  1. Affichez tous les projets.
  2. Affichez les noms des projets.
  3. Affichez les tâches du projet ‘Refonte du site web’.
  4. Affichez les employés dont le poste est ‘Développeur front-end’.
  5. Affichez les participations au projet ‘Développement application mobile’.
  6. Affichez les dépendances où le type est ‘Fin à Début’.
  7. Affichez les affectations de la tâche ‘Développement front-end’.
  8. Affichez les projets dont la date de fin prévue est en 2025.
  9. Affichez les tâches dont la priorité est 1.
  10. Affichez les employés dont le prénom commence par ‘M’
  11. Affichez les tâches dont le statut est ‘Terminé’.
  12. Affichez les employés avec leur email.
  13. Affichez les projets dont la date de début est antérieure à 2025-01-01.
  14. Affichez les tâches dont la date de fin réelle est NULL (en cours ou non terminée).
  15. Affichez les participations où le rôle est ‘Chef de projet’.
  16. Affichez les dépendances où la tâche prédécesseur a l’ID 1.
  17. Affichez les affectations avec un taux d’effort supérieur à 0.7.
  18. Affichez les projets dont le nom contient le mot ‘application’.
  19. Affichez les tâches triées par date de début prévue.
  20. Affichez les employés triés par nom.

Requêtes avec JOIN (INNER JOIN):

  1. Affichez les noms des projets et les noms de leurs tâches.
  2. Affichez les noms des employés et les projets auxquels ils participent.
  3. Affichez les noms des tâches et les employés qui y sont affectés.
  4. Affichez les noms des tâches et leurs tâches prédécesseurs.
  5. Affichez les noms des projets et le nombre de tâches qu’ils contiennent.
  6. Affichez les noms des employés et le nombre de projets auxquels ils participent.
  7. Affichez les noms des tâches et le nombre d’employés qui y sont affectés.
  8. Affichez les noms des projets et les chefs de projet associés (via la table PARTICIPATION).
  9. Affichez les noms des tâches et les noms des employés affectés, avec leur taux d’effort.
  10. Affichez les noms des projets et les dates de début et de fin de participation des employés.
  11. Affichez les noms des tâches et le type de dépendance avec leur prédécesseur.
  12. Affichez les noms des employés et les tâches auxquelles ils sont affectés, avec les dates de début et de fin d’affectation.
  13. Affichez les noms des projets et le nombre de participants pour chaque projet.
  14. Affichez les noms des employés et le nombre de tâches auxquelles ils sont affectés.
  15. Affichez les noms des tâches et le nombre de dépendances entrantes (celles qui en dépendent).
  16. Affichez les noms des projets terminés et leur date de fin réelle.
  17. Affichez les noms des employés et leur poste pour le projet ‘Refonte du site web’.
  18. Affichez les noms des tâches avec une priorité de 1 pour le projet ‘Développement application mobile’.
  19. Affichez les noms des employés affectés aux tâches dont le statut est ‘En cours’.
  20. Affichez les noms des projets avec au moins une tâche dont la date de fin réelle est NULL.

Requêtes avec fonctions d’agrégation (COUNT, SUM, AVG, MIN, MAX) et GROUP BY, HAVING:

  1. Comptez le nombre total de projets.
  2. Comptez le nombre total de tâches.
  3. Comptez le nombre total d’employés.
  4. Comptez le nombre de tâches par projet.
  5. Comptez le nombre d’employés par poste.
  6. Comptez le nombre de participations par projet.
  7. Comptez le nombre d’affectations par tâche.
  8. Trouvez le projet avec le plus grand nombre de tâches.
  9. Trouvez l’employé participant au plus grand nombre de projets.
  10. Trouvez la tâche avec le plus grand nombre d’employés affectés.
  11. Calculez le taux d’effort moyen par tâche.
  12. Trouvez le taux d’effort maximal et minimal dans les affectations.
  13. Affichez les projets avec plus de 5 tâches (si c’était le cas avec plus de données).
  14. Affichez les postes avec plus de 2 employés.
  15. Calculez le nombre moyen de participants par projet.
  16. Trouvez la priorité la plus élevée et la plus basse parmi toutes les tâches.
  17. Comptez le nombre de projets dont le statut est ‘Terminé’, ‘En cours’ et ‘Planifié’.
  18. Trouvez la date de début la plus ancienne et la date de fin prévue la plus tardive parmi tous les projets.
  19. Calculez le taux d’effort total par employé pour un projet spécifique (par exemple, le projet ID 1).
  20. Affichez les tâches dont le nombre d’affectations est supérieur à 1.

Requêtes avec LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN (si supporté):

  1. Affichez tous les projets et leurs tâches (même les projets sans tâches).
  2. Affichez toutes les tâches et les projets auxquels elles appartiennent (même les tâches sans projet - peu probable).
  3. Affichez tous les employés et leurs participations aux projets (même les employés sans participation).
  4. Affichez tous les projets et les employés y participant (même les projets sans participant).
  5. Affichez toutes les tâches et leurs prédécesseurs (même les tâches sans prédécesseur).
  6. Affichez toutes les tâches et leurs successeurs (même les tâches sans successeur).
  7. Affichez tous les employés et les tâches auxquelles ils sont affectés (même les employés sans affectation).
  8. Affichez toutes les tâches et les employés affectés (même les tâches sans affectation).
  9. Trouvez les employés qui ne sont affectés à aucune tâche.
  10. Trouvez les projets qui n’ont aucun employé participant.

Requêtes avec sous-requêtes:

  1. Affichez les tâches du projet dont le nom est ‘Refonte du site web’.
  2. Affichez les employés qui participent à au moins un projet dont le statut est ‘En cours’.
  3. Affichez les tâches qui ont une priorité supérieure à la priorité moyenne de toutes les tâches.
  4. Affichez les projets dont la date de fin prévue est la plus tardive.
  5. Affichez les employés qui sont affectés à la tâche nommée ‘Tests et validation’.
  6. Affichez les tâches qui ont au moins une dépendance.
  7. Affichez les employés dont le poste est le même que celui de l’employé ‘Dubois Marie’.
  8. Affichez les projets qui ont une date de fin réelle antérieure à leur date de fin prévue.
  9. Affichez les tâches qui n’ont aucune affectation.
  10. Affichez les employés qui participent à tous les projets (requête complexe).

Requêtes de modification de données (UPDATE, DELETE):

  1. Mettez à jour le statut du projet ‘Développement application mobile’ à ‘En pause’.
  2. Augmentez la priorité de toutes les tâches du projet ‘Lancement nouveau produit’ de 1.
  3. Modifiez la date de fin réelle de la tâche ‘Tests et validation’ à ‘2024-09-20’.
  4. Supprimez l’affectation de l’employé ‘Rossi Antoine’ à la tâche ‘Tests et validation’.
  5. Supprimez toutes les tâches du projet ‘Campagne marketing Q3’ dont le statut est ‘Planifié’.
  6. Ajoutez un nouvel employé : ‘Dupont’, ‘Paul’, ‘[adresse e-mail supprimée]’, ‘06 00 00 00 00’, ‘Développeur full-stack’.
  7. Mettez à jour le rôle de l’employé ‘Dubois Marie’ dans le projet ‘Développement application mobile’ à ‘Responsable de projet’.
  8. Réduisez le taux d’effort de toutes les affectations de 0.1.
  9. Supprimez toutes les participations terminées avant ‘2025-01-01’.
  10. Mettez à jour la date de début de tous les projets de 7 jours.

Requêtes avancées (Vues, Index, etc.):

  1. Créez une vue nommée Vue_Projets_Termines affichant le nom et la date de fin réelle des projets terminés.
  2. Sélectionnez toutes les données de la vue Vue_Projets_Termines.
  3. Créez une vue nommée Vue_Employes_Projets affichant le nom complet de l’employé et le nom du projet auquel il participe.
  4. Sélectionnez toutes les données de la vue Vue_Employes_Projets.
  5. Créez un index sur la colonne nom_projet de la table PROJET.
  6. Créez un index sur la colonne id_employe et id_projet de la table PARTICIPATION.
  7. Expliquez comment vous optimiseriez une requête qui joint les tables PROJET, TACHE et AFFECTATION pour trouver les employés travaillant sur des tâches en cours.
  8. Écrivez une requête qui utilise une fonction de fenêtre (si supportée par SQLite) pour classer les tâches par priorité au sein de chaque projet.
  9. Écrivez une requête récursive (si supportée par SQLite avec une extension) pour afficher l’arborescence des dépendances d’une tâche donnée.
  10. Trouvez les projets dont toutes les tâches sont terminées.
  11. Trouvez les employés qui sont affectés à au moins deux tâches différentes dans le même projet.
  12. Calculez la durée (en jours) de chaque projet (différence entre date de fin prévue et date de début).
  13. Trouvez le projet avec la durée moyenne des tâches la plus longue.
  14. Identifiez les tâches critiques (celles qui ont au moins une dépendance successeur).
  15. Trouvez les employés qui n’ont participé à aucun projet terminé.

Voilà ! Plus de 100 requêtes pour vous occuper un moment. N’hésitez pas si vous avez des questions sur la structure ou l’insertion des données. Bon courage pour l’exécution de toutes ces requêtes !