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 :

Quel logiciel télécharger pour réaliser un MCD


Sujet :

Schéma

  1. #61
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    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 : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Je brandis également mon petit panneau 10/10 ! ... même si je regrette que la splendide "Miss PK" affichée par François ait ainsi été rayée !

    De cet exemple peut ainsi découler tout un bien beau principe sur le non-choix d'une clé primaire parmi un ensemble de candidates... mais soudain je suis pris d'effroi rien qu'à l'idée de voir la tête de mes étudiants de 1ère année d'IUT quand il va falloir expliquer tout ça, avec toute la problématique de requêtage SQL qui ira avec...
    Ils vont me regarder et se dire : "Oh c'est bon, on le sait que ton cheval, il va pas porter deux jockeys ! Vas-y, donne-la nous ta clé primaire...".
    Non, ce n'est peut-être pas si loin de la réalité de nos amphis toulousains, croyez-moi !

    Bref, il faut surement raison garder et accepter parfois certains manques pour arriver à enseigner l'essentiel...

    J'ai cependant pensé à une solution à certains de ces problèmes en utilisant, dans Looping, l'outil "Règle" : à l'occasion, jetez-y un œil complaisant, et regardez la façon dont on peut associer des règles de gestion et leur code SQL à un MCD qui serait en manque de ces règles et autres clés alternatives.
    C'est d'ailleurs amusant car l'exercice que m'avait soumis mon interlocuteur traitait également de courses de chevaux !
    Je vous le livre tel quel, sachant que, ne l'ayant pas vérifier à fond, il réclamera votre indulgence

    Nom : MCD fsmrel CIF5.jpg
Affichages : 3474
Taille : 127,5 Ko

    Le code SQL décrit dans les règles est rajouté à la suite de la création des tables.

    Voilà : allez-y, vous pouvez taper, c'est pas moi qui l'ai écrit !!!
    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

  2. #62
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut Well !
    J’ai donc utilisé l’outil "Règle".


    MCD :

    Nom : course_jockey_chevalregles).png
