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 :

dupliquer des classes d'entité dans le MCD ?


Sujet :

Schéma

  1. #61
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    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 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    J'oubliais : si on veut que seuls les [USER] de type [CUSTOMER] soient possesseurs de licences, il suffira d'ajouter une Contrainte d'Intégrité Fonctionnelle (CIF) de type inclusion de l'association (own) vers l'association (request) :

    Pièce jointe 599267

  2. #62
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    commencé en fin de matinée mais ensuite interrompu...

    Citation Envoyé par escartefigue Voir le message
    Dans cette nouvelle version de MCD, on a de nouveau des héritages disjoints (plusieurs triangles) de [customer] vers [user_table], de [license_owner] vers[user_table] et de [submitter] vers [user_table].
    Ce faisant, une même personne peut appartenir à chaque sous-type simultanément.
    Exact, mais mon MCD reste valable si on met dans les triangles la contrainte XT, non ?

    Citation Envoyé par escartefigue Voir le message
    Comme [customer] a perdu son attribut "organization" qui était présent dans votre réponse n°38, on peut désormais simplifier l'héritage pour ces deux sous-types et utiliser la modélisation que j'ai proposée dans ma réponse n° 37
    Exact, hier, je m'étais dit que la colonne du CSV organization pouvait être un attribut de la classe company. Mais après nouvel examen, rien à voir, donc du coup, création d'une classe organization , avec un lien avec la classe customer.

    Citation Envoyé par escartefigue Voir le message
    Dans votre réponse n°36, vous aviez dit

    Mais ici, ni l'un ni l'autre n'ont d'attribut. Du coup là aussi les deux ne font plus qu'un seul et on applique la logique ci-dessus.

    Le modèle devient donc ...
    J'ai commencé à utiliser votre proposition pour réaliser une nouvelle version du MCD, mais tous comptes faits, vu ce que j'ai remarqué aujourd'hui (cf ma remarque juste ci-dessus), pas possible...

    Citation Envoyé par escartefigue Voir le message
    Quand à la relation reflexive (manage), si elle sert à connaître les liens hiérarchiques entre employés, pourquoi la restreindre aux employés qui sont détenteurs de licences ?
    Je traite 2 sortes de fichiers CSV :les CSV "licenses" et les CSV "tickets". Les license_owner proviennent des CSV "licenses" alors que les customer et les submitter proviennent des CSV "tickets". Et le manager des license_owner est le seul à être précisé.

    Citation Envoyé par escartefigue Voir le message
    La présence d'un attribut "region" dans la table des pays mérite des explications.
    S'il s'agit de régions du monde telles que l'Eurasie ou l'Amérique du nord, comme plusieurs pays sont dans cette même région du monde, il faut modéliser [PAYS] 1,1 --- (situer) --- 1,n [REGION]
    OK, on est dans ce cas de figure (régions du monde). J'ai fait [country] 1,1(R)--(is_located)--1,n [region] (est-ce bien justifié de déclarer l'identifiant "relatif" ?)

    Citation Envoyé par escartefigue Voir le message
    Quel est le rôle de l'attribut "first_country" de l'entité-type [TICKET].
    Vu qu'il existe une entité-type [COUNTRY], un lien entre [TICKET] et [COUNTRY] est à priori la bonne modélisation.
    Le but est de pouvoir connaître le pays au moment de la création du ticket, sachant qu'il s'agit du pays du customer, même si ce dernier a ensuite été muté dans un autre pays. Pour tenir compte de votre remarque, j'ai maintenu l'attribut first_country mais rajouté un lien entre ticket et country. OK ?

    Citation Envoyé par escartefigue Voir le message
    si on veut que seuls les [USER] de type [CUSTOMER] soient possesseurs de licences, il suffira d'ajouter une Contrainte d'Intégrité Fonctionnelle (CIF) de type inclusion de l'association (own) vers l'association (request)
    La remarque est bonne car cette CIF de type inclusion est justifiée. Comme finalement, je ne peux pas adopter le MCD que vous avez proposé, je voulais l'intégrer dans mon MCD ; j'ai bien inséré un CIF de type inclusion, mais pas trouvé comment faire les liens vers la classe d'entités customer et vers les 2 associations owns et is_customer. Pouvez-vous me le dire ?

    Voici mon MCD : Nom : MCD9x3000.png
