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 :

un grand coup de bool ?


Sujet :

Schéma

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 59
    Points : 50
    Points
    50
    Par défaut un grand coup de bool ?
    Bonjour à tous,

    j'ai un petit soucis sur un MCD que je n'arrive pas à régler et je vais m'efforcer de vous expliquer le plus clairement possible.

    Comme une image vaut mieux qu'un long discours...


    Donc un 'usager' (une personne physique) peut avoir 1 ou plusieurs 'contact' (cad une fiche regroupant ses différents numéros de téléphone, adresse mail, etc...) et peut travailler dans 1 ou plusieurs 'societe'. (les cardinalités sur l'image ne sont pas bonnes)

    Une 'societe' peut avoir 1 ou plusieurs 'usager', et 0 ou 1 'contact' (fiche avec les numéros du standard).(les cardinalités sur l'image ne sont pas bonnes)

    Jusque là tout va bien, mais du coup 'contact' peut avoir 0 ou 1 'usager' (zéro si c'est le 'contact' d'une 'societe'), et 0 ou 1 'usager' (dans le cas inverse). Or avec cette cardinalité je peux me retrouver avec un 'contact' qui soit en 0 pour les 'usager' et 0 pour les 'societe' du coup je me retrouve avec un 'contact' qui n'est lié à rien du tout.

    Comment faire pour que mon entité 'contact' soit lié soit à l'un soit à l'autre? Une sorte de type boolean ou quelque chose s'en approchant?

    Merci pour votre attention.

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour BLJ.CHAUVIN,

    Tout d'abord, sur la forme :
    Citation Envoyé par BLJ.CHAUVIN
    Comme une image vaut mieux qu'un long discours...
    puis
    Citation Envoyé par BLJ.CHAUVIN
    .../... et peut travailler dans 1 ou plusieurs 'societe'. (les cardinalités sur l'image ne sont pas bonnes)
    et encore
    Citation Envoyé par BLJ.CHAUVIN
    .../... et 0 ou 1 'contact' (fiche avec les numéros du standard).(les cardinalités sur l'image ne sont pas bonnes)
    ==> l'image en question porte plus à confusion qu'autre chose, non ?


    Sur le fond :
    Je trouve que le terme "Contact" est trompeur : en fait, il s'agit, si j'ai bien compris, des informations de contact pour un usager ou une société. Donc, toujours si j'ai bien compris :
    Citation Envoyé par BLJ.CHAUVIN
    Donc un 'usager' (une personne physique) peut avoir 1 ou plusieurs 'contact'
    ==> Usager ---1,n---[possède les info. contact]---0,1--- Contact (0 car un enregistrement de Contact peut être lié à une Société et non à un Usager)
    Citation Envoyé par BLJ.CHAUVIN
    .../... et peut travailler dans 1 ou plusieurs 'societe'
    Citation Envoyé par BLJ.CHAUVIN
    Une 'societe' peut avoir 1 ou plusieurs 'usager'
    ==> Usager ---1,n---[travaille]---1,n--- Société
    Citation Envoyé par BLJ.CHAUVIN
    .../... et 0 ou 1 'contact'
    ==> Société ---0,1---[possède les info. contact]---0,1--- Contact (0 car un enregistrement de Contact peut être lié à un Usager et non à une Société)
    Citation Envoyé par BLJ.CHAUVIN
    .../... du coup je me retrouve avec un 'contact' qui n'est lié à rien du tout.
    ==> dans l'absolu, oui !... puisque c'est ce que tu énonces dans tes règles de gestion.

    Ensuite, tout n'est pas résoluble dans le MCD. Dans l'application, si la saisie des informations de contact n'est possible QUE via un usager ou une société, le booléen en question devient dynamique.

    Mais, c'est vrai que la représentation graphique de ce cas m'est inconnue. Donc, en final, je ne répond pas à ta question... mais bon...
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

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


    Citation Envoyé par BLJ.CHAUVIN Voir le message
    Comment faire pour que mon entité 'contact' soit lié soit à l'un soit à l'autre? Une sorte de type boolean ou quelque chose s'en approchant?
    Non. Il est préférable de procéder à la généralisation des entités-types SOCIETE et USAGER et mettre en ainsi en œuvre une entité-type PERSONNE dont SOCIETE et USAGER deviendront des sous-types. CONTACT est alors à associer à PERSONNE (relation de composition => identification relative, cardinalités 1,1 entre parenthèses) :

    [PERSONNE]--0,N---(POSSEDER)---(1,1)--[CONTACT]
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Tout d'abord merci pour vos réponses, j'ai essayé d'en tenir compte et de corriger mes erreurs mais je ne suis pas sûr d'avoir bien compris vos conseils.

    Voici un schéma (cette fois à jour) de mon mcd:


    J'ai gardé le schéma proposé par fsmrel à savoir :
    [ENTITE]--0,N---(a_pour_contact)---(1,1)--[CONTACT]
    Je crois que cette partie est bonne, merci à vous.

    Par contre avec 'heritage_entite' je trouve la répartition des clé primaires un peu étrange. Si je lis bien le schéma [ENTITE], [ENTREPRISE], [USAGER] et (employe_chez) ont tous en commun la primary key 'identite'.

    Est-ce normal ou bien ai-je encore une erreur dans mon MCD?

  5. #5
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour BLJ.CHAUVIN et Fsmrel,

    ... sauf que
    Citation Envoyé par BLJ.CHAUVIN
    Donc un 'usager' (une personne physique) peut avoir 1 ou plusieurs 'contact'
    et
    Citation Envoyé par BLJ.CHAUVIN
    Une 'societe' peut avoir .../... 0 ou 1 'contact'
    ==> en passant par une entité commune, tu ne peux pas avoir deux cardinalités différentes : il te faudra donc choisir.

    En fait, ton problème est d'éviter les enregistrements de "contact" sans "usager" ni "société".

    Si tu restes dans tes règles de gestion initiales :
    Société
    - Id_Societe (PK)
    ...

    Usager
    - Id_Usager (PK)
    ...

    Contact
    - Id_Contact (PK)
    - Id_Source
    - Type_source (S=Société, U=Usager)
    ...

    Relations respectant tes règles de gestion initiales
    Usager ---1,n---[possède les info. contact]---0,1 ;
    Société ---0,1---[possède les info. contact]---0,1--- Contact.

    Il me semble donc que le seul moyen respectant tes règles de gestion initiales est :
    - de ne saisir un contact QUE via un Usager ou une Société avec forçage des informations de "contact" ("S" et Id_Société ou "U" et Id_Usager) ==> sous Access, on parlerait de sous-formulaire ;
    - un trigger (avant création) qui contrôlerait qu'il n'existe pas plus de 1 contact pour la société concernée (que pour les sociétés, et non pour les usagers).
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  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 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par BLJ.CHAUVIN Voir le message

    J'ai gardé le schéma proposé par fsmrel à savoir :
    [ENTITE]--0,N---(a_pour_contact)---(1,1)--[CONTACT]
    Presque. Vous noterez que j’ai identifié CONTACT relativement à ENTITE (1,1 mis entre parenthèses) car CONTACT est une entité-type faible, c'est-à-dire une propriété multivaluée d’ENTITE.

    Citation Envoyé par BLJ.CHAUVIN Voir le message

    Par contre avec 'heritage_entite' je trouve la répartition des clé primaires un peu étrange. Si je lis bien le schéma [ENTITE], [ENTREPRISE], [USAGER] et (employe_chez) ont tous en commun la primary key 'identite'.
    Est-ce normal ou bien ai-je encore une erreur dans mon MCD?
    C’est on ne peut plus normal et il n’y a rien d’étrange. La clé primaire {IdEntite} d’ENTITE est héritée par les sous-types ENTREPRISE et USAGER et {IdEntite} y est aussi clé étrangère.

    Votre « MPD » (en fait MLD) devrait ressembler à ceci :




    Une question : quel SGBD sera utilisé ?
    (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.

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/11/2012, 12h14
  2. Réponses: 2
    Dernier message: 26/08/2011, 20h40
  3. Impression tableau trop grand, cellules coupées en bas de page
    Par scubb dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 18/05/2011, 09h22
  4. cadre qui se coupe si plus grand que la page IE
    Par Amandine62 dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 30/06/2008, 15h11
  5. Besoin d'un grand coup de main - connexion à ms sql
    Par robertolami dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2007, 18h33

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