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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2016
    Messages : 23
    Points : 18
    Points
    18

    Par défaut Gérer plusieurs adresses par client

    Bonjour,

    J'ai un problème assez basique je pense :

    Dans une base de données gérant des factures et des clients, gérer un ensemble d'adresses possibles pour un même client. Afin de pouvoir choisir pour chaque facture quelle adresse utiliser.

    L'idée qui me vient naturellement est donc d'avoir une table pour les adresses des clients, avec chaque adresse liée au client.

    Nom : Capture.PNG
Affichages : 95
Taille : 18,5 Ko

    Ici chaque facture doit donc être liée au bon enregistrement de la table d'adresse pour savoir laquelle utiliser.

    Ce qui me pose problème c'est qu'ici rien n'empêche d'utiliser une adresse du client A dans une facture liée au client B.
    La seule chose que je peux faire, c'est dans mon formulaire de saisie des factures, filtrer la zone de liste où on choisit l'adresse afin de n'afficher que les adresses correspondant au client sélectionné.

    Mais c'est une protection "artificielle" qui n'empêche pas réellement que cela arrive.

    Je me demande donc si c'est la (ou une) bonne façon de faire ?

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    9 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 569
    Points : 25 621
    Points
    25 621

    Par défaut

    Citation Envoyé par Asahenn Voir le message
    L'idée qui me vient naturellement est donc d'avoir une table pour les adresses des clients, avec chaque adresse liée au client.
    C'est à mon sens, une bonne idée.

    Citation Envoyé par Asahenn Voir le message
    Ce qui me pose problème c'est qu'ici rien n'empêche d'utiliser une adresse du client A dans une facture liée au client B.
    La seule chose que je peux faire, c'est dans mon formulaire de saisie des factures, filtrer la zone de liste où on choisit l'adresse afin de n'afficher que les adresses correspondant au client sélectionné.

    Mais c'est une protection "artificielle" qui n'empêche pas réellement que cela arrive.
    C'est effectivement possible.
    Mais il faut, pour cela, un accès à cette table par un autre biais, moins protégé que ton formulaire. Si cet accès existe, ne serait-ce que par un accès direct à la base si Access est sur le poste, tu peux rencontrer ce cas.

    La protection par ton formulaire est, évidemment, absolument nécessaire, mais effectivement pas suffisante.

    Il existe 2 solutions, mais je ne sais pas si cela est possible, au moins pour la seconde, avec Access.

    La moins bonne à mon sens, c'est de ne pas faire le lien entre ta facture et la table client, mais faire uniquement le lien vers la table adresse, mais en utilisant une clé composée du n° client et du n° adresse. Comme ça, le couple doit obligatoirement correspondre.
    Cette solution n'est pas bonne à mon sens, car ta facture est liée indirectement à ton client à travers son adresse. Or une facture est liée à un client avant d'être liée à son adresse, donc pour moi il faut un lien directe entre la table facture et la table client, comme tu as fait.

    La seconde solution, à supposer que ce soit possible avec Access, est comme tu as fait, mais en rajoutant une contrainte sur la table facture. Contrainte qui dirait que le couple n°client/n°adresse de la facture, doit correspondre à un couple n°client/n°adresse valide de la table adresse. Cette contrainte vient en plus des clés étrangères déjà en place. Ainsi, tu ne pourrais pas enregistrer, dans la table facture, un n°adresse qui n'est pas associé, dans la table adresse, au même n°client que celui de ta facture.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2016
    Messages : 23
    Points : 18
    Points
    18

    Par défaut

    Merci pour ta réponse !

    Effectivement ajouter une "constraint" semble possible sur access. Cela se fait au moyen de la propriété "valide si" du champ en mode création.

    Cependant les possibilités ont l'air limités, je ne sais pas si c'est possible d'aller chercher une valeur dans une autre table (le client correspondant à l'adresse) pour faire la validation.

  4. #4
    Membre émérite Avatar de hyperion13
    Homme Profil pro
    Calot120 - Enseignant Post Bac
    Inscrit en
    octobre 2007
    Messages
    1 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Calot120 - Enseignant Post Bac
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2007
    Messages : 1 474
    Points : 2 257
    Points
    2 257

    Par défaut

    Salut
    Si pour une facture il n'y a qu'un et un seul idclient et si pour cette même facture il n'y a qu'un et un seul idadresse, votre approche et modélisation est correcte.
    Je ne comprends pas trop : "Mais c'est une protection "artificielle" qui n'empêche pas réellement que cela arrive."
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    GMT+4 - 21°19'18" S - 055°25'32" E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse est pertinente. N'oubliez pas svp de clôturer le sujet en cliquant sur

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    9 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 569
    Points : 25 621
    Points
    25 621

    Par défaut

    Citation Envoyé par hyperion13 Voir le message
    Je ne comprends pas trop : "Mais c'est une protection "artificielle" qui n'empêche pas réellement que cela arrive."
    Parce que c'est une protection qui est faite en aval, par le consommateur de la donnée lui-même, à savoir le code du formulaire de saisie.
    La donnée en elle-même n'est pas protégée.
    Il suffit d'un autre consommateur, un autre formulaire par exemple, qui ne se donne pas cette peine, et tu peux obtenir des données corrompues dans la base

    Une protection en amont, sur la table elle-même, par une contrainte par exemple, protège réellement la donnée quelques soient les consommateurs et les protections qu'ils embarquent eux-mêmes ou pas.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 732
    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 : 6 732
    Points : 24 450
    Points
    24 450
    Billets dans le blog
    16

    Par défaut

    Bonsoir,

    Pour garantir qu’une adresse portée par une facture est bien toujours une adresse du client facturé, la modélisation peut suffire à condition de propager l’identifiant du client jusqu’à la table FACTURE par les deux chemins. Ceci demande que ADRESSE soit identifiée relativement à CLIENT :

    Nom : Asahenn_conterminous_mld.png
