IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Gestion du lycée (MLD et MCD à corriger) [MLD]


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Points : 18
    Points
    18
    Par défaut Gestion du lycée (MLD et MCD à corriger)
    Bonjour ,

    Voici mon MLD sur la "gestion d'un lycée" par pièce jointe avec les régles de gestion et le MCD.
    Aidez moi à les corriger ou de les compléter avec les informations manqantes.

    Je vous informe que la base doit gérer:
    - La note des élèves en établissant leur bulletin;
    - les professeurs et leur emploi du temps;
    - Le payement des éléves par classe et le suivi de payement;
    - le passage des élèves, le redoublement, l'exclusion et l'abandon des élèves.

    Qu'est ce qu'il faut faire pour le cas des payements des élèves. Le payement est en fonction du trimestre.

    Au niveau de mon MLD, je constate que:
    - La clé de la relation "Inscrire" c'est à dire Date, Matricule, et Codeclasse se retrouve dans la relation "Obtenir".
    - De même la clé de relation "Associer" c'est à dire CodeClasse et IdMatière se retrouve également dans la relation "Obtenir".

    Exist il une redondance? SI oui Que faut il faire?
    Est - il possible d'éviter la repetition d'une même information dans plusieurs tables.
    Qu"est ce q'une redondance? et Qu'est ce qu'un doublon?

    Je vous informe aussi que je suis un débutant en MERISE et ACCESS.

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    Bonsoir alouca,


    Apparemment, tout le monde doit être aux bains de mer, donc je vais essayer de vous aider.

    Tout d’abord, je fais figurer votre MCD, car je préfère l’avoir sous les yeux.




    Règles de gestion

    RG6 : Un professeur peut dispenser plusieurs matières dans une classe à des heures différentes. Il peut également dispenser une matière dans plusieurs classes.

    L’énoncé est à reformuler. Quand vous écrivez « Un professeur peut dispenser plusieurs matières dans une classe à des heures différentes », on pourrait par exemple en déduire qu’à la même heure un professeur peut enseigner différentes matières.

    Il faudrait aménager cet énoncé, par exemple (même si ça paraît un peu lourd) :

    — Un professeur peut dispenser une matière dans plusieurs classes ;

    — De telle heure à telle heure, un professeur n'enseigne une seule matière, dans une seule classe.

    Compléter l’énoncé en précisant si, oui ou non, un professeur peut enseigner plus d’une matière à une même classe.

    RG5 : Un élève est inscrit dans une en une date en une date donnée.

    Je suppose qu’il faut lire : Un élève est inscrit dans une classe à une date donnée.

    Votre association-type Inscrire est correcte si les redoublements sont à prendre en compte et si un élève peut changer de classe en cous d’année sinon, le MCD devra être aménagé.

    Par ailleurs, le terme « Date » prête à confusion : parle-t-on d’une date du type jour/mois/année ? ou seulement de l’année de la rentrée scolaire ? Merci de le préciser. En attendant, je pars du principe que les inscriptions sont relatives à une année scolaire, c'est-à-dire qu’une inscription est celle d’un élève, dans une classe, pour une année scolaire, donc que l’association-type Inscrire met en relation les entités-types Eleve, Classe, Annee.

    Ceci n’empêche pas que l’association-type Inscrire soit porteuse d’un attribut supplémentaire DateInscription (du type jour/mois/année), utile notamment quand des élèves sont inscrits en cours d’année.


    MCD/MLD

    Au niveau MLD, vous vous étonnez que les attributs qui composent la clé primaire de la table Inscrire constituent un sous-ensemble des attributs qui composent la clé primaire de la table Obtenir.

    Il faut bien voir qu’au niveau du MCD, l’identifiant d’une association-type n’apparaît pas, il est virtuel, et peut être considéré comme un ensemble (au sens de la théorie des ensembles) dont les éléments sont les identifiants des entités-types participant à l’association-type.

    Désignons par E# l’identifiant de l’élève, A# l’année de l’inscription, T# le trimestre, C# l’identifiant de la classe et M# l’identifiant de la matière.

    L’identifiant virtuel de l’association-type Inscrire est donc {E#, A#, C#} ;
    Et celui de l’association-type Obtenir : {E#, A#, T#, C#, M#}.

    Mais au niveau du MLD, ces identifiants donnent lieu à des clés primaires bien concrètes, qui dont des ensembles (toujours et plus que jamais au sens de la théorie des ensembles), donc ne soyez pas étonné que la clé primaire de la table Inscrire soit un sous-ensemble de la clé primaire de la table Obtenir.

    Qui plus est, il faut être conscient qu’il y a une contrainte forte entre ces clés primaires, car selon votre MCD rien n’interdit qu’en 2009, l’élève Alain soit inscrit dans une classe et quand on lui attribue une note, on le fasse appartenir à une autre classe. Pour éviter cela, il faut mettre en œuvre une contrainte qui stipule que, si pour l’année a, l’élève e est inscrit dans la classe c, alors la note qu’il obtenue dans la matière m pour le trimestre t correspond bien à l’élève e pour l’année a et la classe c. Autrement dit, au niveau du MLD, les valeurs du triplet {E#, A#, C#} de la table Obtenir doivent être des valeurs du triplet {E#, A#, C#} de la table Inscrire. AU niveau conceptuel, on pourrait parler de contrainte d’inclusion entre les associations-types Inscrire et Obtenir, au niveau du MLD on définira plus simplement une clé étrangère (foreign key), à l’instar de celles qui sont déjà (j’espère !) définies relativement aux autres tables. Ainsi, le code SQL de création de la table Inscrire est le suivant (les tables ELEVE, CLASSE et MATIERE sont supposées être déjà créées) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE INSCRIRE
    (
          E#           INT     NOT NULL
        , A#           INT     NOT NULL
        , C#           INT     NOT NULL
        , DateInscr    DATE    NOT NULL
      , CONSTRAINT INSCR_PK PRIMARY KEY (E#, A#, C#)
      , CONSTRAINT INSCR_ELEVE FOREIGN KEY (E#)
                 REFERENCES ELEVE (E#)  
      , CONSTRAINT INSCR_CLASSE FOREIGN KEY (C#)
                 REFERENCES CLASSE (C#)  
    ) ;

    Et le code de création de la table Obtenir :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     CREATE TABLE OBTENIR
    (
          E#           INT     NOT NULL
        , A#           INT     NOT NULL
        , T#           INT     NOT NULL
        , C#           INT     NOT NULL
        , M#           INT     NOT NULL
        , DateInscr     INT     NOT NULL
      , CONSTRAINT OBTENIR_PK PRIMARY KEY (E#, A#, T#, C#, M#)
      , CONSTRAINT OBTENIR_INSCR FOREIGN KEY (E#, A#, C#)
                 REFERENCES INSCRIRE (E#, A#, C#)   
      , CONSTRAINT OBTENIR_MATIERE FOREIGN KEY (M#)
                 REFERENCES MATIERE (M#)  
    ) ;

    De la même façon, il doit exister une contrainte d’inclusion entre les associations-types Obtenir et Associer.

    Au niveau SQL, le code de création de la table Associer est le suivant :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE ASSOCIER
    (
          C#           INT     NOT NULL
        , M#           INT     NOT NULL
        , Coefficient   INT     NOT NULL
      , CONSTRAINT ASSOC_PK PRIMARY KEY (C#, M#)
      , CONSTRAINT ASSOC_CLASSE FOREIGN KEY (C#)
                 REFERENCES CLASSE (C#)   
      , CONSTRAINT ASSOC_MATIERE FOREIGN KEY (M#)
                 REFERENCES MATIERE (M#)  
    ) ;

    Ce qui fait que la contrainte OBTENIR_MATIERE de la table OBTENIR est à remplacer par une autre contrainte, disons OBTENIR_ASSOC. La contrainte OBTENIR_MATIERE n’a plus de raison d’être, car la matière dans laquelle la note a été obtenue est retrouvée transitivement via ASSOCIER :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE OBTENIR
    (
          E#           INT     NOT NULL
        , A#           INT     NOT NULL
        , T#           INT     NOT NULL
        , C#           INT     NOT NULL
        , M#           INT     NOT NULL
        , DateInscr     INT     NOT NULL
      , CONSTRAINT OBTENIR_PK PRIMARY KEY (E#, A#, T#, C#, M#)
      , CONSTRAINT OBTENIR_INSCR FOREIGN KEY (E#, A#, C#)
                 REFERENCES INSCRIRE (E#, A#, C#)   
      , CONSTRAINT OBTENIR_ASSOC FOREIGN KEY (C#, M#)
                 REFERENCES ASSOCIER (C#, M#)   
    ) ;

    Maintenant, vous me poserez la question : comment établir les contraintes d’inclusion au niveau du MCD ? Disons qu’elles ont été définies avec Merise/2 et que je ne vois guère que Win’Design qui sache les mettre en œuvre (cf. la FAQ Merise). A défaut, vous les dessinez (et vous créez les étrangères manuellement). Par exemple :




    Si vous utilisez PowerAMC, faites-le moi savoir, je vous expliquerai comment procéder. Sinon, si vous utilisez un AGL, quel est-il ?


    A propos des redondances

    Il y a les bonnes et les mauvaises redondances. Les bonnes redondances sont celles qui sont contrôlées par le SGBD, auquel cas il n’y a pas de problème d’incohérence. Les mauvaises sont les autres, celles que vous avez à gérer vous-même, avec tous les risques que cela comporte.

    Les triplets {E#, A#, C#} que l’on trouve dans les tables INSCRIRE et OBTENIR sont un exemple de bonne redondance, car la cohérence est assurée par le SGBD, par le mécanisme de l’intégrité référentielle (clés étrangères).

    N’oubliez pas non plus que SQL est censé s’appuyer sur le Modèle Relationnel de Données dont le caractère strictement associatif est très nettement marqué. Je cite son inventeur, Ted Codd :
    « Dans une base de données relationnelle, l’information doit être explicitement représentée sous forme de valeurs dans des relations, et pas autrement. »
    Le terme « relation » étant à prendre au sens mathématique. On le remplacera ici par « table », car une table est comme une relation au sens de Codd. Vous noterez que, par exemple, les pointeurs qui commencent à polluer SQL sont bannis.


    A propos des doublons

    Du point de vue tabulaire, il y a doublons quand deux lignes d’une table sont égales. Cela se produit quand on ne définit pas de clé primaire pour la table et qu’on insère deux fois la même ligne. Le corps de la table (l’ensemble des lignes) n’est alors pas un ensemble, puisqu’un ensemble ne contient pas deux fois le même élément. Si elle peut contenir des doublons, la table est alors un sac (bag). Si elle est dotée d’une clé primaire, alors le SGBD interdit les doublons et le corps de la table peut prétendre être un ensemble et du coup les opérateurs relationnels fonctionneront correctement (ils ne savent en effet manipuler que des ensembles).

    A noter encore que le résultat d’un SELECT peut contenir des doublons, et si l’on veut s’en servir comme opérande pour une opération relationnelle, il sera prudent d’inclure la clause DISTINCT, car cette andouille de SQL (Sorry Query Language) ne le fait pas de lui-même et méconnaît le principe de fermeture, selon lequel le résultat d’un opération relationnelle doit être de même nature que ses géniteurs avant de pouvoir à son tour procréer sans erreur...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 579
    Points : 56 603
    Points
    56 603
    Billets dans le blog
    40
    Par défaut
    Bonjour à tous,

    fsmrel a écrit :
    …Apparemment, tout le monde doit être aux bains de mer, donc je vais essayer de vous aider…
    Je sors tout juste de l’eau et viens de poster dans l’autre discussion concernant le milieu scolaire (voir [MCD] Gestion cahier de texte pour professeur d'une ecole)

    Deux discussions à suivre sur l’école à cette période de l’année, certains trouveront ça lamentable…

    Pour compléter ce qu’a écrit fsmrel, je ne parlerais donc que de la partie « bulletin de notes » (RG1 à RG4) :

    RG1 : Une classe appartient à une et une seule série.
    RG2 : Dans une série il peut avoir plusieurs classes.
    OK pour ça, à condition de bien savoir ce que recouvre le concept de « classe ». Car la classe de Terminale S (CodeClasse = « TS ») de l’année 2008-2009 ne désigne pas la même classe que la Terminale S de l’année 2007-2008, non ?

    Dans l’autre discussion j’avais proposé : Classe---(1,1)---situer---0,n---AnnéeScolaire
    RG3 : Le coefficient d’une matière est fonction de la classe et de la matière. Par exemple le coefficient de la mathématique en 10ème science n’est pas la même chose qu’à 10ème lettre.
    En 10ème (anciennement Cours Elémentaire 1ère année je crois) au lycée ???? Il y a (très) longtemps alors, ne me dit pas que tu reconstitues le lycée vu par Napoléon à l’aube de la création du baccalauréat ?

    Au lycée, le coefficient de la matière dépend plutôt de la série (il s’agit bien du coef. à l’examen, non ?) En série S, les maths sont coef.6 et en L c’est coef.2 (mes chiffres sont sans doute un peu fantaisistes hein ! , c’est pour donner un exemple)
    Série---1,n---évaluer(CoefExamen)----0,n---Matière
    RG4 : La note dépend de la date (Année d’inscription), de la période (Trimestre), de l’élève, de la classe et de la matière.
    Qu’est-ce que tu appelles « la » note ? Que désignent Note_Classe et Note_Compo ? Tu dois stocker toutes les notes de chaque devoir je suppose ?
    En prenant en compte une nouvelle entité « Devoir », on pourrait avoir plus simplement:
    Eleve---0,n---Evaluer---1,n---Devoir---1,1---lier---0,n---Matière

    Devoir(idDevoir, LibelleDevoir, DateDevoir, TrimestreDevoir,CoefDevoir,….)
    Evaluer(#idEleve, #idDevoir, NoteDevoir)

    J’ai rajouté CoefDevoir car les devoirs comptant pour un même trimestre peuvent être pondérés.
    Tu noteras l’apparente redondance DateDevoir et TrimestreDevoir(=1, 2 ou 3). Seulement, n’oublie pas que selon le lycée, l’année scolaire, les dates des vacances (selon les zones), les dates de conseil de classe, le choix du prof. etc… un devoir daté du 10 Décembre pourra aussi bien compter pour le 1er ou le 2ème trimestre.

    Les moyennes par élève, par classe, par trimestre résultant alors de calculs prenant notamment en compte NoteDevoir , CoefDevoir et TrimestreDevoir.
    (pour simuler un bac blanc, il faudra tenir compte de CoefExamen plutôt que CoefDevoir)

    Autre détail mais qui a peut-être son importance. Dans un lycée il peut y avoir des classes post-bac de type BTS dont le bulletin de notes est…semestriel.

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Comores

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par alouca Voir le message
    Bonjour ,

    Voici mon MLD sur la "gestion d'un lycée" par pièce jointe avec les régles de gestion et le MCD.
    Aidez moi à les corriger ou de les compléter avec les informations manqantes.

    Je vous informe que la base doit gérer:
    - La note des élèves en établissant leur bulletin;
    - les professeurs et leur emploi du temps;
    - Le payement des éléves par classe et le suivi de payement;
    - le passage des élèves, le redoublement, l'exclusion et l'abandon des élèves.

    Qu'est ce qu'il faut faire pour le cas des payements des élèves. Le payement est en fonction du trimestre.

    Au niveau de mon MLD, je constate que:
    - La clé de la relation "Inscrire" c'est à dire Date, Matricule, et Codeclasse se retrouve dans la relation "Obtenir".
    - De même la clé de relation "Associer" c'est à dire CodeClasse et IdMatière se retrouve également dans la relation "Obtenir".

    Exist il une redondance? SI oui Que faut il faire?
    Est - il possible d'éviter la repetition d'une même information dans plusieurs tables.
    Qu"est ce q'une redondance? et Qu'est ce qu'un doublon?

    Je vous informe aussi que je suis un débutant en MERISE et ACCESS.

    Merci d'avance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MCD] Pasage du MLD au MCD
    Par dipnose dans le forum Schéma
    Réponses: 4
    Dernier message: 08/06/2010, 11h20
  2. [MCD] MCD à corriger
    Par alouca dans le forum Schéma
    Réponses: 1
    Dernier message: 27/07/2009, 12h35
  3. MLD et MCD avec windev
    Par t.n.b.g dans le forum WinDev
    Réponses: 11
    Dernier message: 21/05/2008, 14h03
  4. DDL DB2 vers DC, MLD ou MCD ?
    Par Luc Orient dans le forum Rational
    Réponses: 4
    Dernier message: 18/03/2007, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo