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

Modélisation Discussion :

MCD correspondant à UML avec héritage et composition


Sujet :

Modélisation

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut MCD correspondant à UML avec héritage et composition
    Bonjour,

    Voici un diagramme UML avec 4 classes :


    • B est abstraite
    • C hérite de B
    • D hérite de B
    • C est composée de 0 à N B


    Il existe pas mal de façon de modéliser le schéma de base de données correspondant.
    J'aurais tendance à ne créer que 3 tables (A, C et D), mais je trouve que ça fait pas mal de clés étrangères qui seront parfois vides...
    Quelle serait votre proposition de schéma de BD ?
    Par avance, merci pour votre aide !

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


    Une proposition :

    Du point de vue de la théorie relationnelle (ou Modèle Relationnel de Données), B mérite de faire l’objet d’une variable relationnelle (relvar, dont la table SQL est un avatar). En effet, cette théorie ne peut s’accommoder du bonhomme NULL, dont on se débarrassera en procédant ainsi. Par ailleurs, a vue de nez, votre système a un côté nomenclature prononcé, d’où le diagramme logique que je vous propose :




    Selon votre diagramme de classes, seul un objet C peut être composé. En conséquence, la contrainte (exprimée en Tutorial D) signifie : Une valeur de l’attribut IdbParent de la table N ne peut pas être une valeur de l’attribut IdB de la table D.
    Si vous utilisez SQL, la contrainte fera l’objet d’une assertion (ou d’un trigger si votre SGBD ne connaît pas l’instruction CREATE ASSERTION).
    (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
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Bonjour fsmrel et merci pour votre réponse intéressante.
    J'ai tardé à répondre mais j'avoue avoir eu du mal à bien comprendre les explications, certaines notions me faisant défauts (avatar, bonhomme null, nomenclature prononcée...) .
    Bref, en étudiant plus attentivement le schéma, je crois avoir compris la logique. Pour reformuler avec mes mots :
    • Comme dans le modèle objet, B permet essentiellement de gérer les attributs communs à C et D.
    • N permet de gérer la composition et la relation parent / enfant entre C et B. On aurait pu mettre le champ IdBParent dans la table B mais si je comprends bien on crée cette table pour éviter d'avoir des null.
    • IdB permet de faire le lien entre toutes les tables.
    • La contrainte permet de vérifier qu'un objet D n'a pas d'enfant.


    Merci de me corriger si je me trompe...
    En tout cas je n'aurais pas pensé à cette solution qui me plait bien, la mienne étant plus basique et moins élégante.
    Si quelqu'un a une autre solution et souhaite contribuer, je suis preneur !

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


    Citation Envoyé par thomine Voir le message
    Comme dans le modèle objet, B permet essentiellement de gérer les attributs communs à C et D.
    Oui.
    Citation Envoyé par thomine Voir le message
    N permet de gérer la composition et la relation parent / enfant entre C et B.
    Oui, mais D est traité exactement comme C (symétrie parfaite, d’où la nécessité de la contrainte, permettant de garantir la dissymétrie apparaissant dans votre diagramme de classes).

    Citation Envoyé par thomine Voir le message
    On aurait pu mettre le champ IdBParent dans la table B mais si je comprends bien on crée cette table pour éviter d'avoir des null.
    Oui. Un SGBD relationnel digne de ce nom utilise un optimiseur qui est un système expert, donc basé sur la logique et qui utilise des tables de vérité. Mais le bonhomme NULL vient ficher la zoubia dans tout ça, c’est un inhibiteur d’optimiseur. Recherchez "tables de vérité" dans le message où Naf-Naf est à l’ouvrage.

    N.B. Attention au vocabulaire, le terme champ est disqualifié. En SQL on utilise celui de colonne et en Tutorial D (conforme à la théorie relationnelle), on utilise le terme attribut.

    Citation Envoyé par thomine Voir le message
    IdB permet de faire le lien entre toutes les tables.
    Oui.

    Citation Envoyé par thomine Voir le message
    La contrainte permet de vérifier qu'un objet D n'a pas d'enfant.
    Oui.

    Citation Envoyé par thomine Voir le message
    j'avoue avoir eu du mal à bien comprendre les explications, certaines notions me faisant défauts (avatar, bonhomme null, nomenclature prononcée...)
    Attention, ça n’est pas la nomenclature qui est prononcée, mais le côté... Je voulais dire qu’on subodore que votre système héberge une nomenclature...

    Si vous avez des questions sur le reste, n’hésitez pas à les poser.


    Bonne route !
    (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.

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Bonjour fsmrel.
    Je n'avais pas encore vu ta réponse. Merci beaucoup pour ces explications très complètes et instructives (la modélisation d'une BD, ça s'improvise pas !) et le temps passé.
    Les explications sont claires, je passe en résolu !

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/11/2011, 18h11
  2. Réponses: 4
    Dernier message: 28/02/2011, 16h50
  3. Réponses: 0
    Dernier message: 21/04/2009, 16h13
  4. Héritage VS Composition
    Par bolhrak dans le forum C++
    Réponses: 8
    Dernier message: 18/12/2006, 04h49
  5. Réponses: 7
    Dernier message: 23/10/2006, 20h59

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