Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide pour le design d'une BDD d'une application

    30 avril 2021 à 2:49:27

    Bonjour, bonsoir,

    Je travaille actuellement sur un petit projet perso dans lequel j'aimerais réaliser une application de saisie de notes et je galère à désigner ma base de données car j'ai un peu du mal avec les base de données relationnelles.

    J'aimerais si possible avoir l'avis d'une personne calée sur le sujet histoire d'être sûr que je ne fais pas n'importe quoi.

    Je vous mets ici le MLD que j'ai réalisé :

    J'ajoute également les règles de gestion pour que vous puissiez comprendre comment j'ai raisonné :

    - Un utilisateur(étudiant) possède un ou plusieurs bulletin de notes;

    - Un bulletin de notes appartient à un seul utilisateur;

    - Un bulletin de notes comporte une à plusieurs matières;

    - Une matière est reliée à un ou plusieurs bulletins;

    - Un utilisateur est inscrit dans une seule formation;

    - Un utilisateur est inscrit à une seule spécialité;

    - Une formation comporte une ou plusieurs spécialités;

    - Une spécialité est reliée à une seule formation;

    - Dans une année universitaire, une à plusieurs formation peuvent avoir lieu;

    - Une formation peut être reliée à une ou plusieurs année universitaire;

    Désolé d'avance si les règles de gestion ne sont pas très claires ^^''

    Merci beaucoup pour votre précieuse aide ! 

    -
    Edité par Azixp# 1 mai 2021 à 18:17:19

    • Partager sur Facebook
    • Partager sur Twitter

    Your future self is watching you right now through memories ! 

      30 avril 2021 à 10:12:05

      Bonjour,

      Si tu affectes forcément la spécialité à l'utilisateur, alors pas besoin de lui affecter la formation car elle est induite par la spécialité.

      Normalement on ne stocke pas le résultat d'un calcul en base puisque l'on peut justement le calculer au besoin. Je parle ici de la moyenne sur le bulletin. Si l'on vient à modifier une note, il faudra mettre à jour le bulletin ... Ce qui est plus complexe à gérer et génère un risque d'oubli et de perte de cohérence des données.

      Le bulletin comme tu l'as présenté ici n'est donc pas une entité, mais seulement l'exploitation des données des notes ... Il deviendrait une entité si tu lui donnais des attributs propres (comme une annotation, une observation, un avis, etc.) ... A voir donc ...

      Je ne veux pas trop te noyer, mais si l'on voulait être rigoureux, il faudrait revoir le modèle ... Cela serait plus simple si tu avait fait un MCD avant ton MLD ...

      Je te propose cela :

      Pour info j'utilise Looping pour faire cela, qui a l'avantage de générer le MLD et le SQL à partir du MCD que tu construis, et tout ça à la volée ...

      Au passage je t'encourage à lire le document "Conception BDD" cf. ma signature.

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        30 avril 2021 à 13:51:50

        Merci beaucoup pour votre aide Monsieur.

        J'ai une question concernant votre MCD. Je voulais savoir à quoi correspond la table Session ?

        -
        Edité par Benzouye 30 avril 2021 à 13:59:45

        • Partager sur Facebook
        • Partager sur Twitter

        Your future self is watching you right now through memories ! 

          30 avril 2021 à 14:08:33

          L'entité session se construit avec des identifiants relatifs (cf. document conseillé plus tôt) et permet d'avoir un identifiant composé sur deux colonnes (annee et spécialité). Elle correspond à peu près à ce que tu avais appelé annee_formation dans ton MLD.

          Et surtout elle permet d'être référencée dans l'entité utilisateur par la relation inscrit. Ce qui donne dans le MLD la table utilisateur avec une clé étrangère composée #( annee, id_specialite ). Il faut que le couple année/spécialité existe dans session pour pouvoir être utilisé dans utilisateur.

          Le MLD généré est :

          Le SQL généré est :

          CREATE TABLE annee(
             annee SMALLINT UNSIGNED,
             PRIMARY KEY(annee)
          );
          
          CREATE TABLE formation(
             id_formation INT UNSIGNED AUTO_INCREMENT,
             titre VARCHAR(60),
             PRIMARY KEY(id_formation),
             UNIQUE(titre)
          );
          
          CREATE TABLE specialite(
             id_specialite INT,
             libelle INT UNSIGNED AUTO_INCREMENT,
             id_formation INT UNSIGNED NOT NULL,
             PRIMARY KEY(id_specialite),
             UNIQUE(libelle),
             FOREIGN KEY(id_formation) REFERENCES formation(id_formation)
          );
          
          CREATE TABLE session(
             id_specialite INT,
             annee SMALLINT UNSIGNED,
             PRIMARY KEY(id_specialite, annee),
             FOREIGN KEY(id_specialite) REFERENCES specialite(id_specialite),
             FOREIGN KEY(annee) REFERENCES annee(annee)
          );
          
          CREATE TABLE semestre(
             id_semestre TINYINT UNSIGNED,
             PRIMARY KEY(id_semestre)
          );
          
          CREATE TABLE matiere(
             id_matiere INT UNSIGNED AUTO_INCREMENT,
             credit VARCHAR(50),
             libelle VARCHAR(60),
             PRIMARY KEY(id_matiere),
             UNIQUE(libelle)
          );
          
          CREATE TABLE utilisateur(
             id_utilisateur INT UNSIGNED AUTO_INCREMENT,
             nom VARCHAR(50),
             prenom VARCHAR(50),
             date_naissance DATE,
             sexe CHAR(1),
             email VARCHAR(100),
             motdepasse VARCHAR(60),
             id_specialite INT NOT NULL,
             annee SMALLINT UNSIGNED NOT NULL,
             PRIMARY KEY(id_utilisateur),
             UNIQUE(email),
             FOREIGN KEY(id_specialite, annee) REFERENCES session(id_specialite, annee)
          );
          
          CREATE TABLE note(
             id_note INT UNSIGNED AUTO_INCREMENT,
             valeur DECIMAL(4,2),
             finale BOOLEAN,
             id_matiere INT UNSIGNED NOT NULL,
             id_semestre TINYINT UNSIGNED NOT NULL,
             id_utilisateur INT UNSIGNED NOT NULL,
             PRIMARY KEY(id_note),
             FOREIGN KEY(id_matiere) REFERENCES matiere(id_matiere),
             FOREIGN KEY(id_semestre) REFERENCES semestre(id_semestre),
             FOREIGN KEY(id_utilisateur) REFERENCES utilisateur(id_utilisateur)
          );

          PS : inutile de citer entièrement le message précédent lorsque tu réponds, cela rend le sujet difficile à lire ...

          -
          Edité par Benzouye 30 avril 2021 à 14:22:09

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            30 avril 2021 à 14:36:32

            Bonjour,

            Entendu, merci beaucoup pour votre aide monsieur.

            • Partager sur Facebook
            • Partager sur Twitter

            Your future self is watching you right now through memories ! 

            Aide pour le design d'une BDD d'une application

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown