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

Merise Discussion :

N clés étrangères référençant le même id


Sujet :

Merise

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Points : 26
    Points
    26
    Par défaut N clés étrangères référençant le même id
    Bonjour,

    Je voudrais savoir s'il est possible d'associer une occurrence d'une table A plusieurs fois à une même occurrence d'une table B en utilisant plusieurs clés étrangères dans A qui pointent sur le même champ dans B.

    Exemple :
    Un client peut avoir 1 ou 3 adresses : 1 communication,1 facturation, 1 livraison. Sachant que ces adresses peuvent être identiques, j'ai voulu créer une table adresse à part et faire 3 clés étrangères dans ma table client qui pourront référencer la même occurrence de adresse si besoin. Mais je ne sais pas si cela est correct.



    client(id_client, nom, prenom, #id_adr_comm, #id_adr_fact, #id_adr_livr)
    adresse(id_adr, libelle, cp, ville, complement, #id_client)

    Désolée je n'ai pas eu le temps de faire un MCD propre avec un logiciel de modélisation J'espère que c'est compréhensible...

  2. #2
    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
    Bonsoir Leilou,


    Citation Envoyé par Leilou Voir le message
    Un client peut avoir 1 ou 3 adresses
    Mais dans votre diagramme, vos cardinalités sont 0,3 : il y a une contradiction. Est-ce bien 0,3 ou plutôt 1,3 ? Merci de préciser ce point.

    Votre représentation souffre de deux maux...
    — Vous avez introduit un cycle,
    — Le bonhomme Null pointe le bout de son nez, puisque la cardinalité 0,3 signifie qu’un client peut avoir 0, 1, 2 ou 3 adresses.

    Vous pouvez mettre en œuvre une 1ere variante, consistant à donc supprimer le cycle et interdire au bonhomme Null de se manifester :





    Notez les clés alternatives (mickey <ak>) pour les tables COMMUNICATION, FACTURATION et LIVRAISON.
    (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. #3
    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 Leilou et Fsmrel,

    Je me permets de m'immiscer, Fsmrel...

    Une autre variante qui permet de jouer sur le type d'adresse et d'éviter, ainsi, de créer une table par type d'adresse. En effet, à l'avenir, d'autres types pourraient être nécessaires.

    Images attachées Images attachées  
    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 !

  4. #4
    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
    Bonsoir Leilou et Richard,


    Il est certain que si l’on a besoin un jour de plus de 3 types d’adresses, le diagramme de Richard sera préférable. Ainsi, mon ami Mokrane parlait de l’heuristique papoue à propos des sous-types :

    Question : « Comment comptent les papous ? »

    Réponse : « 1, 2, 3, beaucoup ».

    Autrement dit, au-delà de trois sous-types, passer à une représentation à la Richard.

    Je me souviens d’un concepteur au bord de la déprime parce qu’il avait modélisé un surtype affublé d’une quinzaine de sous-types, son MCD ressemblait à une toile d’araignée... Quand je lui ai raconté le coup de l’heuristique, ça n’est pas tombé dans l’oreille d’un sourd, il a donc passé un bon coup de plumeau, et tout content il m’a emmené conclure cette affaire au bistro du coin avec un bon malt écossais (ou un bon coup de cidre, je ne sais plus... En tout cas, adieu déprime !)
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

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

  5. #5
    Membre régulier
    Femme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 73
    Points : 71
    Points
    71
    Par défaut
    Bonjour à tous,
    Si j’ai bien compris on veut modéliser l’information « cette adresse appartient à tel client et est de type type »

    1) Si je me base sur la philosophie papoue, je peux modifier le schéma de Richard en supprimant la table type adresse et en mettant à la place l’attribut (type adresse) dans la table client_adresse en plus j’ai entendu dire que si une table ne contenait qu’un seul attribut et n’avait qu’une relation on devait la supprimer (je ne sais pas si ça ce vérifie).
    Le nouvel attribut doit participer à la clé composée sinon on aurait vite un conflit de clé puisqu’une même adresse peut participer jusqu’à 3 fois à la relation affecter client (en modélisation je ne sais pas comment justifier ça, les papous auraient ils une idée)

    2) Ou sinon deuxième solution on supprime la relation appartient et on met à la place 3 relations :
    AdrFac (client 0,1-----1,1 adresse)
    AdrLiv (client 0,1-----1,1 adresse)
    AdrCom (client 0,1-----1,1 adresse)
    On aura 3 références à la même table (ce n’est pas faux) mais pas de cycle.

    3) J’aurais aussi une question, si je décidais de garder le schéma de Leilou et de n’avoir que 2 tables client et adresse et si je gardais la relation appartient et je rajoutais un attribut (type) dans cette relation, quelles seraient les cardinalités ? 1,3---1,3 ou bien 1,3---1,1 car une même adresse peut participer jusqu’à 3 fois à la relation appartient mais ça sera toujours avec le même client. Que dit Merise à ce sujet ? et pour le problème de conflit de clé on mettra l’attribut type plus l’id client plus l’id adresse.

  6. #6
    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 Ninouchou,

    Point 1) :
    Citation Envoyé par Ninouchou
    ... en mettant à la place l’attribut (type adresse) dans la table client_adresse...
    ==> et, à l'avenir, si un autre type d'adresse est nécessaire, il faudra modifier le code ou les attributs pour n'accepter, en saisie que les types d'adresse permis. La table Type Adresse permet de s'affranchir de se contrôle.
    Citation Envoyé par Ninouchou
    ... j’ai entendu dire que si une table ne contenait qu’un seul attribut et n’avait qu’une relation on devait la supprimer (je ne sais pas si ça ce vérifie)...
    ==> ne devrions-nous pas nous méfier de ce nous entendons dire ?... Dans une application, il y a beaucoup de tables qui contiennent, uniquement, une clé primaire et un seul attribut (devises, unités de volume, etc...). Cette table Type Adresse contiendra, au minimum, le libellé du type d'adresse concerné, et ce n'est déjà pas si mal... sinon, où placerais-tu le libellé "adresse commerciale", "adresse de facturation", etc... ?

    Point 2) :
    Citation Envoyé par Ninouchou
    AdrFac (client 0,1-----1,1 adresse)
    AdrLiv (client 0,1-----1,1 adresse)
    AdrCom (client 0,1-----1,1 adresse)
    ==> à l'avenir, si un autre type d'adresse est nécessaire, alors il faudra créer une autre table.

    Point 3) :
    Citation Envoyé par Ninouchou
    ... je rajoutais un attribut (type) dans cette relation...
    ==> même combat : à l'avenir, si un autre type d'adresse est nécessaire, il faudra modifier le code ou les attributs pour n'accepter, en saisie que les types d'adresse permis.
    Citation Envoyé par Ninouchou
    ... quelles seraient les cardinalités ? 1,3---1,3 ou bien 1,3---1,1...
    ==> 1,3---1,3 : s'apparente à 1,n---1,n, donc, une table associative est nécessaire.
    Citation Envoyé par Ninouchou
    ... et pour le problème de conflit de clé on mettra l’attribut type plus l’id client plus l’id adresse.
    ==> tant de contournements sont-ils nécessaires ?...
    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 !

  7. #7
    Membre régulier
    Femme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 73
    Points : 71
    Points
    71
    Par défaut
    Bonjour Richard_35,

    1) Je dois avouer que c'est convaincant pour le cas du type d’adresse mais pour le cas de la date, prenons un exemple : on a une entité Employe et une entité Projet et on veut modéliser les informations suivantes : la date d’affectation d’un projet à un employé et la date de fin de projet. Si je veux mettre ça dans une relation quadraire EstChargé avec deux arcs qui sortent de l'entité Date. Je ne suis pas obligée de créer les dates à l’avance comme des types d’adresses et en plus j’aurai les informations répétées dans l’entité Date et la relation EstChargé et si je mets la date comme clé dans l’entité Date, cette entité ne me sert plus à rien.

    2) Une question dans le même thème : doit-on supprimer une sous-classe dans un diagramme de classe si elle n’a pas d’attribut ou de relation supplémentaire ? Je suis d’avis qu’on la garde car je voie une spécialisation comme une relation avec une autre classe qui s’appellerait type, on pourrait dire qu’une spécialisation porte déjà une information (une sémantique) et si on supprime une sous-classe on doit sauvegarder l’information de type quelquepart, dans une relation, un attribut,….

  8. #8
    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 Ninouchou,

    Point 1) :
    Citation Envoyé par Ninouchou
    ... mais pour le cas de la date, prenons un exemple : on a une entité Employe et une entité Projet et on veut modéliser les informations suivantes : la date d’affectation d’un projet à un employé et la date de fin de projet. Si je veux mettre ça dans une relation quadraire EstChargé avec deux arcs qui sortent de l'entité Date. Je ne suis pas obligée de créer les dates à l’avance comme des types d’adresses et en plus j’aurai les informations répétées dans l’entité Date et la relation EstChargé et si je mets la date comme clé dans l’entité Date, cette entité ne me sert plus à rien.
    ==> c'est, effectivement, un autre sujet.
    Il y a deux écoles : ceux qui pensent qu'il faut créer une entité "Date" et les autres. Personnellement, je fais partie de la seconde catégorie. Donc :



    Point 2) :
    Citation Envoyé par Ninouchou
    2) Une question dans le même thème : doit-on supprimer une sous-classe dans un diagramme de classe si elle n’a pas d’attribut ou de relation supplémentaire ? Je suis d’avis qu’on la garde car je voie une spécialisation comme une relation avec une autre classe qui s’appellerait type, on pourrait dire qu’une spécialisation porte déjà une information (une sémantique) et si on supprime une sous-classe on doit sauvegarder l’information de type quelque part, dans une relation, un attribut,….
    ==> n'étant pas "merisien de naissance", je ne comprends pas cette sémantique et ne peux donc pas répondre à ta question. D'autres s'en chargeront sûrement.
    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 !

  9. #9
    Membre régulier
    Femme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 73
    Points : 71
    Points
    71
    Par défaut
    Merci Richard et une dernière chose,

    Si nous avions à la place d’Employe : Chauffeur et à la place de Projet : Voiture et si nous avions à modéliser la relation : ce chauffeur a conduit cette voiture à cette date.

    Si je choisis cette solution :
    Il y a deux écoles : ceux qui pensent qu'il faut créer une entité "Date" et les autres. Personnellement, je fais partie de la seconde catégorie.
    La clé de la relation Conduit étant la concaténation entre la clé de l’entité Chauffeur et celle de l’entité Voiture. Et comme je peux avoir plusieurs fois la même combinaison (chauffeur, voiture), j’aurais des problèmes de conflits de clés. Je peux ajouter la date dans la clé composée mais dans le schéma entité-association comment je modélise cela ?

  10. #10
    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 Ninouchou,

    Citation Envoyé par Ninouchou
    Si nous avions à la place d’Employe : Chauffeur et à la place de Projet : Voiture et si nous avions à modéliser la relation : ce chauffeur a conduit cette voiture à cette date.
    ==> le travail sur les dates donne toujours lieu à des débats épineux... a fortiori, le travail sur les périodes...

    D'autre part, tout ne peut pas être forcément résolu en base de données : il y a, souvent, un travail de contrôle à coder, si possible dans un trigger.

    Suggestion :





    Etude des cas possibles :




    Nous remarquons que, seuls les cas 1, 5, 8 et 9 sont acceptables en saisie de période : l'idéal serait de créer un trigger qui effectuerait ce contrôle.

    Je te laisse la main...
    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 !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 301
    Points
    301
    Par défaut
    Bonjour,

    ninouchou :
    La clé de la relation Conduit étant la concaténation entre la clé de l’entité Chauffeur et celle de l’entité Voiture. Et comme je peux avoir plusieurs fois la même combinaison (chauffeur, voiture), j’aurais des problèmes de conflits de clés. Je peux ajouter la date dans la clé composée mais dans le schéma entité-association comment je modélise cela ?
    La seule solution acceptable pour modéliser cela est de créer une entité-type Date dans le MCD. Cette entité-type ne deviendra pas une table dans le MLD, et l'association-type dans le MCD possèdera un identifiant correct.
    Notez que Date n'est pas une vraie entité-type pour ce cas très courant, mais juste un type (de date). En effet, sémantiquement, une date n'est pas une entité. Il s'agit donc d'une astuce utilisée avec Merise pour pallier une lacune de Merise. Ce n'est pas l'idéal, mais on a pas mieux en magasin. On se retrouve quand même avec une MCD aisément compréhensible et avec une MLD juste, ce qui est l'esentiel.

  12. #12
    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
    C'est un plaisir de vous revoir MacFly !

    Coïncidence, je viens de traiter de cette fichue entité-type DATE

    Voyez ici.
    (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. 2 clés étrangères sur la même table et même attribut
    Par jinar dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/04/2009, 22h55
  2. 2 clés étrangères sur le même champs
    Par titouille dans le forum MySQL
    Réponses: 1
    Dernier message: 29/10/2008, 12h51
  3. Réponses: 9
    Dernier message: 28/01/2008, 22h02
  4. MCD->MPD : deux clés étrangères pour le même champ
    Par Eric2000 dans le forum Schéma
    Réponses: 3
    Dernier message: 04/09/2007, 00h44
  5. Réponses: 2
    Dernier message: 31/05/2006, 17h52

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