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 club parapente


Sujet :

Schéma

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Gestion club parapente
    Bonjour tout le monde !

    Je suis étudiant et j'ai un projet à rendre quant à la gestion d'un club de parapente (MCD, MLD, Access).
    N'étant pas du tout informaticien à la base, j'ai grandement besoin de votre aide!

    J'ai commencé le MCD mais je bloque complètement pour la gestion des stages et des examens (je l'ai entouré en rouge sur le MCD).
    Et ce, même en m'aidant de tutoriels...

    De même, je ne suis pas vraiment sûr de ce que j'ai fait pour la gestion des fonctions (en vert),
    des cotisations (en orange)
    et des vols et parapentes (en violet).

    J'ai réorganisé les données du sujet pour le rendre plus lisible.
    Si vous pouvez me donner des conseils, ce serait vraiment super !

    Merci d'avance !

    Sujet - gestion d'un club de parapentes réorganisé.pdf

    Pièce jointe 61363

  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 Yeriko,

    J'essaierai de trouver un peu de temps pour m'occuper des parapentes...
    (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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 45
    Points : 39
    Points
    39
    Par défaut
    T'en a besoin pour quand?

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci de votre soutien !

    Le rapport de conception (avec notamment dico de données, MCD et MLD) est à rendre lundi... :/



    Par ailleurs, une question :
    dans la MCD, j'ai mis :

    [Pilotes] ---0,1--- (exerce ds comité directeur) ---0,1--- [fonctions]

    et dans Access, j'ai mis l'intégrité référentielle (pour avoir un pilote = une fonction maximum), et je vois ça (cf. image) :

    [pilotes]-1---∞-[fonctions]

    Je suis à côté de la plaque en faisant ça ?
    Images attachées Images attachées  

  5. #5
    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 Yeriko,

    Cotisations

    Votre MCD se lit ainsi :
    Un pilote a payé au moins une cotisation.

    Il y a au plus une cotisation dans le système et cette cotisation est payée par au plus un pilote : ça fait vraiment peu...

    Il serait préférable de voir les choses autrement. Par exemple :

    1er scénario. Si pour une année donnée le montant de la cotisation est le même pour tous les adhérents, alors la modélisation est la suivante :

    MCD (PowerAMC)



    Le mickey <pi> signifie que l’attribut correspondant est identifiant. Un pilote a pu ne régler aucune cotisation (il est tout neuf).

    L’année suffit pour identifier les cotisations.

    MLD correspondant



    Le mickey <pk> signifie clé primaire (primary key). Le mickey <fk> signifie clé étrangère (foreign key).

    Sous forme symbolique :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PILOTE {PiloteId, Nom, Prenom}
        PRIMARY KEY {PiloteId} ;
     
    COTISATION {Annee, Montant}
        PRIMARY KEY {Annee} ;
     
    REGLER {PiloteId, Annee, DateReglt}
        PRIMARY KEY {PiloteId, Annee} ;
        FOREIGN KEY {PiloteId} REFERENCES PILOTE
        FOREIGN KEY {Annee} REFERENCES COTISATION ;


    2e scénario. Si pour une année donnée le montant de la cotisation n’est pas le même pour tous les adhérents, alors la modélisation est la suivante :

    MCD



    MLD


    Sous forme symbolique :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PILOTE {PiloteId, Nom, Prenom}
        PRIMARY KEY {PiloteId} ;
     
    COTISATION {PiloteId, Annee, Montant, DateReglt}
        PRIMARY KEY {PiloteId, Annee} ;
        FOREIGN KEY {PiloteId} REFERENCES PILOTE ;


    Fonctions

    Concernant le comité directeur :

    Votre MCD est correct, mais votre représentation ACCESS, exprime le fait qu’un pilote peut exercer plusieurs fonctions.

    Le MLD doit ressembler à ceci :



    Dans EXERCER, PiloteId est à la fois clé primaire et clé étrangère tandis que FonctionId est à la fois clé alternative et clé étrangère.

    Sous forme symbolique :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PILOTE {PiloteId, Nom, Prenom}
        PRIMARY KEY {PiloteId} ;
     
    FONCTION {FonctionId, FonctionLibelle} 
        PRIMARY KEY {FonctionId} ;
     
    EXERCER {PiloteId, FonctionId}
        PRIMARY KEY {PiloteId} 
        UNIQUE {FonctionId} 
        FOREIGN KEY {PiloteId} REFERENCES PILOTE
        FOREIGN KEY {FonctionId} REFERENCES FONCTION ;

    Ainsi un pilote exerce au plus une fonction et une fonction est exercée par un pilote au plus.


    Parapentes et vols

    Le MCD est pas mal. Ceci dit, l’association-type UTILISE est inutile, puisque lorsqu’un pilote utilise un parapente, c’est au cours d’un vol...

    Il y a une contrainte formulée dans l'énoncé et qui est la suivante : « Pas de vol à deux ! ». Je n’y connais strictement rien en matière de parapente, mais soit le parapente est d'un modèle conçu pour qu’un seul pilote puisse l’utiliser, soit on met en œuvre une contrainte au niveau symbolique, en introduisant un attribut Periode de type PERIODE (c'est-à-dire caractérisé par une heure de début et une heure de fin). Dans ces conditions, la table VOL prend l’allure suivante :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    VOL {PiloteId, ParapId, SiteDecId, SiteAttId, DateVol, Periode}
        PRIMARY KEY {PiloteId, ParapId, SiteDecId, SiteAttId}
        UNIQUE {ParapId, Date, Periode}
        FOREIGN KEY ...
    ;

    La contrainte UNIQUE signifie qu’à une date donnée, durant une période horaire (heure début, heure fin), un parapente n’est utilisé que par un seul pilote, concerne un seul site de décollage et un seul site d’atterrissage. Le problème est de savoir si ACCESS permet l’utilisation du type PERIODE, permet de garantir la contrainte proposée et fournit les opérateurs permettant de manipuler des données de ce type : j’ai des doutes... Le vol en duo risque de ne pas pouvoir être interdit...

    Pour la partie Stages et Niveaux, j’essaierai de trouver un moment, mais à vue de nez, ça a l’air un peu tarabiscoté.
    (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.

  6. #6
    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 Yeriko,

    Comme dans tous les énoncés rédigés en langue vernaculaire ou autre, il règne un flou de bon aloi dans celui que l’on vous a proposé, quelle que soit la bonne volonté de l’auteur (d’où l’intérêt du formalisme Merise (ou autre) si l’on vise à la précision).

    Par exemple, si on vous dit qu’un pilote « ne peut occuper qu’une seule fonction à la fois dans le comité directeur », on ne vous dit pas si plusieurs pilotes peuvent remplir une certaine fonction (à part celle de président, de trésorier, ...) Si cette possibilité existait, le MCD pourrait être :



    Et le MLD :




    Any way. Concernant les stages :

    Selon votre MCD, un pilote possède un certain niveau, ce qui laisse à entendre que pour suivre un stage d’un certain niveau N, il faudrait que le candidat ait au moins le niveau N-1, ce qui est logique, mais ne transparaît pas dans les règles proposées.

    Vous avez modélisé une entité-type EXAMEN, mais celle-ci ne présente aucun intérêt même s’il y a un certain bavardage autour des états d’âme des postulants : cette entité-type ne possède aucune caractéristique telle que la date de passage d’un examen et autres propriétés (lieu de passage de l’examen, etc.). Sans modéliser cette entité-type, on se doute bien qu’un examen a lieu à la fin d’un stage, dans le but d’obtenir un brevet. Si vous tenez vraiment à faire figurer le fait qu’un stagiaire a décidé de passer l’examen, mettez en œuvre un attribut de type booléen à cet effet dans votre association-type INSCRIT.


    Pour par part je verrais bien les choses ainsi :


    Vous noterez la présence d’une contrainte d’exclusion entre les associations-types ENCADRER et SUIVRE, signifiant qu’un pilote ne peut pas être en même temps stagiaire dans un stage qu’il encadre.

    Il est écrit : « Les stages sont payants, et on aimerait surveiller les paiements des pilotes stagiaires. » On ne sait pas s’il s’agit des montants réglés ou simplement du fait que les règlements ont été effectués, auquel cas un booléen suffit : au hasard j’ai retenu cette possibilité, d’où l’attribut StatutPaiement de l’association-type SUIVRE).



    Dans la mesure où un stage aurait pour cible un brevet donné, on peut préférer modéliser ainsi :



    (On connaît le niveau du stage par le biais de l'examen.)



    Citation Envoyé par Yeriko
    N'étant pas du tout informaticien à la base
    Pour modéliser, il vaut mieux être philosophe, logicien, mathématicien ou artiste...
    (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.

  7. #7
    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
    A propos des fonctions exercées par les pilotes :

    J’ai regardé comment faire avec ACCESS (2003). Je ne suis pas un expert de cet outil, mais à mon avis il faut bidouiller pour avoir l’équivalent du MLD ci-dessous (notation conceptuelle) :



    Dont je rappelle l’équivalent symbolique :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PILOTE {PiloteId, Nom, Prenom}
        PRIMARY KEY {PiloteId} ;
     
    FONCTION {FonctionId, FonctionLibelle} 
        PRIMARY KEY {FonctionId} ;
     
    EXERCER {PiloteId, FonctionId}
        PRIMARY KEY {PiloteId} ;
        UNIQUE {FonctionId} ;
        FOREIGN KEY {PiloteId} REFERENCES PILOTE
        FOREIGN KEY {FonctionId} REFERENCES FONCTION ;

    En gros, pour simuler la clause UNIQUE (table EXERCER), il faut créer un index, ce qui relève du mélange de concepts logiques et physiques, ça frise la correctionnelle...

    Qui plus est, ACCESS utilise une représentation unique (1, ∞) pour définir les cardinalités x,N et x,1. Peut mieux faire...




    (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.

  8. #8
    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
    bonsoir,

    Citation Envoyé par fsmrel Voir le message
    Qui plus est, ACCESS utilise une représentation unique (1, ∞) pour définir les cardinalités x,N et x,1. Peut mieux faire...
    Il peut…


    Faut le brusquer un peu…
    1°) Mettre en place les clés primaires et l’index "sans doublon"
    2°) "Tendre" les relations dans la fenêtre des relations qui deviennent automatiquement -1------1-

  9. #9
    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
    Citation Envoyé par f-leb
    Faut le brusquer un peu…
    1°) Mettre en place les clés primaires et l’index "sans doublon"
    2°) "Tendre" les relations dans la fenêtre des relations qui deviennent automatiquement -1------1-
    C'est bien ce que je fis. Mais sans doute utilisez-vous une version postérieure à la mienne (Access 2003 comme je l'avais mentionné). Notez-bien qu'Access m'annonce une relation de type un-à-un (suivez la flèche coloriée)...

    Qu'en est-il de votre version ?
    (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.

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour votre aide !

    Après discussion de groupe pour interpréter le sujet, on a fait la MCD ci-jointe.

    _ cotisation : la même pour tous, chaque année ; "pas de rabais ni de ristourne sur les stages et les cotisations" précise le sujet
    _ inscription à l'examen du stage : on met un booléen oui/non
    _ brevet : on a préféré rependre la deuxième modélisation de manière à faire ressortir le fait qu'un stage vise un brevet

    Pour les vols à deux, j'avais même pas pensé à mettre une période pour le vol. J'avais plutôt lu ça dans le sens que, à chaque vol n'est associé qu'un et un seul pilote.


    Maintenant, on passe à la traduction en MLD.

    Et là j'ai encore une question :
    comment se traduit une contrainte d'exclusion dans Access ?


    En tout cas, merci encore : maintenant je comprends bien mieux tout ce que j'ai pu lire jusqu'ici dans les PDF glanés sur internet et le Dunod !

  11. #11
    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
    Citation Envoyé par Yeriko
    comment se traduit une contrainte d'exclusion dans Access ?
    Je n’en sais rien (je rappelle que je ne dispose que de ACCESS 2003). Avec les SGBD tels que DB2, SQL Server, Oracle, etc., on utilise un trigger.

    Exemple SQL Server : voyez la discussion avec zoltix.


    Citation Envoyé par Yeriko
    je comprends bien mieux tout ce que j'ai pu lire jusqu'ici dans les PDF glanés sur internet et le Dunod !
    Nous n’aurons donc pas perdu notre journée... Au fait, quel ouvrage chez Dunod ?
    (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.

  12. #12
    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,

    Citation Envoyé par fsmrel Voir le message
    C'est bien ce que je fis. Mais sans doute utilisez-vous une version postérieure à la mienne (Access 2003 comme je l'avais mentionné). Notez-bien qu'Access m'annonce une relation de type un-à-un (suivez la flèche coloriée)...

    Qu'en est-il de votre version ?
    Il est vrai que je suis passé à la version 2007 depuis un moment. Et même là, si je tends la relation EXERCER.FonctionId---FONCTION.FonctionId et qu’ensuite je mets l’ "index sans doublon" sur EXERCER.FonctionId (inversion des étapes 1° et 2° de mon message précédent), l’affichage ne bascule pas en -1-----1- et reste désespérément en -∞----1- à moins de détruire et recommencer la relation.

    Ce n’est qu’un problème d’affichage mais quand même….
    Citation Envoyé par Yeriko
    comment se traduit une contrainte d'exclusion dans Access ?
    Ici pas bien, car pas de triggers sous Access (sic) ! Il faudra donc simuler le comportement souhaité en codant dans les formulaires (procédures évènementielles sur des contrôles zone de texte, liste déroulante… liés à des colonnes) et s’inquiéter de toutes insertions/mises à jour dans les tables en dehors de ces formulaires.

    (Pour info, la sortie prochaine d’Access 2010 avec ses nouveaux mécanismes qui s’apparentent à des triggers pourraient bien changer (un peu) la donne dans ce domaine… à suivre)

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,


    fsmrel : Nous n’aurons donc pas perdu notre journée... Au fait, quel ouvrage chez Dunod ?
    Il s'agit de Bases de données : Concepts, utilisation et développement de Jean-Luc Hainaut (mai 2009)


    f-leb, merci pour l'info pour les triggers sur Access !
    (Access 2010 n'est pas déjà dispo en version bêta ? j'avais cru entendre ça je sais plus où)

    Par contre en faisant ma MLD, je n'ai pas compris la raison d'être de ta table [exercer] entre [pilote] et [fonction].
    (cf. le tuto que j'ai trouvé en pièce jointe)


    Si vous pouvez aussi me dire si ma MLD a été correctement faite, ce serait super ;
    notamment au niveau de [pilote]----[encadrer]----[stage] ; dans [encadrer] on met 2 clés primaires qui sont aussi clés étrangères ou bien une clé primaire et une clé alternative qui sont toutes les deux clés étrangères ?

    Pour le sens des flèches : elles pointent toujours vers la table qui contient la clé primaire, c'est bien ça ? il n'y a pas d'exceptions à cette règle ?


    Autre question : j'ai utilisé Analyse SI pour construire la MCD et le programme génère le code SQL correspondant automatiquement ; est il possible de l'utiliser avec Access ?
    Images attachées Images attachées   

  14. #14
    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,


    Citation Envoyé par Yeriko
    Il s'agit de Bases de données : Concepts, utilisation et développement de Jean-Luc Hainaut (mai 2009)
    Muy bien. Je ne connais pas.


    Citation Envoyé par Yeriko
    Par contre en faisant ma MLD, je n'ai pas compris la raison d'être de ta table [exercer] entre [pilote] et [fonction].
    (cf. le tuto que j'ai trouvé en pièce jointe)
    L’auteur du tuto a oublié la solution correcte, la seule qui soit conforme à la théorie relationnelle et que je vous ai fournie dans mon message du 23/04/2010, 3h23. En effet, celles qui sont proposées dans le tuto sont génératrices du marqueur NULL, or le bonhomme NULL est banni de la théorie relationnelle, car il met en péril le comportement de l’algèbre relationnelle, nonobstant ce qu’en pensent les tenants de SQL (langage qui est délinquant eu égard à la théorie). Et n’oubliez pas que {PiloteId} et {FonctionId} sont les clés de la table EXERCER, peu importe celle qui joue le rôle de primaire quand l’autre joue le rôle d’alternative. Prenez l’habitude de modéliser proprement dès le départ.

    Cela dit, l’auteur du tuto n’a pas vu qu’il a transformé une cardinalité 0,1 en 0,N. En effet, l’attribut clé étrangère (par exemple No_Entreprise dans la table SALARIÉ) doit être clé alternative, ce qui n’apparaît pas. Vous avez consciencieusement recopié l’erreur.

    Table STAGE : pourquoi existe-t-il un attribut Stage_Niveau ? En effet, un stage détermine un brevet, lequel détermine un niveau, donc le niveau d’un stage est connu par transitivité. Il y a redondance.

    Sinon, le MLD est correct.

    N.B. MLD est l’abréviation de Modèle Logique de Données, on parle donc du (et non pas de la) MLD.


    Citation Envoyé par Yeriko
    Pour le sens des flèches : elles pointent toujours vers la table qui contient la clé primaire, c'est bien ça ?
    Oui. Mais si vous voulez inverser le sens des flèches, ça n’est pas un problème. Du reste, dans les années soixante-dix c’était le sens inverse qui était à la mode. C’était la notation officielle des diagrammes de Bachman (bases de données pré-relationnelles). Par ailleurs, au lieu d’utiliser des flèches, vous pouvez utiliser les cardinalités de Merise ou toute autre notation... Mais restons-en pour le moment au fléchage actuel.


    Citation Envoyé par Yeriko
    j'ai utilisé Analyse SI pour construire la MCD et le programme génère le code SQL correspondant automatiquement ; est il possible de l'utiliser avec Access ?
    Concernant ACCESS, f-leb pourra répondre. En tout état de cause, il faudra que vous nous montriez le code SQL généré.
    (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.

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,


    A fsmrel :

    Prenez l’habitude de modéliser proprement dès le départ.
    C'est bien noté !!

    Cela dit, l’auteur du tuto n’a pas vu qu’il a transformé une cardinalité 0,1 en 0,N. En effet, l’attribut clé étrangère (par exemple No_Entreprise dans la table SALARIÉ) doit être clé alternative, ce qui n’apparaît pas. Vous avez consciencieusement recopié l’erreur.
    On apprend de ses erreurs ! ^^
    J'ai relu le MLD en me basant sur ce pdf ; j'ai bien mieux compris la règle 4 p. 25-26 maintenant :
    ftp://ftp-developpez.com/cyril-gruau/ConceptionBD.pdf

    Table STAGE : pourquoi existe-t-il un attribut Stage_Niveau ? En effet, un stage détermine un brevet, lequel détermine un niveau, donc le niveau d’un stage est connu par transitivité. Il y a redondance.
    En effet, je n'avais pas fait attention à cette redondance...

    Sinon, le MLD est correct.
    Merci beaucoup d'avoir pris le temps de vérifier !

    N.B. MLD est l’abréviation de Modèle Logique de Données, on parle donc du (et non pas de la) MLD.
    En effet...



    Sinon, voici le copié collé de ce que me pond Analyse SI pour le SQL (sachant que la contrainte d'exclusion entre Inscrire et Encadrer n'est pas prise en compte ; je n'ai pas réussi à la créer (j'ai retouché avec paint...)).
    Je joins la copie écran.
    Images attachées Images attachées  

  16. #16
    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 Yeriko,


    Sites et Niveaux

    En relisant votre MCD, je me rends compte que les sites d’atterrissage et de décollage sont caractérisés par leur niveau : les entités-types SITE ATTERRISSAGE et SITE_DECOLLAGE doivent donc être débarrassées de l’attribut caractérisant le niveau et être mises en relation avec l’entité-type NIVEAU. Concernant le MLD, les attributs sont en place (tables SITE ATTERRISSAGE et SITE_DECOLLAGE), mais doivent donner lieu aux clés étrangères qui référencent la table NIVEAU (voir ci-dessous le code SQL qui doit être généré).

    Pour bétonner la base de données, on pourra envisager la mise en oeuvre d’une assertion (ou d’un trigger dans le cas de SQL Server) pour interdire la présence dans la table VOL de valeurs de SiteDecolId et SiteAtterId incompatibles avec le niveau du pilote. On verra cela plus tard, quand le code SQL généré sera d’équerre.

    Cardinalités 0,1

    J'ai relu le MLD en me basant sur ce pdf ; j'ai bien mieux compris la règle 4 p. 25-26 maintenant :
    ftp://ftp-developpez.com/cyril-gruau/ConceptionBD.pdf
    Considérons la règle 4 énoncée dans le document en question :
    « Une association binaire de type 1:1 est traduite comme une association de type 1:N sauf que la clé étrangère se voit imposer une contrainte d’unicité en plus d’une éventuelle contrainte de non vacuité (cette contrainte d’unicité impose à la colonne correspondante de ne prendre que des valeurs distinctes). »
    L’exemple qui est donné pour illustrer cette règle est le suivant :



    La traduction du MCD en MLD est la bonne car, outre que le fait que le bonhomme NULL ne peut pas se manifester dans l’attribut #n°employé de la table services, cette dernière comporte une clé étrangère {#n°employé} à laquelle est associé le commentaire « unique, non vide », ce qui revient à dire que {#n°employé} est clé alternative. Sous forme symbolique, le schéma ci-dessus donne lieu à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    employés {n°employé, nom}
       PRIMARY KEY {n°employé} ;
    
    services {n°service, nomservice, #n°employé}
       PRIMARY KEY {n°service}
       UNIQUE {#n°employé} ;
       FOREIGN KEY {#n°employé} REFERENCES employés {n°employé} ;
    La règle 4 du document référencé comporte une 2e partie :
    « Si les associations fantômes ont été éliminées, il devrait y avoir au moins un côté de cardinalité 0,1. C’est alors dans la table du côté opposé que doit aller la clé étrangère. Si les deux côtés sont de cardinalité 0,1, alors la clé étrangère peut être placée indifféremment dans l’une des deux tables. »
    Je ne sais pas pourquoi une association peut être qualifiée de fantôme, peu importe, mais l’affirmation :
    « Si les deux côtés sont de cardinalité 0,1, alors la clé étrangère peut être placée indifféremment dans l’une des deux tables. »
    n’est pas acceptable, car outre qu’il faille favoriser de façon a priori aléatoire une table (on engendre ainsi un problème d’asymétrie), il se trouve plus fondamentalement qu’on impose la présence du bonhomme NULL.

    A cette occasion, je note que la règle 2 formulée page 24 est contestable :
    « Une association binaire de type 1:n disparaît, au profit d’une clé étrangère dans la table côté 0,1 ou 1,1 qui référence la clé primaire de l’autre table. Cette clé étrangère ne peut pas recevoir la valeur vide si la cardinalité est 1,1. »
    En effet, si l’on procède ainsi dans le cas de la cardinalité 0,1, on impose là encore la présence du bonhomme NULL.

    Au-delà des considérations théoriques, les conséquences pratiques de l’application de cette règle peuvent être désastreuses. J’ai audité — parmi bien d’autres ! —une application où l’on utilisait une table ARTICLE, un véritable « soleil » dont les rayons ciblaient une quinzaine de tables avec lesquelles elle entretenait des relations 0,1 / 0,N et pour laquelle la règle 2 avait été appliquée. La table ARTICLE comportait donc une quinzaine de d’attributs qui à 95% en moyenne étaient marqués NULL. Non seulement les performances en production étaient catastrophiques lors des mises à jour (autant d’index à mettre à jour), mais fonctionnellement cette table ARTICLE n’avait aucune existence légitime... Je n’irai pas plus loin, mais retenez que les cardinalités 0,1 ne doivent pas être traitées de façon simpliste.

    Code SQL généré

    Voici le copié collé de ce que me pond Analyse SI pour le SQL.
    Plutôt qu’un copié collé, je préférerais le code généré lui-même (utilisez la balise CODE).
    Ceci dit :

    Le bonhomme NULL est omniprésent : veuillez ajouter la clause NOT NULL pour chaque attribut de chaque table.

    Le type de données uniqueidentifier (version SQL Server du Universally Unique Identifier (UUID) si je ne m’abuse) est mal venu. En effet, un seul pilote pourra porter un certain nom, être prénommé d’un certain prénom, etc. Et encore les valeurs correspondantes seront bizarroïdes (voyez l’article de SQLpro à propos des doublons, au paragraphe 2.1.2).

    Le code généré pour la table PILOTE doit ressembler à ceci (même punition, même motif pour l’ensemble des tables) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE PILOTE 
    (
       PiloteId             Int                  NOT NULL,
       PiloteNom            Varchar(48)          NOT NULL,
       PilotePrenom         Varchar(48)          NOT NULL,
       PiloteAdresse        Varchar(48)          NOT NULL,
       PiloteTelephone      Varchar(16)          NOT NULL,
       PilotePoids          Int                  NOT NULL
    ) ;
    ALTER TABLE PILOTE ADD CONSTRAINT PILOTE_PK PRIMARY KEY  (PiloteId) ;

    Analyse SI a généré un cycle entre les tables PILOTE et FONCTION : conformément à ce dont nous sommes convenus dans les discussions précédentes, virer l’attribut FonctionId de la table PILOTE, virer l’attribut PiloteId de la table FONCTION et mettre en œuvre la table EXERCER :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE EXERCER 
    (
       PiloteId             Int                  NOT NULL,
       FonctionId           Int                  NOT NULL,
       CONSTRAINT EXERCER_PK PRIMARY KEY  (PiloteId),
       CONSTRAINT EXERCER_AK UNIQUE (FonctionId),
       CONSTRAINT EXERCER_FONCTION_FK FOREIGN KEY (FonctionId)
          REFERENCES Fonction (FonctionId),
       CONSTRAINT EXERCER_PILOTE_FK FOREIGN KEY (PiloteId)
          REFERENCES Pilote (PiloteId)
    ) ;

    En conséquence des remarques que j’ai faites à propos des sites d’atterrissage, de décollage et des niveaux, le code généré pour les tables SITE_ATTERRISSAGE et SITE_DECOLLAGE devient (je n’ai pas fait figurer tous les attributs) :

    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
    15
    16
    17
    CREATE TABLE SITE_ATTERRISSAGE 
    (
       SiteAtterId          Int                  NOT NULL,
       NiveauId             Int                  NOT NULL,
       SiteAtterNom         Varchar(48)          NOT NULL,
       CONSTRAINT SITE_ATTERRISSAGE_PK PRIMARY KEY  (SiteAtterId),
       CONSTRAINT SITE_ATTERRISSAGE_NIVEAU_FK FOREIGN KEY (NiveauId)
          REFERENCES Niveau (NiveauId)
    ) ;
    CREATE TABLE SITE_DECOLLAGE (
       SiteDecolId          Int                  NOT NULL,
       NiveauId             Int                  NOT NULL,
       SiteDecolNom         Varchar(48)          NOT NULL,
       CONSTRAINT SITE_DECOLLAGE_PK PRIMARY KEY  (SiteDecolId),
       CONSTRAINT SITE_DECOLLAGE_NIVEAU_FK FOREIGN KEY (NiveauId)
          REFERENCES Niveau (NiveauId)
    ) ;



    sachant que la contrainte d'exclusion entre Inscrire et Encadrer n'est pas prise en compte ; je n'ai pas réussi à la créer (j'ai retouché avec Paint...)
    Les outils ne génèrent pas directement ce type de contrainte quand ils ne l’intègrent pas dans leur métamodèle. J’ai fait comme vous, en dessinant moi-même la contrainte d’exclusion. Pour la mettre en œuvre, on agit donc directement au niveau du code SQL. On verra cela un peu plus tard.

    En revanche, certaines contraintes sont faciles à mettre en œuvre et il ne faut pas s’en priver. Supposons par exemple qu’une date de début de stage doive être antérieure à la date de fin du stage : on met en œuvre cette contrainte directement dans le corps de l’instruction CREATE TABLE :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE STAGE 
    (
       StageId              Int                  NOT NULL,
       BrevetId             Int                  NOT NULL,
       DateDebut            Datetime             NOT NULL,
       DateFin              Datetime             NOT NULL,
       Prix                 Int                  NOT NULL,
       CONSTRAINT STAGE_PK PRIMARY KEY  (StageId),
       CONSTRAINT STAGE_BREVET_FK FOREIGN KEY (BrevetId)
          REFERENCES Brevet (BrevetId),
       CONSTRAINT STAGE_CK1 CHECK (DateDebut < DateFin) 
    ) ;

    De la même façon, à supposer que les attributs StatutPaiement et InscriptionExam de la table INSCRIRE correspondent à des booléens (vrai/ faux, oui/non, 1/0, ...), on mettra en œuvre les contraintes correspondantes directement dans le corps de l’instruction CREATE TABLE :

    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 INSCRIRE 
    (
       PiloteId             Int                  NOT NULL,
       StageId              Int                  NOT NULL,
       StatutPaiement       Char(1)              NOT NULL,
       InscriptionExam      Char(1)              NOT NULL,
       CONSTRAINT SUIVRE_PK PRIMARY KEY  (PiloteId, StageId),
       CONSTRAINT SUIVRE_PILOTE_FK FOREIGN KEY (PiloteId)
          REFERENCES Pilote (PiloteId),
       CONSTRAINT SUIVRE_STAGE_FK FOREIGN KEY (StageId)
          REFERENCES Stage (StageId),
       CONSTRAINT SUIVRE_CK1 CHECK (StatutPaiement IN ('v', 'f')), 
       CONSTRAINT SUIVRE_CK2 CHECK (InscriptionExam IN ('v', 'f')) 
    ) ;

    Bon courage à vous.
    (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.

Discussions similaires

  1. [MLD] Gestion club sportif
    Par tintin02100 dans le forum Schéma
    Réponses: 1
    Dernier message: 26/05/2014, 14h50
  2. Réponses: 4
    Dernier message: 12/02/2014, 09h59
  3. gestion d'un club de sport
    Par Darkolive dans le forum Access
    Réponses: 19
    Dernier message: 11/05/2006, 16h24
  4. [MySQL] Gestion club
    Par Angeldu74 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/03/2006, 16h59
  5. Gestion club sportif (problème de relations )
    Par jemaflo dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 00h00

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