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 :

inscription (souple) de clients


Sujet :

Schéma

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut inscription (souple) de clients
    Bonjour tout le monde.
    Voici mon soucis. Je voudrais gérer, dans un 1er temps, une liste de clients.
    Mais je voudrais le faire avec beaucoup de souplesse, c'est à dire pouvoir enregistrer plusieurs adresses, emails, téléphones et préciser en même temps leur type : adresse perso ou pro, email perso ou pro, téléphone fixe, portable, fixe pro ou perso.....
    Donc il faut que je puisse gérer (ajouter, modifier, supprimer) les types dont j'ai besoin.

    Sur mon MCD, je ne sais pas si je dois mettre le type en attribut d'une relation ou bien créer une entité type (type téléphone, type adresse...) en relation avec l'entité concernée.

    J'espère que je suis clair

    Voici mon mcd (il y a des avertissements qui sont générés par open modelsphere, et comme je débute je ne comprends pas pourquoi).

    Merci d'avance pour votre aide
    Images attachées Images attachées  

  2. #2
    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 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par ricounet_paris Voir le message
    Mais je voudrais le faire avec beaucoup de souplesse, c'est à dire pouvoir enregistrer plusieurs adresses, emails, téléphones et préciser en même temps leur type : adresse perso ou pro, email perso ou pro, téléphone fixe, portable, fixe pro ou perso.....
    Donc il faut que je puisse gérer (ajouter, modifier, supprimer) les types dont j'ai besoin.

    Sur mon MCD, je ne sais pas si je dois mettre le type en attribut d'une relation ou bien créer une entité type (type téléphone, type adresse...) en relation avec l'entité concernée.
    Globalement, ton idée de MCD est bonne.
    Il faudrait créer aussi des entités-types pour les type_telephone, type_adresse, type_email et donc faire des associations ternaires.

    (il y a des avertissements qui sont générés par open modelsphere, et comme je débute je ne comprends pas pourquoi).
    Quel est le texte de l'avertissement ?
    Je n'ai pas Open Modelsphere sous la main pour le moment mais je crois que quand tu passes la souris dessus il annonce quelque chose non ?
    Ou alors il y a un outil pour vérifier ou valider le MCD qui te donnera les messages d'avertissement.
    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. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse très rapide.
    Pour vérifier si je comprends bien avant de compléter mon MCD.
    Par exemple avec les adresses :
    Je crée une entité-type "type_adresse" (avec son id et son nom) reliée à la relation "possede_adr", ce qui donne une association ternaire. Mais est ce que je laisse "type adresse" dans la relation ou je le supprime ?

    Ensuite, je ne suis pas certain des cardinalités, car les warnings portent sur les cardinalités 1,1. S'il y a encore des warnings, je ferai une copie d'écran.

  4. #4
    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 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par ricounet_paris Voir le message
    Merci pour ta réponse très rapide.
    Pour vérifier si je comprends bien avant de compléter mon MCD.
    Par exemple avec les adresses :
    Je crée une entité-type "type_adresse" (avec son id et son nom) reliée à la relation "possede_adr", ce qui donne une association ternaire. Mais est ce que je laisse "type adresse" dans la relation ou je le supprime ?
    Tu supprimes ! Pas de clé étrangère dans un MCD.

    Ensuite, je ne suis pas certain des cardinalités, car les warnings portent sur les cardinalités 1,1. S'il y a encore des warnings, je ferai une copie d'écran.
    Tes cardinalités me semblent bonnes mais je crois avoir déjà été confronté à ce phénomène avec Open Modelsphere.
    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 !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Tu supprimes ! Pas de clé étrangère dans un MCD.
    Oui chef !!!

    Voilà mon mcd complété.
    J'ai quand même un doute sur les cardinalités des types. J'ai mis 1,n pour ne pas que ce soit restrictif car s'il y a plusieurs adresses (par exemple), il y aura plusieurs types. Mais comme une adresse ne peut pas avoir plusieurs types en même temps, j'hésite avec 1,1.

    En ce qui concerne les warnings, j'en ai encore un, dont voici le texte :
    "possede_civ : Le rôle navigable a une multiplicité maximale plus grande que l'autre rôle."

    Merci encore pour ton aide...
    Images attachées Images attachées  

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


    Citation Envoyé par ricounet_paris Voir le message
    En ce qui concerne les warnings, j'en ai encore un, dont voici le texte :
    "possede_civ : Le rôle navigable a une multiplicité maximale plus grande que l'autre rôle."
    Open ModelSphere a injecté dans le MCD un concept UML, celui de navigabilité. Pour vous débarrasser de cette scorie, côté CLIENT vous cochez la case Navigabilité :





    Et du côté CIVILITE vous décochez la case.


    Association-type Possede_email :

    Depuis que Merise existe, les pattes connectant les entités-types par le biais d’une association-type de dimension 3 ou plus sont porteuses de cardinalités maximales N. Le grand Yves Tabourier use d’un euphémisme pour évoquer le « Manque d’intérêt des cardinalités maximum à 1 pour les relations à plus de deux pattes » (cf. page 88 in De l’autre côté de MERISE. Les Éditions d’organisation, 1986).

    La règle est de casser la ternaire Possede_email en deux binaires :



    Association-type Possede_telephone : Même principe.


    Citation Envoyé par ricounet_paris Voir le message
    Sur mon MCD, je ne sais pas si je dois mettre le type en attribut d'une relation ou bien créer une entité type (type téléphone, type adresse...) en relation avec l'entité concernée.
    Les deux façons de procéder sont possibles. Il est néanmoins dans l’usage de définir une entité-type Type_Adresse.

    Citation Envoyé par ricounet_paris Voir le message
    J'ai quand même un doute sur les cardinalités des types. J'ai mis 1,n pour ne pas que ce soit restrictif car s'il y a plusieurs adresses (par exemple), il y aura plusieurs types. Mais comme une adresse ne peut pas avoir plusieurs types en même temps, j'hésite avec 1,1.
    Selon votre MCD, l’association-type PossedeAdr est une ternaire dont toutes les pattes sont porteuses d’une cardinalité maximale N. Lors du passage au MLD, cette association-type fera l’objet d’une table ayant la structure suivante :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PossedeAdr {IdClient, IdAdresse, IdTypeAdresse}
          PRIMARY KEY {IdClient, IdAdresse, IdTypeAdresse}
          FOREIGN KEY {IdClient} REFERENCES CLIENT {IdClient}
          Etc.

    Autrement dit, le client c1 pourra avoir une adresse a1 ayant les types t1, t2, ..., tn et l’adresse a1 pourra appartenir simultanément aux clients c1 et c2.
    Étant donné que vous tenez à ce qu’une adresse soit d’un seul type, la ternaire doit être cassée pour devenir une binaire associant CLIENT et ADRESSE, tandis qu’on définit une association-type ATypeAdr entre ADRESSE et TYPE_ADRESSE, comme dans le cas des courriels (emails).
    Mais pourquoi tenez-vous à ce qu’une adresse ne soit que d’un seul type ? Si deux clients peuvent cohabiter à la même adresse, ça peut être pour des motifs différents.

    Vous pourriez à nouveau suivre le conseil d’Yves Tabourier :
    « ...La fonction d’une propriété est de décrire les objets (et les rencontres), alors que l’identifiant ne décrit rien. Son rôle fondamental est d’être sûr de distinguer deux jumeaux parfaits, malgré des descriptions identiques. »
    =>



    Selon cette représentation, si deux clients habitent à la même adresse, dans la base de données on aura des adresses qui seront des jumelles parfaites, mais distinguées par leur identifiant.

    Dans cette vision des choses, ADRESSE peut être considérée comme une entité-type faible, c'est-à-dire comme une propriété (multivaluée) de CLIENT, ce qui conduit à identifier ADRESSE relativement à CLIENT (cardinalité 1,1 entre ADRESSE et Resider soulignée) :



    Au niveau logique :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Resider {IdClient, IdAdresse}
          PRIMARY KEY {IdClient, IdAdresse}
          FOREIGN KEY {IdClient} REFERENCES CLIENT {IdClient}
          FOREIGN KEY { IdAdresse} REFERENCES ADRESSE { IdAdresse}
    (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.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Merci fsmrel pour toutes ces infos. (Je n'ai plus de warnings !!!)
    Mais pourquoi tenez-vous à ce qu’une adresse ne soit que d’un seul type ? Si deux clients peuvent cohabiter à la même adresse, ça peut être pour des motifs différents.
    En effet, étant donné que j'essaie de faire quelque chose de souple, autant le faire très souple. Donc je conserve l'association-type ternaire pour les adresses.

    Dans cette vision des choses, ADRESSE peut être considérée comme une entité-type faible, c'est-à-dire comme une propriété (multivaluée) de CLIENT, ce qui conduit à identifier ADRESSE relativement à CLIENT (cardinalité 1,1 entre ADRESSE et Resider soulignée)
    Du coup, est-ce que email et téléphone ne sont pas des propriétés multivaluées de client également ?

    J'ai aussi changé une cardinalité (si on peut introduire ce genre de raisonnement à ce stade de la conception) :
    client -> adresse : 0,n parce qu'on peut ne pas renseigner l'adresse tout de suite.
    Images attachées Images attachées  

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


    Citation Envoyé par ricounet_paris Voir le message
    Est-ce que email et téléphone ne sont pas des propriétés multivaluées de client également ?
    Bien sûr.


    Citation Envoyé par ricounet_paris Voir le message
    une adresse ne peut pas avoir plusieurs types en même temps
    Citation Envoyé par ricounet_paris Voir le message
    Étant donné que j'essaie de faire quelque chose de souple, autant le faire très souple. Donc je conserve l'association-type ternaire pour les adresses.
    Il y a là une contradiction, donc une erreur logique majeure. La fin ne justifie pas les moyens.


    Citation Envoyé par ricounet_paris Voir le message
    J'ai aussi changé une cardinalité (si on peut introduire ce genre de raisonnement à ce stade de la conception) :
    client -> adresse : 0,n parce qu'on peut ne pas renseigner l'adresse tout de suite.
    Au stade du MCD, vous modélisez le QUOI, la finalité, auquel cas si un client a nécessairement au moins une adresse, vous conservez la cardinalité 1,N.
    Au stade du MLD, vous commencez à vous intéresser au COMMENT et les difficultés commencent. Le défi est de sous-traiter complètement le contrôle des opérations au SGBD.

    Dans le contexte de la théorie relationnelle (utilisant le langage D), conserver la cardinalité 1,N passe par la mise en œuvre d’une contrainte :

    Code D : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CONSTRAINT CLIENT_ADR_CHCK 
           (IS_NOT_EMPTY CLIENT JOIN ADRESSE) ;
    Lors de la création d’une entreprise, on crée simultanément (au moins) une adresse :

    Code D : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    INSERT CLIENT RELATION    
             {TUPLE {IdClient INT 1,
                     NomCLient CHAR 'Eric',
                     ...
             }} ,   /* virgule : séparateur d’opérations */
    INSERT ADRESSE RELATION  
             {TUPLE {IdClient INT 1, 
                     IdAdresse INT 1,
                     Rue CHAR '3 rue des développeurs',      
                     ...
             }} ;   /* point-virgule : fin de liste */ 

    En passant à SQL, dans le cadre de la norme on utilise une assertion (auquel cas les contrôles de cardinalité 1,N voivent être différés) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE ASSERTION CLIENT_ADR_CHCK CHECK 
        (NOT EXISTS 
            (SELECT  '' 
             FROM CLIENT AS x 
             WHERE NOT EXISTS 
                  (SELECT  '' 
                   FROM ADRESSE AS y 
                   WHERE x.IdClient = y.IdClient)))
          DEFERRABLE INITIALLY DEFERRED ;

    On effectue les INSERTS SQL classiques :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO CLIENT (IdClient, NomCLient, ...)
             VALUES (1, 'Eric', ...) ;
    INSERT INTO ADRESSE (IdClient, IdAdresse, Rue, ...)
             VALUES (1, 1, '3 rue des développeurs', ...) ;

    Et on demande le cas échéant au SGBD de déclencher les contrôles (si on le fait pas, ces contrôles auront lieu au moment du COMMIT) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SET CONSTRAINTS ALL IMMEDIATE ;

    Les choses sont plus compliquées avec nos SGBD (SQL) qui ne proposent pas l’instruction CREATE ASSERTION : il faut alors en passer par des vues et des triggers en réfléchissant aux instructions (notamment DELETE) qu’il faut surveiller. Voir à ce sujet la discussion ouverte par jmnicolas.
    (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.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    (Re)bonjour tout le monde.
    Les vacances étant passées par là, je me remets doucement à ce projet.
    J'ai corrigé les MCD. J'espère que maintenant tout est correct et que je vais pouvoir passer à la suite

    Est-ce que vous voyez des erreurs ou omissions ? Merci pour votre aide.
    Images attachées Images attachées  

Discussions similaires

  1. [PrestaShop] inscription du client . bouton radio
    Par hasclub dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 27/07/2014, 15h17
  2. [eZ Publish] Ajout formulaire inscription clients
    Par cyprien95 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 20/03/2011, 18h48
  3. Réponses: 9
    Dernier message: 16/04/2010, 20h56
  4. Client C pour CORBA
    Par rv dans le forum CORBA
    Réponses: 3
    Dernier message: 06/05/2002, 11h35
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57

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