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

Looping Discussion :

MCD-MLD et construction d'une clé alternative


Sujet :

Looping

  1. #1
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 088
    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 088
    Points : 31 342
    Points
    31 342
    Billets dans le blog
    16
    Par défaut MCD-MLD et construction d'une clé alternative
    Bonjour,

    Voici un MCD reprenant en partie celui d’une discussion créée dans le forum Schéma, voir le post #52. Dans ce MCD, on se contente des deux entités-types qui posent problème, MARQUE et MODELE (marque de voiture et modèle dans la marque) :
     
     
    Code SQL produit pat Looping :
     
    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 MARQUE(
       marqueId INT AUTO_INCREMENT,
       marqueNom VARCHAR(48) NOT NULL,
       CONSTRAINT MARQUE_PK PRIMARY KEY(marqueId),
       CONSTRAINT MARQUE_AK UNIQUE(marqueNom));
     
    CREATE TABLE MODELE(
       modeleId INT AUTO_INCREMENT,
       modeleNom VARCHAR(48) NOT NULL,
       marqueId INT NOT NULL,
       CONSTRAINT MODELE_PK PRIMARY KEY(modeleId),
       CONSTRAINT MODELE_MARQUE_FK FOREIGN KEY(marqueId) REFERENCES MARQUE(marqueId));
     
    A posteriori, il avait été jugé préférable d’utiliser l’identification relative :
     
     
    Mais c’était un peu tard.

    Cela dit, on devrait pouvoir demander à Looping de produire le code SQL suivant pour la table MODELE, où la paire {marqueId, modeleId} serait clé alternative :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE MODELE(
       modeleId INT AUTO_INCREMENT,
       modeleNom VARCHAR(48) NOT NULL,
       marqueId INT NOT NULL,
       CONSTRAINT MODELE_PK PRIMARY KEY(modeleId),
       CONSTRAINT MODELE_marqueId_modeleId_AK UNIQUE(marqueId, modeleId),
       CONSTRAINT MODELE_MARQUE_FK FOREIGN KEY(marqueId) REFERENCES MARQUE(marqueId)
     
    A cet effet, si j’ai bien compris, on procède ainsi :

    Dans un premier temps, dans la fenêtre Propriétés (MLD – SQL), pour "Proposer index composé" on choisit OUI.
     
     
    Ceci fait, dans le MCD on clique sur la patte connectant l’entité-type MARQUE et l’association Avoir. Looping me propose alors une fenêtre "Cardinalité", dans laquelle je précise comment je vois la construction de l’index composé, à savoir la paire {marqueId, modeleId} :
     
    Consciencieusement je répète la structure de l’index composé pour la rubrique modeleId de l’entité-type MODELE :
     
     
    Code SQL produit par Looping :
     
    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 MARQUE(
       marqueId INT AUTO_INCREMENT,
       marqueNom VARCHAR(48) NOT NULL,
       CONSTRAINT MARQUE_PK PRIMARY KEY(marqueId),
       CONSTRAINT MARQUE_AK UNIQUE(marqueNom));
     
    CREATE TABLE MODELE(
       modeleId INT AUTO_INCREMENT,
       modeleNom VARCHAR(48) NOT NULL,
       marqueId INT NOT NULL,
       CONSTRAINT MODELE_PK PRIMARY KEY(modeleId),
       CONSTRAINT MODELE_marqueId_modeleId_AK UNIQUE(modeleId, marqueId),
       CONSTRAINT MODELE_MARQUE_FK FOREIGN KEY(marqueId) REFERENCES MARQUE(marqueId));
     
    Soit. Je mets toutefois un bémol :
    Pour la contrainte MODELE_marqueId_modeleId_AK j’attendais la paire {marqueId, modeleId}, mais Looping permute les éléments et me propose la paire {modeleId, marqueId}...

    D’accord, ça n’est pas fondamental, mais ça perturbe un poil...

    Paprick, ai-je raté quelque chose dans ma construction ?
    (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. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 264
    Points : 39 399
    Points
    39 399
    Billets dans le blog
    9
    Par défaut
    Ce n'est pas fondamental, mais si je veux consulter rapidement tous les modèles de la marque, avec une index cluster, dans cet ordre marqueId, modeleId ce sera très performant, alors que dans l'ordre inverse, ça le sera beaucoup moins :/
    C'est donc fâcheux aussi d'un point de vue performances.

  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 088
    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 088
    Points : 31 342
    Points
    31 342
    Billets dans le blog
    16
    Par défaut
    Ave Capitaine,

    Il est évident que les DBA partageront ton point de vue et rétabliront la situation.
    La maigre consolation avec l’ordre modeleId, marqueId : DB2 évitera sans doute de plonger dans la table MODELE...
    (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.

  4. #4
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 702
    Points : 2 829
    Points
    2 829
    Par défaut
    Bonjour,
    Citation Envoyé par fsmrel Voir le message
    Je mets toutefois un bémol :
    Pour la contrainte MODELE_marqueId_modeleId_AK j’attendais la paire {marqueId, modeleId}, mais Looping permute les éléments et me propose la paire {modeleId, marqueId}...
    D’accord, ça n’est pas fondamental, mais ça perturbe un poil...
    Paprick, ai-je raté quelque chose dans ma construction ?
    François, Capitaine, vous vous doutez bien que Looping n'allait pas laisser vos petits coeurs de DBA tout tristes et sans solution à ce type de problème !
    Voici donc la solution : au niveau de la zone "Autre Index" dans la fiche de la rubrique "modeleId", il suffit de rajouter la position dans l'index entre parenthèses => marqueId,modeleId(2)
    Essayez ça et dites-moi si cela vous convient !
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 088
    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 088
    Points : 31 342
    Points
    31 342
    Billets dans le blog
    16
    Par défaut
    Merci Père Noël, ça marche !
    (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
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 264
    Points : 39 399
    Points
    39 399
    Billets dans le blog
    9
    Par défaut
    Y a pas, Looping est épatant !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/09/2014, 14h31
  2. [MCD] SOS MCD/ MLD d'une election
    Par essaitiano dans le forum Schéma
    Réponses: 0
    Dernier message: 01/05/2011, 15h12
  3. [débutant C#]construction d'une dll en dotnet..
    Par just1980 dans le forum C#
    Réponses: 20
    Dernier message: 19/08/2010, 15h53
  4. Problème de construction d'une classe
    Par AraBorLeg dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2005, 19h07
  5. construction d'une classe
    Par r0d dans le forum C++
    Réponses: 10
    Dernier message: 16/09/2004, 17h35

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