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 :

Lequel de mes MCD est correct ?


Sujet :

Schéma

  1. #41
    Futur Membre du Club
    Femme Profil pro
    automaticienne
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : automaticienne
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Bonsoir,

    En attendant, voici une alternative à la modélisation que je vous ai proposée précédemment, qui consiste utiliser une nomenclature et la parcourir récursivement.
    si je comprend bien la première solution utilise l'héritage et celle-ci utilise la récursivité?
    Et dans ce cas nomenclature remplace les trois entités d'avant (compte_client, compte_service et compte_sous_service)!

    Je pense que pour le traitement des données et de l'espace celle-ci sera moins gourmande, non!.


    Citation Envoyé par fsmrel Voir le message
    Au fait, quel est votre SGBD ?

    Au cas ou vous utiliseriez ACCESS, je pense que l’excellent f-leb se fera un plaisir de vous montrer comment traiter de l’arborescence dans ce contexte.

    Concernant MySQL, je n’ai pas d’idée, je ne le connais que très imparfaitement...
    En ce qui concerne mon choix du SGBD j’hésite entre postgreSQL et Mysql, je n'ai toujours pas pris de décision, une proposition? en fait j'avance petit à petit.

    merci

  2. #42
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Postgresql est plus rigoureux, plus conforme à la norme SQL, c'est un meilleur choix.
    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 !

  3. #43
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 965
    Points : 30 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par jogodepau Voir le message
    si je comprend bien la première solution utilise l'héritage et celle-ci utilise la récursivité?
    Et dans ce cas nomenclature remplace les trois entités d'avant (compte_client, compte_service et compte_sous_service)!
    Voui !

    Citation Envoyé par jogodepau Voir le message
    Je pense que pour le traitement des données et de l'espace celle-ci sera moins gourmande, non!
    Rien n'est moins sûr, surtout ne pariez rien à ce sujet ! Seul un prototypage de performances permettrait d'avoir un avis objectif.

    En revanche, l'utilisation de l'union récursive telle que je l'ai proposée n'est pas possible avec MySQL.


    Citation Envoyé par CinePhil Voir le message
    Postgresql est plus rigoureux, plus conforme à la norme SQL, c'est un meilleur choix.
    CinePhil est la voix de la sagesse. Pour ma part, s'il fallait choisir, je n'hésiterais pas. Avec MySQL, adieu l'union récursive, adieu les triggers de mise à jour des vues et adieu sans doute plein d'autres bonnes choses.
    (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. #44
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 965
    Points : 30 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Citation Envoyé par jogodepau Voir le message
    si tu regarde mon schéma et celui de fesmel quand lui n'a que des o mois j'ai o| et quand lui a des | moi j'ai || et je ne comprend pas d'ou cela viens
    Son schéma E/R n'est pas fait avec MySQL Workbench.
    CinePhil a raison. Chaque éditeur d’AGL a ses petites variantes et fantaisies. En l’occurrence, il faut remonter à IE (Information Engineering) de James Martin et Clive Finkelstein pour retrouver la représentation d’origine (30 ans déjà...)

    Avec Power AMC, dans la représentation ci-dessous, « o » signifie 0,1 au sens Merise du terme, tandis que la petite barre « | » signifie 1,1 : il n’y a aucune équivoque, dans le doute il faut commencer par lire attentivement le mode d’emploi.

    (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. #45
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 965
    Points : 30 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut Modélisation avec Workbench
    Bonsoir jogodepau,


    A propos de l’utilisation de MySQL Workbench qui a l’avantage d’être gratuit, voici un bout de mode d’emploi qui peut vous intéresser, ainsi que ceux qui ont à produire des diagrammes logiques.

    Par exemple, le diagramme logique de référence à traduire en Workbench est le suivant :


    Ce diagramme traduit les règles de gestion des données suivantes :

    (R1) Un client a au moins un compte et un compte appartient à exactement un client ;

    (R2) Une description de compte peut caractériser plusieurs comptes et un compte est caractérisé par une seule description ;

    (R3) Un compte sert pour au moins un véhicule d’un client et un véhicule ne fait référence qu’à un seul compte ;

    (R4) Les comptes font l’objet d’une nomenclature : un compte peut être rattaché à exactement un compte et un compte peut servir de rattachement pour plusieurs comptes.


    Modélisons donc dans le contexte Workbench. On commence par définir la table CLIENT :



    Pour gagner un peu de place à l’écran, on peut évacuer la partie Indexes dans la représentation d’une table, comme je l'ai fait ci-dessus. La situation initiale est par défaut la suivante (Workbench Default) :



    En passant au mode simplifié (Workbench Simplified)) :

    Model > Object Notation > Workbench Simplified
    =>





    Fermons la parenthèse. On définit ensuite la table COMPTE_DESCRIPTION, laquelle (comme la table CLIENT) correspond à une entité-type forte, c'est-à-dire qu’elle ne dépend d’aucune autre :





    Puis on définit la table COMPTE (vide) :




    On établit l’association entre les tables CLIENT et COMPTE. Comme la table COMPTE correspond à une entité-type faible (identifiée relativement à CLIENT), on utilise donc le type d’association qui va bien (Identifying Relationship) :



    On clique alors (dans l’ordre) sur la table COMPTE puis sur la table CLIENT : apparaît le lien qui signifie qu’un client est en relation avec au moins un compte et qu’un compte fait référence a exactement un client. L’attribut ClientId de la table CLIENT a été hérité par la table COMPTE, sous le nom CLIENT_ClientId. En outre, le lien étant identifiant, cet attribut fait partie de la clé primaire de COMPTE :



    On complète l’en-tête de la table COMPTE, en prenant en compte les attributs manquants. On en profite pour renommer l’attribut CLIENT_ClientId en ClientId (il s’agit là d’une simple question de convention purement personnelle). A noter que l’attribut CompteId fait partie de la clé primaire de la table :

    Au résultat :



    On associe maintenant COMPTE et COMPTE_DESCRIPTION, mais sans identification relative, on utilise donc un lien non identifiant :



    Au résultat (le lien n’étant pas identifiant, il est en pointillés) :



    On peut noter que l’attribut CompteDescrId qui figure dans l'en-tête de la table COMPTE donne lieu à une clé étrangère (losange rougeâtre), laquelle fait référence à la clé primaire de la table COMPTE_DESCRIPTION.

    On notera aussi que l’attribut CompteDescrLibelle de la table COMPTE_DESCRIPTION est devenu obligatoire (NOT NULL) car c’était un oubli de notre part et nous l’avons réparé (le losange à fond blanc accompagnant cet attribut dans les images précédentes est devenu bleu).

    Au vu de la cardinalité 1,N, une description de compte est en relation avec au moins un compte. Or, selon la règle de gestion (R2) la cardinalité doit être 0,N. Pour se mettre en conformité, on procède ainsi :

    1) clic droit sur le lien entre COMPTE_DESCRIPTION et COMPTE,

    2) Clic sur « Edit Relationship » :



    On sélectionne ensuite l’onglet « Foreign Key » comme ci-dessous, puis on décoche la case « Mandatory » côté COMPTE (Referencing table) :



    Au résultat, on est passé de 1,N à 0,N :



    La création de la table VEHICULE n’appelle pas de commentaires particuliers. On tire un lien identifiant entre les tables COMPTE et VEHICULE, comme on l’a fait entre les tables CLIENT et COMPTE, avec au résultat la propagation (héritage) de la clé primaire de la table COMPTE :



    Au besoin on renomme les attributs. On complète l’en-tête de la table VEHICULE avec les attributs manquants, VehiculeId (qui participe à la clé primaire de la table) et VehiculeNom :



    Le cas de la nomenclature est intéressant. En effet, il y a deux liens à établir entre les tables COMPTE et NOMENCLATURE, le premier pour signifier qu’un compte peut être « enfant » d’un autre compte, le second pour signifier qu’un compte peut être « parent » d’autres comptes.

    En vertu de la règle de gestion (R4), un compte ne peut être l’« enfant » que d’un seul compte (cardinalité 0,1). Par ailleurs, NOMENCLATURE correspond à une entité-type faible, d’où identification relative (1:1 Identifying Relationship selon Workbench) :



    Après avoir établi le lien, on obtient :

    Mais la règle de gestion (R4) n’est pas respectée, car ici un compte est nécessairement — à tort — l’enfant d’un autre compte. Comme dans le cas du lien entre COMPTE_DESCRIPTION et COMPTE, après avoir cliqué sur le lien puis sur « Edit Relationship », on sélectionne l’onglet « Foreign Key » comme ci-dessous, puis on décoche la case « Mandatory » côté NOMENCLATURE (Referencing table) :

    Au résultat :



    On établit maintenant le second lien entre les tables COMPTE et NOMENCLATURE. Ce lien est de cardinalité 0,N et n’est pas identifiant. On procède comme dans le cas du lien établi entre COMPTE_DESCRIPTION et COMPTE. Au résultat :



    Par ailleurs, Workbench n’est pas censé savoir que les liens de parenté ne peuvent être établis qu’entre comptes d’un seul et même client, d’où la présence dans l’en-tête de la table NOMENCLATURE de deux attributs relevant du client, COMPTE_ClientId et COMPTE_ClientId1. Pour être sûr que les comptes sont ceux du même client, on supprime l’attribut COMPTE_ClientId1. Ensuite, on renomme les attributs selon son goût, par exemple COMPTE_ClientId en CLientId, COMPTE_CompteId en CompteId et COMPTE_CompteId1 en CompteParentId :



    Mais tout n’est terminé concernant la table NOMENCLATURE. En effet, l’attribut ClientId participe aussi à la clé étrangère {ClientId, CompteParentId} référençant la clé primaire {ClientId, CompteId} de la table COMPTE (rôle « est parent »). Pour qu’il en soit ainsi, on clique sur l’onglet « Foreign Keys », on sélectionne la clé étrangère parente et on coche la case ClientId, avec ClientId pour « Referenced Column » (c'est-à-dire dans la table COMPTE) :


    Avant génération du code SQL, il n’est pas inutile de vérifier que les attributs des clés primaires et des clés étrangères sont dans le bon ordre. A titre d’exemple, si au lieu de commencer par tirer le lien entre les tables CLIENT et COMPTE, on avait commencé par définir les attributs de l’en-tête de la table COMPTE non hérités de la table CLIENT, l’ordre des attributs composant la clé primaire de la table CLIENT n’aurait pas été le bon et il aurait fallu les permuter. Même chose pour les tables VEHICULE et NOMENCLATURE, car l’ordre des attributs s’y propage. Prenons le cas par exemple de la table NOMENCLATURE, en ouvrant l’onglet INDEXES, on aurait constaté l’inversion dans l’ordre des attributs de la clé primaire (même chose concernant les clés étrangères) :


    Quand tout a été remis à l'endroit et qu'on en a terminé, il n’y a plus qu’à produire le code SQL de création des tables :





    J'espère qu'il n'y a pas trop d'erreurs de copier/coller, qui de toutes façons n'échapperont pas à Oeil-de-Lynx, je veux dire CinePhil (voire f-leb, si ACCESS ne l'accapare pas trop)...
    (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. #46
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par fsmrel
    J'espère qu'il n'y a pas trop d'erreurs de copier/coller, qui de toutes façons n'échapperont pas à Oeil-de-Lynx, je veux dire CinePhil
    Il est tard et mon oeil de lynx est sans doute un peu fatigué mais je n'ai rien vu d'anormal.

    Ainsi, après avoir regardé le destin de Rome, j'ai l'honneur de te gratifier d'un :
    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 !

  7. #47
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 965
    Points : 30 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ainsi, après avoir regardé le destin de Rome, j'ai l'honneur de te gratifier d'un :
    C'est trop d'honneur, mais après tout, encore, encore,
    A vot' bon coeur M'sieurs Dames ! Soutenez notre effort !
    (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. #48
    Futur Membre du Club
    Femme Profil pro
    automaticienne
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : automaticienne
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 8
    Points
    8
    Par défaut
    Bonsoir,

    Vraiment chapeau fesmel et à une heure si tardive, je vous remercie tous beaucoup pour le grand soutien que vous m'apportez.

    Quand on a pas pratiqué depuis si longtemps (depuis la fin des études!!) , merci pour tout et ça servira à plus d'un j'en suis sûr.


  9. #49
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 965
    Points : 30 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par jogodepau Voir le message
    Bonsoir,

    Quand on a pas pratiqué depuis si longtemps (depuis la fin des études!!)
    C'est si lointain ? (En passant, je ne sais pas qui est fesmel, moi c'est fsmrel...)
    (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. #50
    Futur Membre du Club
    Femme Profil pro
    automaticienne
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : automaticienne
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 8
    Points
    8
    Par défaut
    bonjour fsmrel,

    excuse moi d'écorcher ton nom, oui c'est depuis 2003!
    Bonne journée.

  11. #51
    Futur Membre du Club
    Femme Profil pro
    automaticienne
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : automaticienne
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 8
    Points
    8
    Par défaut
    Re:

    j'ai refais le model sur Workbench et j'ai un petit soucis sur la table nomenclature.

    alors sur l'onglet indexes:
    1- ma primary ce qui est coché ClientId 1 ASC & CompteId 2 ASC là je pense que c'est ok.

    2-J'ai NOMENCLATURE_PARENT_FK type INDEX? je trouve pas de type foreign key parmi les choix proposés (ça cloche!); coché ClientId 2 ASC & CompteParentId 1 ASC là aussi je pense que c'est ok.

    3- NOMENCLATURE_ENFANT_FK est inexistante?? qu'es ce qui cloche ici ou on doit la rajouter nous même?

    merci encore.

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


    Ça serait plus pratique si vous affichiez des captures d’écran...

    Normalement, vous devriez déjà avoir ceci, avec les pointillés, les couleurs, les noeunoeuds et les rubans qui vont bien :





    Pour l’onglet « Foreign Keys » :








    Qu’en est-il ?
    (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.

  13. #53
    Futur Membre du Club
    Femme Profil pro
    automaticienne
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : automaticienne
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Bonjour,

    Qu’en est-il ?
    Pour tout cela c'est ok j'ai les même données, c'est sur l'onglet indexes que ça cloche!
    voici mes captures d'écran.

    alors que vous vous avez
    Citation Envoyé par fsmrel Voir le message
    Prenons le cas par exemple de la table NOMENCLATURE, en ouvrant l’onglet INDEXES, on aurait constaté l’inversion dans l’ordre des attributs de la clé primaire (même chose concernant les clés étrangères) :

    .
    La différence est dans le fait que
    1- le type de la clé nomenclature_parent_fk qui est de type index est pas foreign.
    2- la clé nomenclature n'existe pas chez moi?
    es-ce une anomalie ou es-ce que j'ai fais un truc de travers?

    merci

  14. #54
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    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 965
    Points : 30 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Je pense comprendre. MySQL tricote allègrement le niveau relationnel (d’essence algébrique/logique des prédicats : une table est un ensemble et la lecture que l'on fait de son en-tête correspond à celle d'un prédicat) et le niveau physique (les index sont de la quincaillerie, des turbos, pour faire court ils servent essentiellement à accéder au plus vite à l’information sur le disque).

    Par exemple, pour accéder à une ligne de la table NOMENCLATURE, disons au client <cli01, cpt02>, pour éviter de balayer complètement la table (pendant ce temps-là, vous auriez le temps de vous tricoter un bonnet ), le SGBD utilisera l’index de clé {ClientId, CompteId} et la réponse sera instantanée .

    Dans ce que je vous ai proposé, il y a en fait deux index de clé {ClientId, CompteId}, celui qui est nommé PRIMARY et celui qui est nommé NOMENCLATURE_ENFANT_FK, mais est-il bien nécessaire d’avoir en fait deux fois le même index ? Bien sûr que non, l’index NOMENCLATURE_ENFANT_FK doit partir à la poubelle et manifestement c’est ce qui s’est produit de façon automatique dans votre cas... Conclusion : j’utilise une version de Workbench 5.1.18 OSS avec laquelle c’est à moi de faire le ménage, tandis que vous utilisez manifestement une version plus récente, moins bourrin (auquel cas quelle est-elle ?) qui vous dispense de cette tâche...


    N.B. Attention à surveiller l’ordre des attributs dans les clés : ClientId toujours en premier.
    (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. #55
    Futur Membre du Club
    Femme Profil pro
    automaticienne
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : automaticienne
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 8
    Points
    8
    Par défaut
    Bonjour fsmrel,

    Citation Envoyé par fsmrel Voir le message
    Conclusion : j’utilise une version de Workbench 5.1.18 OSS avec laquelle c’est à moi de faire le ménage, tandis que vous utilisez manifestement une version plus récente, moins bourrin (auquel cas quelle est-elle ?) qui vous dispense de cette tâche...
    La version que j'utilise est Workbench 5.2.34 CE

    Citation Envoyé par fsmrel Voir le message
    N.B. Attention à surveiller l’ordre des attributs dans les clés : ClientId toujours en premier.
    Sans exception aucune?
    car dans ma table véhicule il est en 2 après véhiculeId.

    Je voulais savoir, peut-on représenter l'exclusion dans Workbench, car je veux passer à la deuxième partie du modèle (les stock) et lier les deux après.

    Ci-joint le model à gauche( j'ai pas fais de liens entre matériels et sim, balises, antennes car je ne sais pas comment faire, par contre j'ai suivi la même logique pour faire type_materiels et stock description qui représente
    stock_occupé, stock_disponible, stock_quarantaine,stock_supprimé, stock_SAV.

    Bonne journée.

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


    Avant de passer aux antennes...


    Citation Envoyé par jogodepau Voir le message
    Je voulais savoir, peut-on représenter l'exclusion dans Workbench ?
    Dans la palette que propose Workbench 5.1.18 OSS, je ne vois rien à ce sujet et je doute qu'il en aille différemment avec votre version : il faudra mettre en oeuvre une contrainte SQL (ASSERTION) ou un trigger si votre SGBD ne propose pas l’instruction CREATE ASSERTION.

    Citation Envoyé par jogodepau Voir le message
    Citation Envoyé par fsmrel Voir le message
    N.B. Attention à surveiller l’ordre des attributs dans les clés : ClientId toujours en premier.
    Sans exception aucune?
    car dans ma table véhicule il est en 2 après véhiculeId.
    Sans exception aucune, fondamentalement pour des raisons de performance de la base de données, disons lors des opérations de jointure (sinon, une fois de plus, vous auriez le temps de vous tricoter un bonnet pendant l’exécution d’une requête). L’ordre des attributs composant la clé primaire de la table VEHICULE doit être le suivant : ClientId, CompteId, VehiculeId. Même chose pour la clé étrangère en relation avec la clé primaire de la table COMPTE : ClientId, CompteId. Par ailleurs si Workbench générait un index pour la clé primaire et un deuxième pour la clé étrangère (cas de Workbench 5.1.18), il est évident que le 2e ne servirait à rien et devrait disparaître.
    (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.

  17. #57
    Futur Membre du Club
    Femme Profil pro
    automaticienne
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : automaticienne
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    J'ai arrangé les choses et voici le script qui en découle, merci de me dire si c'est ok ou reste-il des choses à revoir?

    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

    CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
    USE `mydb` ;

    -- -----------------------------------------------------
    -- Table `mydb`.`CLIENT`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`CLIENT` (
    `ClientId` INT NOT NULL ,
    `ClientNom` VARCHAR(45) NOT NULL ,
    PRIMARY KEY (`ClientId`) )
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `mydb`.`COMPTE_DESCRIPTION`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`COMPTE_DESCRIPTION` (
    `CompteDescId` INT NOT NULL ,
    `CompteDescLibelle` VARCHAR(45) NOT NULL ,
    PRIMARY KEY (`CompteDescId`) )
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `mydb`.`COMPTE`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`COMPTE` (
    `ClientId` INT NOT NULL ,
    `CompteId` INT NOT NULL ,
    `CompteDate` DATE NOT NULL ,
    `CompteDescId` INT NOT NULL ,
    PRIMARY KEY (`ClientId`, `CompteId`) ,
    INDEX `COMPTE_DESCRIPTION_FK` (`CompteDescId` ASC) ,
    CONSTRAINT `COMPTE_CLIENT_FK`
    FOREIGN KEY (`ClientId` )
    REFERENCES `mydb`.`CLIENT` (`ClientId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
    CONSTRAINT `COMPTE_COMPTE_DESCRIPTION_FK`
    FOREIGN KEY (`CompteDescId` )
    REFERENCES `mydb`.`COMPTE_DESCRIPTION` (`CompteDescId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `mydb`.`VEHICULE`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`VEHICULE` (
    `ClientId` INT NOT NULL ,
    `CompteId` INT NOT NULL ,
    `VehiculeId` INT NOT NULL ,
    `VehImm` VARCHAR(45) NOT NULL ,
    `VehGespar` VARCHAR(45) NOT NULL ,
    PRIMARY KEY (`ClientId`, `CompteId`, `VehiculeId`) ,
    CONSTRAINT `VEHICULE_COMPTE_FK`
    FOREIGN KEY (`ClientId` , `CompteId` )
    REFERENCES `mydb`.`COMPTE` (`ClientId` , `CompteId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `mydb`.`NOMANCLATURE`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`NOMANCLATURE` (
    `ClientId` INT NOT NULL ,
    `CompteId` INT NOT NULL ,
    `CompteParentId` INT NOT NULL ,
    PRIMARY KEY (`ClientId`, `CompteId`) ,
    INDEX `NOMANCLATURE_PARENT_FK` (`CompteParentId` ASC, `ClientId` ASC) ,
    CONSTRAINT `NOMANCLATURE_ENFANT_FK`
    FOREIGN KEY (`ClientId` , `CompteId` )
    REFERENCES `mydb`.`COMPTE` (`ClientId` , `CompteId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
    CONSTRAINT `NOMANCLATURE_PARENT_FK`
    FOREIGN KEY (`CompteParentId` , `ClientId` )
    REFERENCES `mydb`.`COMPTE` (`CompteId` , `ClientId` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
    ENGINE = InnoDB;


    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


    Merci encore et bonne journée à vous.

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


    C’est à peu de choses près correct.

    Remplacer NOMANCLATURE par NOMENCLATURE (orthographe).

    Plus important : dans la table NOMENCLATURE, changer l’ordre des attributs dans ce qui suit :
    FOREIGN KEY (CompteParentId` , `ClientId` )
    REFERENCES `mydb`.`COMPTE` (`CompteId` , `ClientId` )

    Ceci fait, si vous utilisez un autre SGBD que MySQL, il faudra supprimer ce qui ne vaut pas pour ce SGBD et compléter avec ce que MySQL n’a pas produit.

    Exemple. Supposons que j’utilise SQL Server.

    Je supprime les instructions SET du début du script, propres à MySQL :
    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

    Je supprime les instructions SET de fin du script :
    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

    Je supprime l’instruction de création de création du schéma mydb (ou je l’aménage en fonction de mon SGBD) :

    CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;

    Même chose pour son utilisation :
    USE `mydb` ;

    Par exemple, je remplace « USE `mydb` ; » par « USE temp ; ».

    Je supprime tous les « IF NOT EXISTS » car purement MySQL.

    Pour la même raison, je supprime tous les « ENGINE = InnoDB ».

    Même chose pour tous les symboles « ` ».

    Je supprime tous les « mydb. ».

    Je supprime les clauses « INDEX » au sein des instructions « CREATE TABLE » (la mise œuvre des index fera l’objet d’une étape ultérieure).

    Au résultat :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    -- ----------------------------
    -- Table CLIENT
    -- ----------------------------
    CREATE TABLE CLIENT (
    ClientId INT NOT NULL,
    ClientNom VARCHAR(45) NOT NULL,
    PRIMARY KEY (ClientId)) 
    ;
    -- ----------------------------
    -- Table COMPTE_DESCRIPTION
    -- ----------------------------
    CREATE TABLE COMPTE_DESCRIPTION (
    CompteDescId INT NOT NULL,
    CompteDescLibelle VARCHAR(45) NOT NULL,
    PRIMARY KEY (CompteDescId))
    ;
    -- ----------------------------
    -- Table COMPTE
    -- ----------------------------
    CREATE TABLE COMPTE (
    ClientId INT NOT NULL,
    CompteId INT NOT NULL,
    CompteDate DATETIME NOT NULL,
    CompteDescId INT NOT NULL,
    PRIMARY KEY (ClientId, CompteId),
    CONSTRAINT COMPTE_CLIENT_FK FOREIGN KEY (ClientId)
               REFERENCES CLIENT (ClientId)
               ON DELETE NO ACTION ON UPDATE NO ACTION,
    CONSTRAINT COMPTE_COMPTE_DESCRIPTION_FK FOREIGN KEY (CompteDescId)
               REFERENCES COMPTE_DESCRIPTION (CompteDescId)
               ON DELETE NO ACTION ON UPDATE NO ACTION)
    ;
    -- ----------------------------
    -- Table VEHICULE
    -- ----------------------------
    CREATE TABLE VEHICULE (
    ClientId INT NOT NULL,
    CompteId INT NOT NULL,
    VehiculeId INT NOT NULL,
    VehImm VARCHAR(45) NOT NULL,
    VehGespar VARCHAR(45) NOT NULL,
    PRIMARY KEY (ClientId, CompteId, VehiculeId),
    CONSTRAINT VEHICULE_COMPTE_FK FOREIGN KEY (ClientId, CompteId)
               REFERENCES COMPTE (ClientId, CompteId)
               ON DELETE NO ACTION ON UPDATE NO ACTION)
    ;
    -- ----------------------------
    -- Table NOMENCLATURE
    -- ----------------------------
    CREATE TABLE NOMENCLATURE (
    ClientId INT NOT NULL,
    CompteId INT NOT NULL,
    CompteParentId INT NOT NULL,
    PRIMARY KEY (ClientId, CompteId),
    CONSTRAINT NOMENCLATURE_ENFANT_FK FOREIGN KEY (ClientId, CompteId)
               REFERENCES COMPTE (ClientId, CompteId)
               ON DELETE NO ACTION ON UPDATE NO ACTION,
    CONSTRAINT NOMENCLATURE_PARENT_FK FOREIGN KEY (ClientId, CompteParentId)
               REFERENCES COMPTE (ClientId, CompteId)
               ON DELETE NO ACTION ON UPDATE NO ACTION)
    ;
    (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.

  19. #59
    Futur Membre du Club
    Femme Profil pro
    automaticienne
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : automaticienne
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 8
    Points
    8
    Par défaut
    Re:

    Et voilà la modification, en fait c'est moi j'ai effectuée le changement de tel sorte que clientId soit le premier dans tout (on c'est pas compris sur aucune exception!), merci maintenant j'ai compris le fonctionnement

    CREATE TABLE `NOMENCLATURE` (

    `ClientId` INT NOT NULL ,

    `CompteId` INT NOT NULL ,

    `CompteParentId` INT NOT NULL ,

    PRIMARY KEY (`ClientId`, `CompteId`) ,


    CONSTRAINT `NOMENCLATURE_ENFANT_FK`

    FOREIGN KEY (`ClientId` , `CompteId` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

    CONSTRAINT `NOMENCLATURE_PARENT_FK`

    FOREIGN KEY (`CompteParentId` , `ClientId` )


    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

  20. #60
    Futur Membre du Club
    Femme Profil pro
    automaticienne
    Inscrit en
    Mai 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : automaticienne
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2011
    Messages : 55
    Points : 8
    Points
    8
    Par défaut
    Bonjour fsmrel,

    Es-ce que maintenant je peux aborder la partie du stock (antennes...), ou es-ce que vous pensez que je devrais procéder autrement?

    merci pour votre aide.

Discussions similaires

  1. Ce MCD est-il correct?
    Par bechir71 dans le forum Merise
    Réponses: 2
    Dernier message: 15/02/2014, 00h50
  2. [MCD]Est-ce que ce MCD est correct?
    Par nouras dans le forum Merise
    Réponses: 4
    Dernier message: 04/10/2013, 13h02
  3. lequel de mes CV est le meilleur
    Par slifer dans le forum CV
    Réponses: 18
    Dernier message: 26/11/2012, 13h10
  4. [MCD] Est-que mes cardinalités sont correctes ?
    Par Mika2008 dans le forum Schéma
    Réponses: 2
    Dernier message: 01/08/2009, 14h56
  5. [MCD] Est ce que ce MCD application de gestion de paie est correct ?
    Par hafcher dans le forum Schéma
    Réponses: 1
    Dernier message: 11/07/2008, 20h16

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