Affichages : 2239
Taille : 20,0 Ko

    En passant, j’ai ajouté l’attribut poids.

    Looping génère la table DOSSARD de la façon suivante :

    CREATE TABLE DOSSARD
    (
       courseId INTEGER,
       Numero SMALLINT,
       poids NUMERIC(4,2) NOT NULL,
       chevalId INTEGER NOT NULL,
       jockeyId INTEGER NOT NULL,
       PRIMARY KEY(courseId, Numero),
       FOREIGN KEY(courseId) REFERENCES COURSE(courseId),
       FOREIGN KEY(chevalId) REFERENCES CHEVAL(chevalId),
       FOREIGN KEY(jockeyId) REFERENCES JOCKEY(jockeyId)
    );
    
    ALTER TABLE DOSSARD 
        ADD CONSTRAINT  DOSSARD_JOCKEY  UNIQUE (courseId, jockeyId)
    ;
    ALTER TABLE DOSSARD 
        ADD CONSTRAINT  DOSSARD_CHEVAL  UNIQUE (courseId, chevalId)
    ;
    
    Cette fois-ci tout est bien en place. Telle le phénix, Miss Clé primaire renaît manifestement de ses cendres (ce qui ne sera pas pour vous déplaire !), mais dans le contexte SQL il n’y a rien à redire...

    Comme disait Jean (le majordome de Fernand Naudin) 10/10 et en cotant vache !

    En tout cas j’encourage tous les concepteurs à utiliser Looping et à lui faire de la pub ! (tout en y allant mollo avec les CIF…)

     
    (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. #63
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    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 : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Merci François !

    Et pour votre plus grand plaisir, la version 2.4 va bientôt sortir avec des rôles venant suffixer les clés primaires des sous-classes d'héritage, ainsi que la possibilité pour l'utilisateur de définir lui-même les types de données de son SGBD.
    Puis, un peu plus tard, la version 2.5 avec la mise en œuvre du fameux MLD graphique qui manque cruellement à certains !
    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

  4. #64
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Super ! J'ai hâte de voir ça

  5. #65
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et une version pour Linux ?
    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. #66
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    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 : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Et une version pour Linux ?
    Ce n'est pas l'envie qui me manquerait de produire un Looping pour Linux... Mais, mon collègue de développement et moi-même, après avoir fait nos armes sur Turbo Pascal (de Borland, mais déjà chez Microsoft avec MS-DOS... il y a plus de 30 ans de cela ), avons opté pour Visual C++ et nous faisons avec depuis plus d'un quart de siècle...

    Comme nous le savons tous, le passage d'un monde à l'autre n'étant pas une mince affaire, nous concentrons nos développements sur l'outil que nous maitrisons le mieux et qui est (d'avance pardon... )... le plus utilisé.
    Par ailleurs, même si l'on n'aime pas Windows, force est de reconnaître que les dernières IHM proposées sont quand même bien intuitives et faciles à appréhender.
    Et pour reprendre un post écrit en juin sur le fonctionnement de Looping sous Linux ou MacOs :

    Juste une précision concernant le fonctionnement de Looping avec Wine.
    Il est vrai que Wine a bien du mal à faire fonctionner certaines applications, surtout quand elles comportent de multiples libraires situées un peu partout sur le système.
    Une des particularités de Looping est d'être "monobloc" : un seul .exe totalement autonome qu'il suffit de lancer de n'importe où.
    J'ai pas mal de collègues à l'Université qui travaille sous Linux ou Mac : ils utilisent Looping avec Wine depuis pas mal de temps et n'ont jamais rencontré de problème.
    Je sais que cela ne suffira pas pour convaincre les anti-Windows, mais il faut reconnaître que Wine et Looping font bon ménage !


    Mais bon, il ne faut jamais dire : fontaine, je ne boirai pas de ton eau ! ... surtout lorsque l'on parle de code source !
    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

  7. #67
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    En tout cas j’encourage tous les concepteurs à utiliser Looping et à lui faire de la pub ! (tout en y allant mollo avec les CIF…)
    Oui et merci encore à Paprick pour ce beau travail

  8. #68
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    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 !

  9. #69
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonne année à tous !


    En passant, une observation concernant Looping et les contraintes d’inclusion.

    Je rappelle d’abord la définition de la contrainte d’inclusion, telle qu’elle fut donnée en 1990 par le groupe 135 de l’Afcet dans son Glossaire :

    Nom : Inclusion.jpg
Affichages : 1907
Taille : 552,0 Ko

    A son tour, Looping est bien entendu conforme :

    Nom : afcet135_inclusion_looping.png
Affichages : 1968
Taille : 20,6 Ko

    On sait toutefois que Looping (version 2.3) ne traduit pas cette contrainte dans le code SQL :

    CREATE TABLE CLASSE(
       classeId INTEGER,
       PRIMARY KEY(classeId)
    );
    
    CREATE TABLE MATIERE(
       matiereId INTEGER,
       PRIMARY KEY(matiereId)
    );
    
    CREATE TABLE ENSEIGNANT(
       enseignantId INTEGER,
       PRIMARY KEY(enseignantId)
    );
    
    CREATE TABLE ENSEIGNE(
       classeId INTEGER,
       matiereId INTEGER,
       enseignantId INTEGER,
       PRIMARY KEY(classeId, matiereId, enseignantId),
       FOREIGN KEY(classeId) REFERENCES CLASSE(classeId),
       FOREIGN KEY(matiereId) REFERENCES MATIERE(matiereId),
       FOREIGN KEY(enseignantId) REFERENCES ENSEIGNANT(enseignantId)
    );
    
    CREATE TABLE SAIT_ENSEIGNER(
       matiereId INTEGER,
       enseignantId INTEGER,
       PRIMARY KEY(matiereId, enseignantId),
       FOREIGN KEY(matiereId) REFERENCES MATIERE(matiereId),
       FOREIGN KEY(enseignantId) REFERENCES ENSEIGNANT(enseignantId)
    );
    

    Dans la table ENSEIGNE les deux clés étrangères faisant référence aux tables MATIERE et ENSEIGNANT sont donc à remplacer par une clé étrangère unique (cf. contrainte ENSEIGNE_SAIT_ENSEIGNER_FK ci-dessous) faisant référence à la table SAIT_ENSEIGNER.

    Si aux clés étrangères à supprimer était associé un nom de contrainte (reprenant par exemple le nom des rôles enseigne_matiere et enseigne_enseignant) alors on pourrait effectivement compléter le code SQL au moyen d’une règle Looping :

    ALTER TABLE ENSEIGNE
        DROP CONSTRAINT enseigne_matiere, enseigne_enseignant
    ;
    
    Tout en notant qu’ajouter dans la règle la contrainte pertinente ne pose pas de problème :

    ALTER TABLE ENSEIGNE
        ADD  CONSTRAINT ENSEIGNE_SAIT_ENSEIGNER_FK FOREIGN KEY(matiereId, enseignantId) 
              REFERENCES SAIT_ENSEIGNER(matiereId, enseignantId)
    ;
    

    En attendant, on modifie le code SQL manuellement :

    CREATE TABLE CLASSE
    (
            classeId       INTEGER             NOT NULL
        , CONSTRAINT CLASSE_PK PRIMARY KEY(classeId)
    ) ;
    
    CREATE TABLE MATIERE
    (
            matiereId      INTEGER             NOT NULL
        , CONSTRAINT MATIERE_PK PRIMARY KEY(matiereId)
    ) ;
    
    CREATE TABLE ENSEIGNANT
    (
            enseignantId   INTEGER             NOT NULL
        , CONSTRAINT ENSEIGNANT_PK PRIMARY KEY(enseignantId)
    ) ;
    
    CREATE TABLE SAIT_ENSEIGNER
    (
            matiereId      INTEGER             NOT NULL
          , enseignantId   INTEGER             NOT NULL
        , CONSTRAINT SAIT_ENSEIGNER_PK PRIMARY KEY(matiereId, enseignantId)
        , CONSTRAINT SAIT_ENSEIGNER_MATIERE_FK FOREIGN KEY(matiereId) 
              REFERENCES MATIERE(matiereId)
        , CONSTRAINT SAIT_ENSEIGNER_ENSEIGNANT_FK FOREIGN KEY(enseignantId) 
              REFERENCES ENSEIGNANT(enseignantId)
    ) ;
    
    CREATE TABLE ENSEIGNE
    (
            matiereId      INTEGER             NOT NULL
          , enseignantId   INTEGER             NOT NULL
          , classeId       INTEGER             NOT NULL
        , CONSTRAINT ENSEIGNE_PK PRIMARY KEY(matiereId, enseignantId, classeId)
        , CONSTRAINT ENSEIGNE_SAIT_ENSEIGNER_FK FOREIGN KEY(matiereId, enseignantId) 
              REFERENCES SAIT_ENSEIGNER(matiereId, enseignantId)
        , CONSTRAINT ENSEIGNE_CLASSE_PK FOREIGN KEY(classeId) 
              REFERENCES CLASSE(classeId)
    ) ;
    

    @ Paprick

    Peut-on espérer que Looping prenne un jour en compte ce type de contrainte au stade SQL ? (c’est l’époque des voeux et des étrennes...  )

     
    (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. #70
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    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 : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Bonsoir François, bonsoir à tous, et tous mes vœux pour cette nouvelle année !

    Nouvelle année qui commence fort François ! Mais c'est toujours aussi pertinent

    Un peu comme pour les CIF à outrance (cf. nos derniers posts), la traduction correcte et automatique de tous les cas de contraintes d'inclusion, et autres contraintes inter-associations, parait complexe...

    Cependant, la souplesse du code SQL introduit dans les règles Looping peut effectivement apporter une solution, à l'image de ce que tu proposes, à savoir :
    1 - Donner le nom du rôle à la contrainte FK lorsque ce rôle est précisé sur la branche de l'association.
    2 - Utiliser les règles pour préciser le code permettant la suppression de la dite-contrainte et son remplacement par la contrainte qui va bien.
    Cette solution me plait bien car elle ne change rien pour les modèles simples n'utilisant pas ce type de contrainte (il est en effet rare, à part pour les réflexives asymétriques, d'utiliser les rôles dans les associations).
    Je vais réfléchir à ça rapidement et vérifier que ça marche bien dans tous les cas (et que ça ne met pas la panique ailleurs)...

    Et alors, pourquoi pas l'intégrer dans la version 2.4 qui doit sortir dans le courant du mois !

    J'en profite d'ailleurs pour vous annoncer les nouveautés à venir dans cette version 2.4 de Looping :
    - Une interface légèrement revisitée pour passer plus naturellement des schémas E/A à UML... et préparer le terrain pour le passage au MLD graphique !
    - Nouvelle fonction Zoom permettant d'ajuster le modèle à la taille de la fenêtre.
    - Notion de "Modèle Type" pour reprendre un paramétrage existant lors de la création d'un nouveau modèle.
    - Possibilité de définir des noms logiques pour les tables et les rubriques différents des noms conceptuels.
    - Rajout de rôles venant suffixer dans le MLD les clés primaires des sous-classes d'héritage.
    - Export du MLD en mode texte.
    - Définition de nouveaux SGBD (SQL Server, Sybase, DB2) et possibilité pour l'utilisateur de définir lui-même les types de données de son SGBD.
    - Intégration de nouveaux types de données (BigInt, chaines binaires, Xml, ...).
    - Possibilité de positionner en début de script le code SQL défini dans certaines règles (pour définir, par exemple, des domaines SQL).

    et donc, pourquoi pas, possibilité de donner un nom aux contraintes FK en utilisant le nom des rôles.
    Voilà, en espérant que tout cela vous conviendra !
    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

  11. #71
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    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 : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Re,

    Je crois que j'ai trouvé plus simple pour régler cette histoire de nom de contrainte dans la génération SQL de Looping

    Dans les propriétés de Looping, on rajoute une option "Nom contrainte" (OUI/NON).
    Si c'est NON (par défaut), on ne touche à rien...
    Si on passe à OUI, alors on génère dans le SQL les noms de contraintes de la façon suivante :
    - CONSTRAINT PK_TableLocale PRIMARY KEY ...
    - CONSTRAINT FK_TableRéférencée_TableLocale[_Rôle] FOREIGN KEY ...

    Ensuite, avec le code SQL dans les règles Looping, on fait ce que l'on veut.

    Qu'en pensez-vous ?
    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

  12. #72
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Attention toutefois au risque de troncature comme pour toute concaténation...
    Il me semble que la norme est de 128 caractères maxi pour les noms

  13. #73
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    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 : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Attention toutefois au risque de troncature comme pour toute concaténation...
    Il me semble que la norme est de 128 caractères maxi pour les noms
    C'est noté. Merci !
    Si le maxi est 128 caractères : pour 2 noms de tables (+ éventuellement un rôle), je pense qu'on a de la marge.
    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

  14. #74
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    En principe oui et à titre personnel, quand je ne suis pas contraint par des normes, je préfère des noms courts plutôt qu'à rallonge.
    Cela étant, dans la mesure où le nom de chaque table est également limité à 128 caractères et que certains auteurs ne rechignent pas à utiliser des noms très longs, la troncature reste possible

  15. #75
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Bonne année à tous !

    Pour ma part, je nomme mes clés étrangères selon le nom de la colonne qui en fait l'objet...

    Exemple :

    te_personne_prs (prs_id, prs_id_civilite, prs_nom, prs_prenom...)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT fk_prs_id_civilite FOREIGN KEY...

    Et comme par son nom on sait que la colonne prs_id_civilite fait partie de la table te_personne_prs, on sait que la contrainte concerne aussi cette table.

    -------------------------------------------------------------------------

    Cas particulier : les clés étrangères multicolonnes...

    Exemple :

    te_parcours_pcr (pcr_id_diplome_ensfea, pcr_numero_mention, pcr_id_specialisation, pcr_id_option)

    J'ai la clé étrangère suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT `fk_pcr_mention` FOREIGN KEY (`pcr_id_diplome_ensfea`, `pcr_numero_mention`) REFERENCES `te_mention_men` (`men_id_diplome_ensfea`, `men_numero`) ON DELETE CASCADE

    Là aussi, le nom de la contrainte permet de savoir qu'elle concerne la table suffixée "pcr" mais comme la clé primaire de la table référencée "te_mention_men" a une clé primaire à deux colonnes, j'ai utilisé l'objet de cette table "mention" pour nommer la contrainte.


    J'ai bien conscience qu'il doit être difficile d'automatiser un tel système de nommage ! Pas grave !
    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 !

  16. #76
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Merci Paprick pour tes bons voeux et ton souci de nous choyer !


    A propos des contraintes...

    Citation Envoyé par Paprick Voir le message
    Un peu comme pour les CIF à outrance (cf. nos derniers posts), la traduction correcte et automatique de tous les cas de contraintes d'inclusion, et autres contraintes inter-associations, parait complexe...
    Je pense que sur la base du document de l’Afcet, c’est maîtrisable au moins pour les contraintes d’inclusion, en tout cas une étude de faisabilité mérite d’être faite.

    Evidemment, si les SGBD proposaient l’instruction CREATE ASSERTION de la norme SQL, la tâche serait bien simplifiée, il s’agit surtout ici de la prise en compte des contraintes d’exclusion, lesquelles aujourd’hui ne peuvent être « sqlisées » qu’à coup de triggers ( je pense aux fréquentes contraintes d’exclusion sur spécialisation / généralisation), lesquels relèvent d’une philosophie conduisant à une programmation souvent radicalement différente d’un SGBD à l’autre (le paradigme SQL Server est en l’occurrence strictement ensembliste, donc intraduisible en MySQL qui fonctionne séquentiellement en ligne à ligne...) Ainsi je ne vois pas du tout Looping se lancer dans la production de triggers du genre de ceux qui figurent dans l’ouvrage de D. Nanci et B Espinasse Ingénierie des systèmes d'information : Merise deuxième génération (4e édition, 2001) (Contraintes d’exclusion de relations sur d’autres relations, page 292).

    Il ne s’agit quand même pas pour Looping de résoudre les problèmes consécutifs à l’érection de la Tour de Babel...

    Pour en revenir à la contrainte d’inclusion, la production de triggers est donc quelque chose de trop compliqué, bien illusoire, mais le défi consiste justement à se dispenser de ces monstres (voire des assertions de la norme), au bénéfice de clés étrangères pertinentes et simples à mettre en oeuvre. Quand je revois le trigger Inclusion_Enseigner_Qualifier de la page 291 de l’ouvrage cité, je me dis que voilà quelque chose de bien trop lourd, et je préfère radicalement mon approche. En passant, au sujet de ce trigger, les auteurs ont écrit « on pourrait traiter cette contrainte d'exclusion X par le trigger suivant », le lecteur aura compris qu’il faut lire « on pourrait traiter cette contrainte d'inclusion I par le trigger suivant ».

    Je ne sais pas si un AGL comme WinDesign garantit les contraintes d’inclusion au stade SQL, mais si pour sa part Looping le faisait ça serait un plus faisant le bonheur des concepteurs de MCD peu au fait de SQL et conduits pourtant à injecter des ALTER TABLE dans des règles Looping... 


     
    (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. #77
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    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 : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Merci pour vos retours !
    Je propose donc d'intégrer l'option "Noms contraintes clés" dès la version 2.4 et de continuer ensuite la réflexion sur les possibilités d'automatiser l'optimisation des clés étrangères en fonction des contraintes inter-associations.
    J'aimerais cependant trouver une réponse globale à ces questions : en effet, la prise en compte des contraintes d'inclusion me parait maîtrisable (même si certains préféreront toujours traiter ça à base de triggers plutôt qu'en optimisant les clés étrangères). Par contre, d'autres contraintes inter-associations (exclusion, partition, simultanéité, ...) devront forcément passer par des triggers dont la génération automatique en fonction des SGBD me parait illusoire. Et donc, ce qui me gênerait dans la philosophie Looping, c'est qu'il fasse les choses partiellement en traitant certains cas d'un même outil et en ne faisant rien pour d'autres.
    Je vais donc réfléchir à tout ça mais, ne nous mentons pas, arriver à un certain stade de la modélisation et de l'intégration de contraintes, les non-sqlistes (ou non-sqliens ? ) auront bien du mal !
    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

  18. #78
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Paprick Voir le message
    Merci pour vos retours !
    C’est un bombardement en règle de notre part ! Merci de ta patience !


    Citation Envoyé par Paprick Voir le message
    Dans les propriétés de Looping, on rajoute une option "Nom contrainte" (OUI/NON).
    Si c'est NON (par défaut), on ne touche à rien...
    Si on passe à OUI, alors on génère dans le SQL les noms de contraintes de la façon suivante :
    - CONSTRAINT PK_TableLocale PRIMARY KEY ...
    - CONSTRAINT FK_TableRéférencée_TableLocale[_Rôle] FOREIGN KEY ...
    Prévoir une option « "Nom contrainte" (OUI/NON) » est une très bonne idée.

    Cela dit, je ne suis pas favorable à l’emploi en tant que préfixes des constantes « PK_ », « FK_ » (et tant qu’à faire « AK_ » pour les clés alternatives). En effet, quand le chef couvert de ma casquette de DBA j’effectue des recherches dans le catalogue relationnel (la fameuse « métabase »), portant sur tout ce qui a trait à l’objet "TableLocale" il faudra que je code :

    SELECT ... 
    FROM   SYS... 
    WHERE  object name LIKE '%TableLocale%' 
    ; 
    ce qui n’est pas indexable, donc non performant, agaçant, contrairement à :

    SELECT ... 
    FROM   SYS... 
    WHERE  object name LIKE 'TableLocale%' 
    ; 
    Cela a moins d’importance aujourd’hui, surtout quand les bases de données comportent peu de tables, contraintes, procédures en tous genres, etc., mais dans les années quatre-vingts (avec les outils alors greffés sur DB2) le phénomène était sensible. Depuis ce temps-là, c’est un réflexe, je suffixe plutôt que je ne préfixe...

    Ainsi, pour les clés étrangères, je préfère suffixer moi-même les noms des contraintes (disons par "_FK", auquel cas il devient inutile pour Looping de préfixer).

    Pour les clés candidates (c’est-à-dire clés primaires et alternatives pour être complet), c’est à voir, car si pour une table issue d’une entité-type suffixer devrait peut-être rester simple, comment pourrai-je par exemple signaler mon intention de suffixer le nom d’une clé candidate (disons primaire) issue d’une association ?

    En fait, plutôt que « "Nom contrainte" (OUI/NON) », l’option pourrait-elle être du genre « "Nom contrainte" (PREFIXER, SUFFIXER, NON) » ?

    Ce qui ne remet nullement en cause l'emploi des constantes « PK », « FK », « AK », seulement leur emplacement.


    Par ailleurs, indépendamment de la nécessité de nommer les rôles pour en inférer les noms des contraintes, leur affichage peut alourdir les diagrammes et, pollution oblige, en rendre la lecture plus difficile. Il serait bien de ne pouvoir afficher les rôles que si on le demande expressément, par exemple :

    Nom : role_afficher.png
Affichages : 1813
Taille : 6,1 Ko

     
    (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. #79
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    678
    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 : 678
    Points : 2 716
    Points
    2 716
    Par défaut
    Ça s'affine de plus en plus !
    L'argumentation de François étant (comme toujours) indémontable, je m'incline donc et me range à sa proposition .

    Je rajoute donc dans les propriétés une option "Nom contrainte clé" avec comme possibilités : "Non défini", "Préfixé (PF_ / FK_)" et "Suffixé (_PF / _FK)".

    Concernant les clés alternatives, Looping ne les génèrent pas sous forme de contraintes à part, mais directement en suivant la définition de la rubrique avec la propriété "UNIQUE" (donc pas de AK).
    Les clés alternatives composées ne peuvent donc se définir dans Looping qu'avec une règle et le code SQL qui va avec, comme François nous l'a déjà montré dans des posts précédents avec les courses hippiques.

    Je mets également dans les tuyaux l'option "Afficher dans le modèle" pour les rôles (coché par défaut).
    Allez hop, au boulot !
    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

  20. #80
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par fsmrel
    En effet, quand le chef couvert de ma casquette de DBA j’effectue des recherches dans le catalogue relationnel (la fameuse « métabase »), portant sur tout ce qui a trait à l’objet "TableLocale"...
    Je ne sais pas si le "information_schema" de MySQL / MariaDB respecte le standard mais j'y trouve une vue "TABLE_CONSTRAINTS" qui contient une colonne "TABLE_SCHEMA" et une autre "TABLE_NAME". Ainsi, si je souhaite trouver quelles sont les contraintes imposées à la table "ma_bdd.ma_table", je peux faire cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE
    FROM information_schema.TABLE_CONSTRAINTS
    WHERE TABLE_SCHEMA = 'ma_bdd'
        AND TABLE_NAME = 'ma_table';

    Il y a aussi d'autres vues qui permettent de reconstituer la contrainte de clé étrangère avec un peu de gymnastique contre productive. mais dans lesquelles on retrouve le nom des schémas (bdd) et tables concernées par les contraintes.

    Concernant le préfixage des noms des objets de la BDD, Notre ami Frédéric Brouard, alias SQLPro, écrit ceci dans son document "Norme interne de modélisation et développement << Base de données >>", dont je me suis beaucoup inspiré pour ma pratique personnelle, à la page 19 :
    Citation Envoyé par SQLPro
    les préfixes permettent un repère immédiat de l’objet. La plupart des objets d’une base étant décrit dans des tables système « fourre-tout » il est plus aisé de comprendre la nature de l’objet par la structure de son nom que de s’obliger à des requêtes complexes pour la retrouver.
    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 !

Discussions similaires

  1. Quel logiciel (EDI) pour débuter en programmation ?
    Par mimosa69 dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 17/01/2016, 16h45
  2. Recherche logiciels pour réaliser des MCD
    Par quaresma dans le forum Outils
    Réponses: 5
    Dernier message: 08/02/2008, 17h07
  3. Quel logiciel utiliser pour shématiser une bdd relationnel
    Par MrEddy dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 22/07/2005, 16h42
  4. Quel logiciel utiliser pour un serveur ftp
    Par jean-jacques varvenne dans le forum Réseau
    Réponses: 11
    Dernier message: 01/04/2005, 20h09
  5. Réponses: 3
    Dernier message: 27/08/2003, 21h14

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