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 :

Association (0,1) - (0,n) dans MySQL Workbench [MLD]


Sujet :

Schéma

  1. #21
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    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 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Richard_35 Voir le message
    Citation Envoyé par Age_of_Aquarius Voir le message
    Supposons cette fois-ci que l'emprunteur n'a le droit d'emprunter qu'un seul livre à la fois. (Relation (0,1) - (0,1)).
    une nouvelle fois, tu tentes de regrouper plusieurs notions
    On est en train de traiter des emprunts en cours, comme ça a été dit ici (et l’aspect historique a aussi été évoqué).

    Si on représente à la fois les emprunts en cours et leur historique, dans l’hypothèse où une personne ne peut emprunter qu’un livre à la fois, le diagramme devient :



    La table EMPRUNT_EN_COURS a deux clés : {LivreId} qui est clé primaire et {EmprunteurId} qui est clé alternative.
    La table EMPRUNT_HISTO a deux clés : {LivreId, PeriodeEmprunt} qui est clé primaire et {EmprunteurId, PeriodeEmprunt} qui est clé alternative.


    Citation Envoyé par Richard_35 Voir le message
    Ton erreur vient de deux choses, dans ton précédent message :
    tu fais intervenir la notion de temps dans une relation 0,1 ;
    tu pars de la table associative : une table associative est une conséquence d'un modèle conceptuel, pas une base de travail.
    Quelles causes d'erreur ?

    1) A propos du temps, il suffit de faire la distinction entre depuis (aspect en cours) et durant (aspect historique) :

    Le livre L peut être détenu depuis la date D par l’emprunteur E ;
    Le livre L a pu être détenu durant la période P par l’emprunteur E.

    2) On peut considérer qu’une table est une conséquence d’un modèle conceptuel si on est merisien ou d’un diagramme de classes si on est uèmélien, question de sensibilité. Les tenants du Modèle Relationnel de Données ignorent tout ça et modélisent une base de données au moyen de relvars (dont les tables SQL sont des images plus ou moins fidèles) respectant au moins la forme normale de Boyce-Codd : la théorie relationnelle fournit tous les outils nécessaires pour ne pas modéliser au doigt mouillé (axiomes d'Armstrong, théorème de Heath, théorème de Bernstein, algorithmes en tous genres and all that jazz).

    N.B. Le bonhomme NULL est interdit de séjour au Relationland.
    (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.

  2. #22
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    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 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut
    Bonjour Richard,


    Dans votre représentation, vous utilisez le verbe Emprunter tout court :
    Livre -0,1---[Emprunter]---0,1- Emprunteur

    sans tenir compte de la dimension temporelle.

    Si on tient compte de cette dimension, selon la théorie relationnelle, on doit faire la distinction entre Depuis (Since) et Durant (During), d’où la représentation (où DateEmprunt est du type Date et PeriodeEmprunt du type Période, ce qui est très différent) :




    Ou, selon la notation Merise :



    On vise ici à respecter la 6e forme normale.
    (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. #23
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Fsmrel,

    Citation Envoyé par Fsmrel
    Dans votre représentation, vous utilisez le verbe Emprunter tout court :
    Livre -0,1---[Emprunter]---0,1- Emprunteur
    sans tenir compte de la dimension temporelle.
    ==> vous avez parfaitement raison, merci. J'ai, d'ailleurs, supprimé mon dernier message.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  4. #24
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Bonjour à tous,

    J'avoue que je ne maitrise pas encore parfaitement tout l'aspect temporaire dans la modélisation et les relations ternaires , par exemple, dans quels cas il faut mettre un attribut temporel d'association au lieu de créer une entité-type pour ça, qui est souvent membre dans une relation ternaire. Je vais lire le document (normalisation.pdf) de fsmrel pour essayer de mieux comprendre tout ça.

    Autre question SVP, est-ce que tout ce qu'on a dit à propos des associations (0,1)-(0,1) et (0,1)-(0,n) s'applique sans exceptions au associations réflexives, surtout les cas qui demandent la création des nouvelles tables pour éviter le NULL de la clé étrangère ? Est-ce que MySQL Workbench gère bien ce genre d'associations ?

    Merci et bonne soirée.

  5. #25
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 792
    Points : 34 016
    Points
    34 016
    Billets dans le blog
    14
    Par défaut
    Un principe général simple à retenir :
    - si tu as besoin de faire des requêtes sur toutes les dates, même s'il n'y a pas de donnée associée à une date, modélise un calendrier qui sera au minimum composé d'une entité type représentant chaque jour du calendrier ;
    - si tu n'as pas besoin d'avoir toutes les dates possibles dans la BDD, utilise simplement une colonne de date là où tu en as besoin.

    Pour reprendre ton exemple d'emprunts de livres, si tu as besoin de statistiques concernant le nombre de livres empruntés par catégorie et par jour d'ouverture de la bibliothèque, il te faudra enregistrer dans la base de données tous les jours où la bibliothèque est ouverte car tous les types de livres ne feront pas forcément l'objet d'un emprunt chaque jour. Peut-être que le mercredi 13 janvier 2013, aucun livre de science fiction n'a été emprunté et que le 8 janvier ce sont les livres de philosophie qui n'ont pas été empruntés.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #26
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    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 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Age_of_Aquarius Voir le message
    Est-ce que tout ce qu'on a dit à propos des associations (0,1)-(0,1) et (0,1)-(0,n) s'applique sans exceptions au associations réflexives, surtout les cas qui demandent la création des nouvelles tables pour éviter le NULL de la clé étrangère ? Est-ce que MySQL Workbench gère bien ce genre d'associations ?
    Pas de problème avec MySQL Workbench.


    Citation Envoyé par CinePhil Voir le message
    si tu n'as pas besoin d'avoir toutes les dates possibles dans la BDD, utilise simplement une colonne de date là où tu en as besoin.
    Comme dirait Théo (in Les tontons flingueurs), c’est un peu sommaire... La prise en compte raisonnée du temps dans les bases de données relationnelles, c’est quand même plus de 400 pages dans Temporal Data & the Relational Model, dont je rends compte très partiellement ici. Ceux qui font la norme SQL se sont même cassé les dents sur le sujet en leur temps...

    Voyez aussi le pdf de Darwen.

    Deux mots clés quand même dans le contexte de la modélisation, et que j'ai évoqués dans cette discussion : depuis (since) et durant (during).
    (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. #27
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    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 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut
    Bonsoir Age_of_Aquarius,


    J'ai omis de vous fournir un lien vers un post où j'ai représenté une nomenclature avec Workbench : c'est ici (ça a l'air d'avoir rendu service à quelques uns...)
    (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. #28
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Bonsoir,

    Je tient à vous remercier de m'avoir aidé. J'ai appris beaucoups de choses grace à vos conseils.
    Ce-ci est ma première discussion dans ce forum et je ne m'attendais pas de trouver des gens aussi serviables et sympas.

    Bonne soirée et à la prochaine.

  9. #29
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Bonjour à tous,

    Je reviens sur la question de dimension temporelle expliquée par fsmrel ici.

    Si je part du MCD suivant :

    En introduisant la dimension temporelle, on obtient Le MLD de fsmrel avec une clé primaire : (LivreID, PeriodeEmprunt) et une clé alternative (EmprunteurID, PeriodeEmprunt).
    Si je part maintenant du MCD suivant :

    En introduisant la dimension temporelle, on obtient le même MLD sauf que cette fois-ci il y a une seule clé primaire : (LivreID, PeriodeEmprunt) mais pas de clé alternative.

    Est-ce qu'il y a un outil dans MySQL Workbench pour faire la différence entre les deux MLD ? Par exemple un moyen qui permet de définir la clé alternative dans le premier MLD ?

    Merci.

  10. #30
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    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 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut Clés alternatives : palliatifs
    Bonsoir Age_of_Aquarius,


    Représenter les clés alternatives n’est pas intuitif avec Workbench. On pallie graphiquement avec ses propres mickeys (clé verte ou autre artifice)...

    Mais dessiner ne suffit pas... Pour produire la clé alternative {Emprunteur_Id, PeriodeEmprunt} pour la table EMPRUNT_HISTO, il faut passer par quelque chose de pas très (même pas du tout) relationnel, à savoir un index de type UNIQUE, chose qui est plutôt du niveau physique, mais bon, on ne va pas faire la fine bouche...

    Vous sélectionnez l’onglet « Indexes » et définissez à votre guise un index de ce type (EMPRUNT_HISTO_UNIQUE dans l’exemple ci-dessous) en cochant les cases qui vont bien pour les colonnes :




    Dans le cas de la table EMPRUNT_EN_COURS (voir ici), on pouvait cocher une case UNIQUE (onglet « Columns ») parce que la clé alternative ne comportait qu’une colonne, mais manifestement, Workbench est ainsi câblé :

    [Colonne de table]----0,1----(Cocher)----0,1----[Case UQ] !

    Bon, passons...

    Le code SQL produit par l’outil est le suivant en ce qui concerne l’index EMPRUNT_HISTO_UNIQUE :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UNIQUE INDEX `EMPRUNT_HISTO_UNIQUE` (`EmprunteurId` ASC, `PeriodeEmprunt` ASC)
    En dehors de MySQL (par exemple avec DB2, SQL Server, Oracle, etc.), en conformité avec la norme SQL, il faudra remplacer ce code par :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT UNIQUE EMPRUNT_HISTO_UNIQUE (EmprunteurId, PeriodeEmprunt)
    Ceci vaut du reste pour la table EMPRUNT_EN_COURS, pour laquelle il faudra remplacer :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UNIQUE INDEX `EmprunteurId_UNIQUE` (`EmprunteurId` ASC)
    Par :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT UNIQUE EmprunteurId_UNIQUE (EmprunteurId)
    Sans oublier de faire le ménage dans les index faisant double emploi (1res colonnes participant à la fois à une clé candidate (primaire ou alternative) et à une clé étrangère).
    (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.

  11. #31
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Bonjour fsmrel,

    Merci encore une fois, c'est vraiment très bien expliqué.

    Bonne journée.

  12. #32
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    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 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut
    Bonjour Age of Aquarius,


    Si tout cela a pu vous aider, n'hésitez pas à voter

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

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [MLD] Association réflexive dans MySQL Workbench
    Par Age_of_Aquarius dans le forum Schéma
    Réponses: 6
    Dernier message: 08/08/2013, 21h22
  2. cmt insérer des fichiers dans une BD dans MySQL Workbench?
    Par electronnne dans le forum Débuter
    Réponses: 10
    Dernier message: 23/05/2012, 09h41
  3. Menu 'Recherche' grisé dans mysql workbench
    Par NicolasTT dans le forum Outils
    Réponses: 0
    Dernier message: 09/11/2011, 15h32
  4. Les relations dans MySQL Workbench ?!
    Par Boris56 dans le forum Outils
    Réponses: 0
    Dernier message: 22/08/2011, 20h36
  5. Réponses: 1
    Dernier message: 14/03/2010, 20h08

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