2.2 - Laboratoire 2 đź””


Implémentation SQL - 10% individuel

Remise: Lundi 30 janvier, 8h00

À partir d'une mise en contexte sommaire, vous devez implémenter une base de données qui assure l'intégrité de l'information stockée. Votre livrable est composé de 2 scripts SQL:

  • init.sql mise en place la base de donnĂ©es, insertion de donnĂ©es de dĂ©part
    • doit pouvoir ĂŞtre exĂ©cutĂ© plusieurs fois, sur une BD arbitraire
  • tests.sql dĂ©montre le fonctionnement des spĂ©cifications demandĂ©es par diverses requĂŞtes SQL
    • Chaque fonctionnalitĂ© et les commandes SQL de test correspondantes est clairement identifiĂ©e

Contexte

Une entreprise utilise actuellement un système de gestion de projet rudimentaire avec MySQL et souhaite améliorer sa méthodologie de travail en plus de migrer vers MariaDB.

Voici le modèle visé par l'entreprise(les entitées sous la ligne pointillée sont à implémenter):

  +-----------------------------------+                    +--------------------------------+
  |              users                |                    |         users_projects         |
  +-----------------------------------+                    +--------------------------------+
  | PK id: int                        | 1                * | PK,FK user_id: int             |
  | firstname: string(50)             +--------------------+ PK,FK project_id: int          |
  | lastname: string(50)              |                    | join_date: date                |
  | fullname: string(101) [GENERATED] |                    +----------------+---------------+
  | email: string(50)                 |                                     |
  | password: string(64) [SHA256]     |                                     |*
  +-------+-------+-------------------+                                     |
          |       |                                                         |1
          | 1     |1                                                        |
          |       |                                            +------------+-------------+
          |       |                                            |         projects         |
          |       |                                            +--------------------------+
          |       |                                            | PK id: int               |
          |       |                                            | name: string(50)         |
          |       |                                            | description: string(300) |
          |       |                                          * | creation_date: date      |
          |       +--------------------------------------------+ FK owner: int            |
          |                                                    |                          |
          |                                                    +------------+-------------+
          |                                                                 |
          |                                                                1|
          |                                                                 |
+------------------------------------------------------------------------------------------------+
          |                                                                 |
          |                          +----------------------+               |
          |                          |         tasks        |               |
          |                          +----------------------+               |
          |                          | PK id: int           |               |
          |                          | name: string(50)     |               |
          |                          | comment: string(300) |               |
          |                          | hours_estimate: int  | *             |
          |                        * | FK project_id: int   +---------------+
          +--------------------------+ FK user_id: int      |
                                     +----------+-----------+
                                                |
                                                | 1
                                                |
                                                | *
                                                |
                                  +-------------+--------------+
                                  |         worktimes          |
                                  +----------------------------+
                                  | PK id: int                 |
                                  | message: string(100)       |
                                  | begin: datetime            |
                                  | end: datetime              |
                                  | duration: int [GENERATED]  |
                                  | FK task_id: int            |
                                  +----------------------------+

Spécifications

Les spécifications requises sont les suivantes:

  • users_projects
    • On ne peut pas ajouter un utilisateur en tant que collaborateur s'il est le propriĂ©taire du projet
    • La date d'inscription du collaborateur ne peut pas prĂ©cĂ©der la date de crĂ©ation du projet
  • projects
    • La date de crĂ©ation du projet ne peut pas ĂŞtre dans le futur
    • Le nom ne peut pas ĂŞtre vide, incluant les espaces
  • tasks
    • Le nombre d'heures estimĂ© doit ĂŞtre supĂ©rieur ou Ă©gal Ă  1
    • On doit pouvoir faire une recherche textuelle avancĂ©e(avec opĂ©rateurs) sur le nom ET le commentaire
    • l'utilisateur doit faire partie des membres du projet(crĂ©ateur ou participant)
  • worktimes
    • le temps de fin doit ĂŞtre supĂ©rieur au temps de dĂ©but
    • la durĂ©e est l'interval de temps entre le dĂ©but et la fin en heures, arrondie Ă  l'heure supĂ©rieure
  • Un mĂ©canisme rĂ©utilisable doit calculer le temps investi dans un projet par chacun des membres
  • Un mĂ©canisme rĂ©utilisable doit produire le rapport des projets: champs pertinents du projet, identification explicite du crĂ©ateur, identification explicite de l'utilisateur le plus investi et du nombre d'heures, liste des membres, nombre total d'heures travaillĂ©es sur le projet, nombre total d'heures estimĂ©es sur le projet, pourcentage de complĂ©tion(heure travaillĂ©es/heures estimĂ©es)
  • La suppression d'une entitĂ©e doit entraĂ®ner la suppression des enregistrements associĂ©s
  • Pour chaque spĂ©cification, vous devez fournir les requĂŞtes SQL suffisantes pour en dĂ©montrer le fonctionnement(dans le fichier tests.sql)

MĂ©thodologie

J'agirai en tant que chargé de projet pour répondre à vos questions dans le but de préciser l'analyse sommaire fournie et orienter la résolution de vos défis techniques.

ATTENTION

  • Retirer les mentions du schĂ©ma de votre script SQL pour permettre l'exĂ©cution sur n'importe quelle base de donnĂ©es.
  • Si vous gĂ©nĂ©rez un script Ă  partir de Workbench, MariaDB ne supporte pas l'attribut VISIBLE pour les index.

Modalités d’évaluation

Une pénalité de 10% sera appliquée à la note du travail pour chaque jour de retard à la remise.

Instructions de remise

Vous devez remettre via LÉA une archive zip contenant vos fichiers init.sql et tests.sql.

Critères d’évaluation

Table tasks 0   1   1.5   2
Table worktimes 0   1   1.5   2
Insertions de données suffisantes 0   1   1.5   2
Exécution répétée du script d'initialisation 0       2
USERS_PROJECTS: Ajout collaborateur != propriétaire, test 0   1   1.5   2
USERS_PROJECTS: Date inscription collaborateur >= date création, test 0   1   1.5   2
PROJECTS: Date création != futur, test 0   1   1.5   2
PROJECTS: Nom de projet != vide ni espaces, test 0   1   1.5   2
TASKS: Heures estimées >= 1, test 0   1   1.5   2
TASKS: utilisateur membre du projet, test 0   1   1.5   2
TASKS: Recherche textuelle avancée(opérateurs) nom ET commentaire, test 0   1   1.5   2
WORKTIMES: fin > debut, test 0   1   1.5   2
WORKTIMES: durée en heures arrondie à l'heure supérieure, test 0   1   1.5   2
Calcul du temps investi dans un projet par chacun des membres, test 0   1   1.5   2
Sommaire des projets: projet, créateur, utilisateur le plus investi et nombre d'heures, liste des participants, total d'heures travaillées, total d'heures estimées, %complétion(heure travaillées/heures estimées), test 0   2   3   4
Suppression des items associés, test 0   1   1.5   2
Implémentation judicieuse des mécanismes SQL, Qualité de rédaction 0   1   1.5   2
Total / 36

Échelle

0: absent, médiocre | 1: minimal, insatisfaisant | 1.5: bon, satisfaisant | 2: excellent