Affichages : 69
Taille : 6,4 Ko


    La clé primaire de la table adresse est la paire {clientId, adresseId}.

    A noter que pour ma part, j’exclus des clé primaires les propriétés naturelles telles que numéro de client, numéro de facture, celles-ci font l’objet de clés alternatives (unicité garantie).
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2016
    Messages : 23
    Points : 18
    Points
    18

    Par défaut

    Merci pour ta réponse fsmrel !
    J'aime beaucoup ton idée, c'est une façon très intéressante d'utiliser les clés primaires composites que je n'ai vu mentionné dans aucun livre/tuto !

    Je comprends comment ça fonctionne et en quoi cela force la facture a avoir une adresse qui correspond au client.

    Cependant j'ai vraiment du mal à implémenter cela en Access. J'ai défini la clé primaire des adresses en fonction du champ ID et du champ Client.

    Maintenant j'ai du mal à savoir comment je peux définir la table facture pour qu'elle soit liée à une adresse avec les deux clés primaires (sachant qu'une clé correspond à son champ client).

    Si quelqu'un peut m'éclairer je lui en serait reconnaissant !

    Mais merci pour l'idée si cela fonctionne je trouve ça très propre et pratique !

  8. #8
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 732
    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 : 6 732
    Points : 24 450
    Points
    24 450
    Billets dans le blog
    16

    Par défaut

    Bonsoir Asahenn,


    Citation Envoyé par Asahenn Voir le message
    j'ai du mal à savoir comment je peux définir la table facture pour qu'elle soit liée à une adresse avec les deux clés primaires (sachant qu'une clé correspond à son champ client).
    Il faut dire à ACCESS que la clé primaire de la table ADRESSE est la paire d’attributs {clientId, adresseId}. J’ai montré ici à Gaël comment procéder.

    Avec ACCESS (sans doute 2016) j’ai créé les tables et établi les liens. Ci-dessous on voit le lien entre ADRESSE et FACTURE, avec la paire d’attributs {clientId, adresseId} :


    Nom : Asahenn_conterminous_access_mld_partiel.png
Affichages : 52
Taille : 26,7 Ko



    Pour établir ce lien, sélectionner les deux attributs clientId et adresseId dans la table ADRESSE, faire un drag/drop vers FACTURE ; dans la partie FACTURE (Table/Requête liée), aller pêcher les colonnes clientId et adresseId.
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    septembre 2006
    Messages
    6 732
    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 : 6 732
    Points : 24 450
    Points
    24 450
    Billets dans le blog
    16

    Par défaut

    Bonsoir Asahenn,


    Un addendum :

    J’ai déjà évoqué ici en le décomposant le procédé de création des multi-attributs clés étrangères.


    Si cela peut vous aider...
    Faites simple, mais pas plus simple ! (A. Einstein)
    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 »)

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

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2016
    Messages : 23
    Points : 18
    Points
    18

    Par défaut

    Merci beaucoup pour ton aide détaillée ! Je n'ai pas l'habitude de passer par la fenêtre des relations c'est pour ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OL-2013] Forcer utilisation adresse par défaut avec plusieurs boîtes mail
    Par Sami_Xite dans le forum Outlook
    Réponses: 0
    Dernier message: 05/05/2016, 15h23
  2. [2008] Gérer les accès par client
    Par pierick dans le forum SSAS
    Réponses: 4
    Dernier message: 05/07/2011, 14h21
  3. Réponses: 2
    Dernier message: 23/03/2010, 14h00
  4. Gérer les langues par l'adresse
    Par pierrot92130 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 25/03/2009, 22h09

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