Affichages : 392
Taille : 206,9 Ko
    Images attachées Images attachées  
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  3. #63
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    650
    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 : 650
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour,
    J'avoue ne pas comprendre l'idée qu'il y a derrière les 3 spécialisations autour de user_table.
    Déjà, lorsque qu'un héritage (représenté par un triangle) ne propose qu'une seule classe fille, l'exclusion mutuelle (X) n'a pas de sens et la totalité (T) indiquerait que toutes les entités sont concernées... bref, pour moi, cela n'a aucun sens... Par ailleurs, au-delà de ce problème de contrainte, au niveau notation autant faire, dans un tel cas, une association 0,1---(asso)---- 1,1(R) qui donnera le même résultat au niveau MLD.
    Sans avoir étudié le modèle en détail, je pense cependant que l'idée consiste probablement à n'avoir qu'un seul héritage (et donc un seul triangle) ayant user-table pour classe mère, et license_owner, customer et submitter comme classes filles... Et là, la partition (eXclusion mutuelle et Totalité) a du sens.
    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 084
    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 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    Bonsoir Laurent

    Tout d'abord, une remarque sur les pièces jointes : votre dernière réponse présente 3 MCD très proches (c'est le jeu des sept différences) et on ne sait pas lequel est le bon.
    Du coup difficile de répondre sur le MCD en lui même, pour ma part, je renonce à faire 3 listes de réponses
    Pour éviter ce genre de mésaventure, modifiez votre message et cliquez sur le bouton "Gérer les pièces jointes"
    Vous verrez apparaître une fenêtre dans laquelle il y a une icône par pièce jointe, vous pouvez sélectionner celles que vous voulez supprimer.


    Citation Envoyé par laurentSc Voir le message
    Exact, mais mon MCD reste valable si on met dans les triangles la contrainte XT, non ?
    Disons que ça n'a pas d'impact sur le script puisque les contraintes d'exclusion doivent être codées manuellement, mais ça n'est pas clair à la lecture du MCD on risque de louper des sous types éparpillés dans le schéma.
    La bonne façon de dessiner l'héritage est donc bien un seul triangle avec une flèche pointant vers le sur-type et autant de liens avec ce triangle unique qu'il y a de sous-types.

    Citation Envoyé par laurentSc Voir le message
    Exact, hier, je m'étais dit que la colonne du CSV organization pouvait être un attribut de la classe company. Mais après nouvel examen, rien à voir, donc du coup, création d'une classe organization , avec un lien avec la classe customer.

    J'ai commencé à utiliser votre proposition pour réaliser une nouvelle version du MCD, mais tous comptes faits, vu ce que j'ai remarqué aujourd'hui (cf ma remarque juste ci-dessus), pas possible...
    Pas de problème, on applique le même principe que pour les détenteurs de licences : seuls les clients (donc les users ayant une occurrence de l'association (request)) sont rattachés à une organisation, on ajoute donc une CIF d'inclusion comme ci-dessous et toujours pas besoin d'héritage en l'absence d'attributs spécifiques dans les sous-types :

    Pièce jointe 599273



    Citation Envoyé par laurentSc Voir le message
    Je traite 2 sortes de fichiers CSV :les CSV "licenses" et les CSV "tickets". Les license_owner proviennent des CSV "licenses" alors que les customer et les submitter proviennent des CSV "tickets". Et le manager des license_owner est le seul à être précisé.
    OK, mais est-ce que la connaissance du manager des utilisateurs possédant une licence présente un intérêt pour vous ? Ce n'est pas parce que les fichiers que vous recevez contiennent des informations que vous devez toutes les stocker.
    Quoi qu'il en soit, vous pouvez faire une relation reflexive sur le sur-type en utilisant, là encore, une CIF d'inclusion partant de cette asso reflexive, mais cette fois-ci en direction de l'association (own)


    Citation Envoyé par laurentSc Voir le message
    OK, on est dans ce cas de figure (régions du monde). J'ai fait [country] 1,1(R)--(is_located)--1,n [region] (est-ce bien justifié de déclarer l'identifiant "relatif" ?)
    Non : d'une part, le pays a une existence propre, d'autre part, certains pays ont des territoires sur plusieurs régions du monde, la France par exemple est bien sûr en Europe, mais également en Amérique du nord (terre neuve), dans les Antilles (Guadeloupe, Martinique, Saint Martin, Saint Barthélémy), en Amérique du sud (Guyanne), en Océanie (Nouvelle Calédonie, Tahiti), en Afrique (Réunion) et même en Antarctique !
    Ou alors il ne faut considérer que la localisation principale.



    Citation Envoyé par laurentSc Voir le message
    Le but est de pouvoir connaître le pays au moment de la création du ticket, sachant qu'il s'agit du pays du customer, même si ce dernier a ensuite été muté dans un autre pays. Pour tenir compte de votre remarque, j'ai maintenu l'attribut first_country mais rajouté un lien entre ticket et country. OK ?
    Je ne sais pas quel peut être l'intérêt de connaître cette information, mais s'il y en a un, il faut supprimer l'attribut de la classe [TICKET] et ne conserver que l'association de [TICKET] vers [COUNTRY]


    Citation Envoyé par laurentSc Voir le message
    La remarque est bonne car cette CIF de type inclusion est justifiée. Comme finalement, je ne peux pas adopter le MCD que vous avez proposé, je voulais l'intégrer dans mon MCD
    Pour l'instant, je reste convaincu qu'il n'y a pas besoin d'héritage, cf. mes explications ci-dessus.

  5. #65
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    étant beaucoup moins bon le soir que le matin, je vais me contenter de faire des remarques et poser des questions.

    Citation Envoyé par escartefigue Voir le message
    Tout d'abord, une remarque sur les pièces jointes : votre dernière réponse présente 3 MCD très proches (c'est le jeu des sept différences) et on ne sait pas lequel est le bon.
    Du coup difficile de répondre sur le MCD en lui même, pour ma part, je renonce à faire 3 listes de réponses
    Pour éviter ce genre de mésaventure, modifiez votre message et cliquez sur le bouton "Gérer les pièces jointes"
    Vous verrez apparaître une fenêtre dans laquelle il y a une icône par pièce jointe, vous pouvez sélectionner celles que vous voulez supprimer.
    J'avais déjà constaté cela et vu que je pouvais gérer les pièces jointes dans "modifier le message", mais pas trouvé comment les supprimer. Cette fois, j'ai trouvé donc si je me souviens la prochaine fois (j'espère mais c'est pas gagné), je le ferai.

    Citation Envoyé par escartefigue Voir le message
    Pas de problème, on applique le même principe que pour les détenteurs de licences : seuls les clients (donc les users ayant une occurrence de l'association (request)) sont rattachés à une organisation, on ajoute donc une CIF d'inclusion comme ci-dessous et toujours pas besoin d'héritage en l'absence d'attributs spécifiques dans les sous-types
    Votre solution me plaît, par contre j'ai des difficultés avec la fonctionnalité CIF de Looping. Cf ce que je dis ci-dessous :

    Citation Envoyé par laurentSc Voir le message
    j'ai bien inséré un CIF de type inclusion, mais pas trouvé comment faire les liens vers la classe d'entités customer et vers les 2 associations owns et is_customer. Pouvez-vous me le dire ?

    Citation Envoyé par escartefigue Voir le message
    OK, mais est-ce que la connaissance du manager des utilisateurs possédant une licence présente un intérêt pour vous ? Ce n'est pas parce que les fichiers que vous recevez contiennent des informations que vous devez toutes les stocker.
    Ca fait partie des spécifications du besoin qu'on m'a données. L'intérêt est que l'utilisateur puisse afficher le manager d'un propriétaire de licence...

    Citation Envoyé par escartefigue Voir le message
    Quoi qu'il en soit, vous pouvez faire une relation reflexive sur le sur-type en utilisant, là encore, une CIF d'inclusion partant de cette asso reflexive, mais cette fois-ci en direction de l'association (own)
    Pour créer une CIF, j'ai déjà dit ci-dessus que j'avais besoin d'aide. Mais une question spécifique à cette solution : vous parlez de relation ou asso réflexive. C'est quoi ça ? Je suppose que c'est pour remplacer les 2 assos de mon MCD avec libellés de rôle has_for_manager et manager. Pouvez-vous préciser ?


    Citation Envoyé par escartefigue Voir le message
    Non : d'une part, le pays a une existence propre, d'autre part, certains pays ont des territoires sur plusieurs régions du monde, la France par exemple est bien sûr en Europe, mais également en Amérique du nord (terre neuve), dans les Antilles (Guadeloupe, Martinique, Saint Martin, Saint Barthélémy), en Amérique du sud (Guyanne), en Océanie (Nouvelle Calédonie, Tahiti), en Afrique (Réunion) et même en Antarctique !
    Ou alors il ne faut considérer que la localisation principale.
    C'est bien ce que je choisis. Par exemple, la France est considérée en Europe. De ce fait, [country] 1,1(R)--(is_located)--1,n [region] est-il correct ?

    Citation Envoyé par escartefigue Voir le message
    J'oubliais : si on veut que seuls les [USER] de type [CUSTOMER] soient possesseurs de licences
    Non, car il existe des propriétaires de licence qui ne sont pas customer (user qui veut signaler un problème sur une application). Donc votre solution avec une CIF ne convient pas ici.

    Autre question :
    Citation Envoyé par laurentSc Voir le message
    les cardinalités qu'on définit dans le MCD ont disparu dans les DDL. Donc, à quoi elles servent ?
    A demain
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #66
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    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 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    Bonjour Laurent

    Pour l'utilisation des CIF avec Looping.
    • positionner la CIF (le cercle) puis double-cliquer pour choisir son type (par défaut "X" pour eXclusion)
    • utiliser d'abord l'outil lien en partant de la CIF pour aller vers l'association ciblée.
      Quand c'est fait, on obtient un trait continu avec une flèche dans le cas d'une contrainte d'inclusion, sans flèche dans les autres cas
    • utiliser ensuite l'outil lien en partant de la CIF pour aller vers l'association faisant l'objet de la contrainte.
      On obtient un trait continu sans flèche
    • utiliser à nouveau l'outil lien en partant de la CIF pour aller vers l'entité-type pivot (par exemple [US_user] si c'est l'identifiant US_ident dont on veut vérifier la présence).
      On obtient un trait pointillé
    • recommencer avec d'autres entité-type si nécessaire



    Citation Envoyé par laurentSc Voir le message
    Ca fait partie des spécifications du besoin qu'on m'a données. L'intérêt est que l'utilisateur puisse afficher le manager d'un propriétaire de licence...
    J'ai mis des c@nneries dans la modélisation que j'ai proposée plus haut : la création de l'association (include) entre US et OZ est à faire, mais la CIF d'inclusion n'est pas applicable ici. Et j'ai inversé la flèche sur la CIF relative aux licences


    Citation Envoyé par laurentSc Voir le message
    asso réflexive. C'est quoi ça ?
    C'est une association binaire dont chaque "patte" est liée à la même entité-type, comme c'est le cas de la relation (manages) de votre MCD


    Citation Envoyé par laurentSc Voir le message
    Par exemple, la France est considérée en Europe. De ce fait, [country] 1,1(R)--(is_located)--1,n [region] est-il correct ?
    La question est : si demain vous ne vous intéressez plus aux régions, qu'elle disparaissent donc de votre modèle, est-ce qu'il faudra supprimer les pays ? Je ne le pense pas. C'est pourquoi je n'utiliserai pas l'identification relative ici. (cf. les échanges que nous avons eu avec Isabelle sur ce sujet un peu plus haut).


    Citation Envoyé par laurentSc Voir le message
    les cardinalités qu'on définit dans le MCD ont disparu dans les DDL. Donc, à quoi elles servent ?
    à quoi se rapporte cette remarque ?


    Voici l'extrait du MCD modifié (suppression de la CIF mise à tort précédemment et correction de la flèche) :

    Pièce jointe 599288

    Et le DDL ajouté dans la contrainte :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    alter table TI_ticket
    add constraint TICIF001
    foreign key US_ident_RQ
    references LI_license(US_ident)

  7. #67
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    Bonjour escartefigue,

    malheureusement, j'ai pas pu aller loin car problème de PC, résolu que en milieu d'après-midi

    Citation Envoyé par escartefigue Voir le message
    Pour l'utilisation des CIF avec Looping.
    • positionner la CIF (le cercle) puis double-cliquer pour choisir son type (par défaut "X" pour eXclusion)
    • utiliser d'abord l'outil lien en partant de la CIF pour aller vers l'association ciblée.
      Quand c'est fait, on obtient un trait continu avec une flèche dans le cas d'une contrainte d'inclusion, sans flèche dans les autres cas
    • utiliser ensuite l'outil lien en partant de la CIF pour aller vers l'association faisant l'objet de la contrainte.
      On obtient un trait continu sans flèche
    • utiliser à nouveau l'outil lien en partant de la CIF pour aller vers l'entité-type pivot (par exemple [US_user] si c'est l'identifiant US_ident dont on veut vérifier la présence).
      On obtient un trait pointillé
    • recommencer avec d'autres entité-type si nécessaire
    J'ai pu suivre vos explications pour créer une contrainte (pas une CIF il me semble...). J'ai repris votre exemple à l'identique par contre quand vous parlez de association faisant l'objet de la contrainte (ici request) et de association ciblée (ici owns), je ne saisis pas. Pouvez-vous préciser ?
    Et pourquoi vous aviez dit des con... et que c'est mieux comme ça ? Nom : MLD2.png
Affichages : 371
Taille : 9,0 Ko
    J'ai fait ça avant de voir que vous l'aviez fait en mieux
    D'ailleurs, question : mes liens ne sont que des lignes droites. Comment vous faites pour les composer en plusieurs segments de droite (avec souvent des angles droits entre 2 segments) ?

    Citation Envoyé par escartefigue Voir le message
    à quoi se rapporte cette remarque ?
    C'était une question d'ordre général, mais prenant un exemple. Soit ce MCD très simple : Nom : simple.png
Affichages : 360
Taille : 6,1 Ko
    en textuel [country]--0,n--(abrite)--1,1(R)--[location]. On a donc 2 cardinalités pour l'association abrite.
    Le DDL correspondant est
    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 country(
       id_country INT AUTO_INCREMENT,
       country CHAR(3),
       PRIMARY KEY(id_country)
    );
     
    CREATE TABLE location(
       id_country INT,
       id_location INT AUTO_INCREMENT,
       location VARCHAR(30),
       PRIMARY KEY(id_country, id_location),
       FOREIGN KEY(id_country) REFERENCES country(id_country)
    );
    Les cardinalités n'y apparaissent plus. Donc à quoi ça sert de les définir ?


    Ce MCD, ça serait sympa de me mettre le xxx.loo en pièce jointe pour que je puisse le récupérer sans avoir tout à recréer...

    Pièce jointe 599288

    EDIT : autre point que je réalise après coup : selon votre MCD, tous les users sont concernés par l'association manage, alors qu'on ne connaît le manager que des license_owner, mais des ni customers ni des submitters. Je pense qu'il faut donc rajouter une contrainte d'inclusion dans votre MCD , non ? (entité-pivot=US_user et les 2 associations concernées : own et manage)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #68
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    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 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    Bonjour Laurent

    Citation Envoyé par laurentSc Voir le message
    J'ai pu suivre vos explications pour créer une contrainte (pas une CIF il me semble...). J'ai repris votre exemple à l'identique par contre quand vous parlez de association faisant l'objet de la contrainte (ici request) et de association ciblée (ici owns), je ne saisis pas. Pouvez-vous préciser ?

    Et pourquoi vous aviez dit des con... et que c'est mieux comme ça ?
    Le besoin est de vérifier que la personne qui est à l'origine du ticket (donc qui est présente dans l'association (request)) possède une licene (donc est présente dans l'association (own)). D'où la flèche allant dans ce sens, et non dans le sens inverse comme je l'avais schématisé par erreur plus haut.
    D'ailleurs, il reste encore une con... puisque l'entité-type [license] n'est pas pivot de la contrainte il faut donc retirer ce lien. Décidément je les ai accumulées



    Citation Envoyé par laurentSc Voir le message
    Les cardinalités n'y apparaissent plus. Donc à quoi ça sert de les définir ?
    Les cardinalités apparaissent dans le script mais sous une forme différente
    Quand une clef étrangère est présente dans une table, c'est que cette table correspond au coté cardinalité maxi 1 de l'association.
    Si la association est n-aire (cardinalité maxi n de chaque coté) alors elle devient une table dans laquelle on retrouve en FK l'identifiant de chaque type d'entité concerné par l'association

    Exemples (PK soulignées, FK suffixées par #)

    Le MCD [T1] (id1) 0, n --- (asso1) --- 1,1 [T2](id2)
    donne les tables T1(id1) et T2(id2, id1#)

    Le MCD [T1] (id1) 1,1 --- (asso1) --- 1,n [T2](id2)
    donne les tables T1(id1, id2#) et T2(id2)

    Le MCD [T1] (id1) 1,n --- (asso1) --- 1,n [T2](id2)
    donne les tables T1(id1, TA(id1#, id2#) et T2(id2)
    avec cette association n-aire, la table TA a pour PK les FK issues de T1 et T2

    L'intérêt des cardinalités est donc clair : ce sont elles qui positionnent les FK dans les tables et qui provoquent la création de tables supplémentaires si assos n-aire



    Citation Envoyé par laurentSc Voir le message
    Ce MCD, ça serait sympa de me mettre le xxx.loo en pièce jointe pour que je puisse le récupérer sans avoir tout à recréer...
    Oui, la difficulté est que l'extension .loo n'est pas acceptée comme pièce jointe et que la taille des PJ est limitée, il faut donc zipper le modèle et qu'il soit de petite taille.



    Citation Envoyé par laurentSc Voir le message
    EDIT : autre point que je réalise après coup : selon votre MCD, tous les users sont concernés par l'association manage, alors qu'on ne connaît le manager que des license_owner, mais des ni customers ni des submitters. Je pense qu'il faut donc rajouter une contrainte d'inclusion dans votre MCD , non ? (entité-pivot=US_user et les 2 associations concernées : own et manage)
    Vous n'aurez l'information que pour les license_owner (car seul le csv les concernant la contient), mais rien n'interdit de les ajouter si besoin dans le futur pour les autres. Ce n'est donc pas une règle de gestion.


    Voici le modèle zipé :

  9. #69
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    Bonjour escartefigue,

    aujourd'hui, pas de problème de PC, donc je peux démarrer dès ce matin

    Pas encore regardé toute votre réponse, mais merci pour le fichier zippé.

    Et sinon, vous ne répondez pas à ça :
    Citation Envoyé par laurentSc Voir le message
    mes liens ne sont que des lignes droites. Comment vous faites pour les composer en plusieurs segments de droite (avec souvent des angles droits entre 2 segments) ?
    Pouvez-vous le faire ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #70
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    J'ai pris le temps de regarder votre réponse, escartefigue. Du coup, il me vient d'autres questions.

    Dans vos exemples, il n'y a pas la cardinalité 0,1. Je pense (merci de me dire si j'ai juste) que la seule chose que ça change par rapport à une cardinalité 1,1 est la disparition de la propriété de la FK NOT NULL.

    Citation Envoyé par escartefigue Voir le message
    Exemples (PK soulignées, FK suffixées par #)

    Le MCD [T1] (id1) 0, n --- (asso1) --- 1,1 [T2](id2)
    donne les tables T1(id1) et T2(id2, id1#)

    Le MCD [T1] (id1) 1,1 --- (asso1) --- 1,n [T2](id2)
    donne les tables T1(id1, id2#) et T2(id2)

    Le MCD [T1] (id1) 1,n --- (asso1) --- 1,n [T2](id2)
    donne les tables T1(id1, TA(id1#, id2#) et T2(id2)
    avec cette association n-aire, la table TA a pour PK les FK issues de T1 et T2

    L'intérêt des cardinalités est donc clair : ce sont elles qui positionnent les FK dans les tables et qui provoquent la création de tables supplémentaires si assos n-aire

    Citation Envoyé par escartefigue Voir le message
    Vous n'aurez l'information que pour les license_owner (car seul le csv les concernant la contient), mais rien n'interdit de les ajouter si besoin dans le futur pour les autres. Ce n'est donc pas une règle de gestion.
    Je suppose que c'est rendu possible par la cardinalité 0,1 et non 1,1 sur la patte de retour de (manage). OK ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #71
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    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 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    J'ai pris le temps de regarder votre réponse, escartefigue. Du coup, il me vient d'autres questions.

    Dans vos exemples, il n'y a pas la cardinalité 0,1. Je pense (merci de me dire si j'ai juste) que la seule chose que ça change par rapport à une cardinalité 1,1 est la disparition de la propriété de la FK NOT NULL.
    Tout à fait

    Cas particulier, la relation [E1] 0,1 --- (asso) --- 0,1 [E2]

    Plusieurs résultats possibles au niveau tabulaire :
    1. T1(id1, id2#) et T2(id2)
    2. T1(id1) et T2(id2, id1#)
    3. T1(id1), TA(id1#, id2#) et T2(id2)


    La première solution est souvent choisie si le nombre de cas ou la FK id2 dans T1 est null est minoritaire (presque toutes les occurrences de T1 trouvent une correspondance dans T2)
    La deuxième solution dans le cas contraire
    La troisième, dans le cas où les FK "null" sont fréquentes, ou bien, si on ne veut jamais de FK "null"
    Pour le dernier cas, Looping propose une case à cocher "générer une table de correspondance" qui génère automatiquement la table associative TA


    Citation Envoyé par laurentSc Voir le message
    Je suppose que c'est rendu possible par la cardinalité 0,1 et non 1,1 sur la patte de retour de (manage). OK ?
    Oui, et la cardinalité minimale de zéro est de toute façon requise puisque toute personne n'est pas cadre et toute personne n'est pas encadrée (cas du big boss)

  12. #72
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    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 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Et sinon, vous ne répondez pas à ça :
    Citation Envoyé par laurentSc Voir le message
    D'ailleurs, question : mes liens ne sont que des lignes droites. Comment vous faites pour les composer en plusieurs segments de droite (avec souvent des angles droits entre 2 segments) ?
    Désolé, j'y avais répondu mais j'ai du faire une fausse manip...
    Bref, c'est très simple, il suffit de cliquer sur l'icône "cassure" (à coté de l'icône lien) puis sur le lien à modifier : une poignée apparaît, on l'utilise pour former un angle qu'on déplace à souhait. On peut répéter l'opération sur le même lien pour ajouter des angles.

  13. #73
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    C'est vrai ; c'est simple, mais il faut savoir comment faire...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  14. #74
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    à partir de votre MCD, j'ai rajouté les autres éléments que j'avais déjà insérés dans ma version. Par contre, et pour ça, je souhaite l'avis d'un spécialiste : à la place du mécanisme d'héritage (classe-mère=US_user et classe-fille=License_owner), j'ai créé 2 contraintes.
    J'en détaille une pour savoir si ça convient, l'autre étant faite suivant le même principe.
    L'idée est d'indiquer que seuls les propriétaires de licence possèdent une adresse mail. Pour indiquer cela, j'ai créé une contrainte inclusion qui relie l'association is_joinable_at (qui signale les users possédant une adresse mail) et l'association own (les propriétaires de licence) et l'entité pivot est US_user (tous les users).

    J'ai également inséré la contrainte que vous aviez proposée au post #64, pour limiter la classe organization aux demandeurs de création d'un ticket.

    Nom : MCD10x2500.png
Affichages : 412
Taille : 152,0 Ko

    J'avoue que le MCD, même s'il est compréhensible par son créateur, me semble assez chargé. Qu'en pensez-vous ? Y a-t-il moyen de simplifier ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  15. #75
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    650
    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 : 650
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour,
    Citation Envoyé par laurentSc Voir le message
    J'avoue que le MCD, même s'il est compréhensible par son créateur, me semble assez chargé. Qu'en pensez-vous ? Y a-t-il moyen de simplifier ?
    Je pense que la première chose à faire pour le rendre plus lisible, c'est de supprimer l'affichage des types.
    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

  16. #76
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    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 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    @Laurent :

    L'ajout d'un préfixe ou suffixe dans les types d'entité et dans les associations qui deviennent des tables est intéressant surtout si on utilise ce préfixe dans tous les attributs de ces types d'entité et association.
    Le but est
    • de savoir immédiatement d'où vient un attribut (sa facilite la compréhension des requêtes SQL), même si aucun alias n'est utilisé
    • de faciliter les études d'impact
    • d'éviter les problèmes de percussion avec des mots réservés SQL

    Evidemment, cette méthode que j'utilise à titre personnel n'est applicable qu'en l'absence de norme interne à l'entreprise où vous intervenez, ce qui est rarement le cas

  17. #77
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    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 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Paprick Voir le message
    Bonjour,

    Je pense que la première chose à faire pour le rendre plus lisible, c'est de supprimer l'affichage des types.
    On peut également déplacer l'asso (work_at) à gauche des types d'entité EM et CO pour éviter de croiser les lien

  18. #78
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 339
    Points : 5 723
    Points
    5 723
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    j'ai suivi vos conseils (donc supprimé l'affichage des types de données des rubriques et déplacé l'asso (work_at)(à un autre endroit que celui préconisé par escartefigue); mon MCD est plus lisible car il n'y a plus de lien croisé. J'ai également préfixé les classes d'entités qui ne l'étaient pas. Comme il n'y a aucune association qui devient une table, je pense que c'est suffisant.

    Par contre, 3 questions :

    1- dans mon MCD, il y a 4 contraintes et dans le SQL généré par Looping, une seule est déclarée : comment se fait-ce ?

    2- J'ai préfixé la classe d'entités application : AP_application. Néanmoins, dans le SQL généré par Looping, pas de préfixe : CREATE TABLE application(...etc. comment se fait-ce ?

    3- Toujours dans le SQL généré par Looping, les FK sont auto-incrémentées (exemple dans la table TI_ticket : US_ident_RQ INT AUTO_INCREMENT UNSIGNED NOT NULL,). comment se fait-ce ?

    Nom : MCD11x1800.png
Affichages : 351
Taille : 106,0 Ko
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  19. #79
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 084
    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 084
    Points : 38 377
    Points
    38 377
    Billets dans le blog
    9
    Par défaut
    Bonjour Laurent

    Très probablement,
    pour le point n°1, vous n'avez pas renseigné le script à associer à la contrainte (double clic sur la contrainte pour le vérifier)
    pour le point n°2, vous avez renseigné un nom dans la case "nom logique" c'est ce nom qui est repris dans le DDL
    pour le point n°3, pour MySQL, le type "compteur" se traduit en "auto_increment", pour la plupart des autres SGBD, ça se traduit en "identity"

  20. #80
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    650
    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 : 650
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour,
    Citation Envoyé par laurentSc Voir le message
    3- Toujours dans le SQL généré par Looping, les FK sont auto-incrémentées (exemple dans la table TI_ticket : US_ident_RQ INT AUTO_INCREMENT UNSIGNED NOT NULL,). comment se fait-ce ?
    Vous avez utilisé le type INT AUTO_INCREMENT UNSIGNED en tant que type prédéfini dans Looping. Ce type, quand il est affecté à un identifiant, est automatiquement repris en l'état pour les FK.
    Pour régler le problème, il faut aller au plus profond du paramétrage de Looping : dans la définition du nouveau type, il faut préciser : INT AUTO_INCREMENT UNSIGNED #INT UNSIGNED
    De cette manière, Looping prendra ce qu'il y a derrière le # pour les FK.
    Il est clair que ni vous ni personne ne pouvaient pas le deviner !
    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

Discussions similaires

  1. Utilisation des classes managées .net dans PHP
    Par Hinault Romaric dans le forum Langage
    Réponses: 2
    Dernier message: 19/02/2011, 11h46
  2. Réponses: 1
    Dernier message: 08/10/2009, 17h38
  3. besoin d'aide pour intégrer une entité dans un MCD
    Par barkleyfr dans le forum Schéma
    Réponses: 17
    Dernier message: 13/10/2005, 14h29

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