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

Modélisation Discussion :

besoin d'aide pour valider mes relations entre les tables de ma bdd svp [AC-2010]


Sujet :

Modélisation

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Points : 28
    Points
    28
    Par défaut besoin d'aide pour valider mes relations entre les tables de ma bdd svp
    bonjour,
    Je crée présentement une base de données sous Access 2010. Il s'agit en fait de clients (T-Client), qui doivent renouveler leur inscription à chaque année (T-Adhesion) et choisir le nombre de versement à payer (T-Versement), selon un ou plusieurs modes de versements (T-ModePaiement).
    De plus, ils peuvent avoir des infractions (ce sont des chauffeurs…), donc T-Infraction, à laquelle un avocat lui est assigné (T-Avocat).
    J’ai fait mes formulaires à l’aide de requêtes avec des champs paramétrés afin que des calculs se fassent automatiquement (les taxes, les versements, etc.)
    Ce qui suit est un peu long, mais je veux vous mettre dans le contexte de mes tables et relations. J’ai mis mes remarques en bleu et mes interrogations en rouge. Merci beaucoup.
    Champs de la T-Client :
    • id_client (clé primaire, NumAuto)
    • date_inscription (Date/Heure, complet)
    • langue (provenant d’une liste de choix d’une Table-Langue)
    • titre (provenant d’une liste de choix d’une Table-Titre bilingue) N.B. j’ai imbriqué ces deux dernières listes dans mon formulaire Client en suivant à la lettre la merveilleuse procédure de la rubrique "Concevoir une liste qui en alimente une autre" de Ambrosino. J’ai par contre stocké par la suite les résultats dans ma Table-Client. C'est un résultat qui ne changera pas, ce sera soit toujours un Monsieur ou une Madame qui parle anglais ou français...
    • partenaires (numérique Entier long, en référence à une Table-Partenaire (genre fournisseur) liste déroulante à plusieurs valeurs)
    • autres champs courants:nom, prenom, numéro civique, adresse, etc.

    Champs de la T-Adhesion :
    • id_adhesion (clé primaire, NumAuto)
    • ref_client (numérique entier long en référence à id_client)relation un à plusieurs avec intégrité réf. et supprimer en cascade
    • date_adhesion (format Date/heure)
    • ref_cotisation (num. ent long, en référence à une table pour liste déroulante Liste-Cotisation (id_cotisation –/NumAuto ; annee_cotisation / Numérique : montant_cotisation/Monétaire ; taux_tps/Numérique et taux_tvq/Numérique) J’aimerais que ce ne soit pas nécessaire de sélectionner l’année de cotisation et que le montant s’inscrive selon l’année de la date d’adhésion (pour que celle qui saisit les données, n’affiche pas une fausse année et bousille les calculs. Déjà que lorsque je sélectionne l’année dans le formulaire, le calcul des taxes se fait automatiquement dans ma requête et s’affiche dans le formulaire en direct).
    • nb_versement (numérique entier) Il s’agit ici du nombre de versements que le client décide de choisir pour faire ses paiements, que j’utilise dans un calcul fait dans ma requête basée sur les tables Adhesion et Versement, pour connaitre les montants à verser, ça c’est ok. Cependant, il me faudra un endroit où je pourrais mettre le solde à payer
    • impression_carte (Oui/Non)
    • statut_client "genre en Retard, Payé complet, En cours, etc.

    Champs de la T-Versement :
    • id_versement (clé primaire, NumAuto)
    • ref_adhesion (numérique entier long en référence à id_adhesion) relation un à plusieurs, avec integrité réf. suppression en cascade.
    • ref_client je ne sais pas si c’est nécessaire?? En fait, j’aimerais savoir à ce stade si je dois indexer ces trois champs ou uniquement lier id_adhesion (1) à ref_adhesion (n), en omettant ref_client?
      Autres champs de cette table T-Versement :
    • ref_institution_financiere (choisir ou inscrire dans une liste T-InstitutionFinanciere
    • date_versement
    • ref_mode_paiement (en référence à la liste T-ModePaiement (id_mode_paiement (1 à 6) et mode_paiement (COMPTANT, CARTE DE DÉBIT, CHÈQUE, VISA, MASTERCARD, PRÉLÈVEMENT AUTOMATIQUE))
    • recu_emis (Oui/Non), pour tous les mode de paiement
    • Les champs qui suivent ne seront pas tous remplis, car se sont des détails pour chacun des modes de paiement. Pensez-vous que je dois inclure ces détails de paiement dans cette même table (T-Versement) ou faire une autre table genre T-DétailPaiement et si oui, comment?, surtout la question de la clé primaire et index, et relation avec la table.
    • pdi_recu_emis Émission du reçu de la transaction de paiement direct Interac (PDI)) Je ne sais pas encore comment gérer ce type de paiement, selon les critères des institutions financières
    • pa_transit_institution (numérique)
    • pa_no_compte_institution (numérique)
    • pa_jour_prelev1-15 (numérique) prélèvement automatique soit le 1 ou le 15 du mois, je devrai tenir compte des jours ouvrables et fériés. Je ne sais pas comment encore et j’aimerais bien savoir s’il existe un gabarit access tenant compte de la norme 005 de l'Assurance canadienne de paiement (ACP), si quelqu'un le sait, ce serait apprécié.
    • visa_numero
    • visa_date_exp
    • visa_no_confirmation
    • mc_numero
    • mc_date_exp
    • mc_no_confirmation
    • ch_numero

    Finalement, je fais mes formulaires de façon individuelle (à partir de requêtes) pour les données des tables T-Client, T-Adhesion et T-Versement. Par la suite, le formulaire Adhésion sera un sous formulaire du formulaire Client et le formulaire versement, un sous-formulaire du formulaire Adhésion. Donc, 3 niveaux de formulaires. Je vais aussi faire un formulaire Infraction qui deviendra un autre sous-formulaire de Client. Donc, le formulaire Client aura deux sous formulaires. Je trouve ça lourd visuellement et j'aimerais mieux cliquer sur des boutons de commande. Comment fait-on alors les liens père-fils? Aussi, est-ce que mes tables semblent logiques? Les tables servant de listes doivent-elles être liées avec les vraies tables dans la base de données ou peuvent l'être uniquement dans les requêtes?l
    J’espère avoir été claire, mais je le sais, pas très brève...
    Merci beaucoup de me valider et de me répondre.
    Paulux

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    bonjour,

    Les champs qui suivent ne seront pas tous remplis, car se sont des détails pour chacun des modes de paiement. Pensez-vous que je dois inclure ces détails de paiement dans cette même table (T-Versement) ou faire une autre table genre T-DétailPaiement et si oui, comment?
    ça dépend

    les champs vides amènent à des tables "gruyères" et peuvent plomber les performances s'il y en a beaucoup et si la table comprend beaucoup d'enregistrements (tu remarqueras que je reste vague sur le "beaucoup").

    Une autre possibilité est de faire des relations 1 à 1 en spécialisant les types de paiement:

    Versement-1-------1-VersementParCheque
    Versement-1-------1-VersementParCarteVisa
    Versement-1-------1-VersementComptant
    etc...
    Tu mets les champs communs à tous les versements dans la table générique Versement et selon le type de versement tu renseignes les champs de la table spécifique.

    C'est plus propre mais un peu plus compliqué au niveau des requêtes, des formulaires.


    Citation Envoyé par paulux67 Voir le message
    Champs de la T-Versement :
    • id_versement (clé primaire, NumAuto)
    • ref_adhesion (numérique entier long en référence à id_adhesion) relation un à plusieurs, avec integrité réf. suppression en cascade.
    • ref_client , je ne sais pas si c’est nécessaire??
    une adhésion fait déjà référence au ref_client. Donc ref_client dans la T_versement est redondant et peut être supprimé, non ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Points : 28
    Points
    28
    Par défaut merci f-leb
    bonjour
    merci beaucoup de votre réponse pour cette citation. Effectivement, il y aura beaucoup de données. Plusieurs milliers. Je ne sais pas si je saisis bien votre conseil, je vais donc vous décrire ce que j'en pense:
    je dois faire des tables individuelles pour chaque type de paiement, avec un champ ID NumAuto clé primaire qui seront associés avec le ID NumAuto clé primaire de la table mode de paiement, cette dernière étant lié 1 à n à la table versement au champ ref_mode_paiement, une liste déroulante? ouf. pas si certaine d'avoir saisie. Merci, merci.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    bonjour Paulux,


    Citation Envoyé par paulux67 Voir le message
    merci beaucoup de votre réponse pour cette citation. Effectivement, il y aura beaucoup de données. Plusieurs milliers...
    Quelques milliers de versements, ce n'est pas énorme


    Citation Envoyé par paulux67 Voir le message
    je dois faire des tables individuelles pour chaque type de paiement, avec un champ ID NumAuto clé primaire qui seront associés avec le ID NumAuto clé primaire de la table mode de paiement, ...
    Pas tout à fait...

    Versement-1-------1-VersementParCheque
    Versement-1-------1-VersementParCarteVisa
    Versement-1-------1-VersementComptant
    etc...
    Par exemple VersementParcheque(#idVersement, numerocheque, ...)
    ici idVersement est clé primaire de la table spécialisée VersementParCheque mais elle référence aussi la clé primaire de la table générique Versement. A ce titre elle est aussi une clé étrangère et ne doit pas être en numéroAuto.

    La relation Versement-1-------1-VersementParCheque est bien de type "un à un" selon les règles de gestion:
    - Un versement peut être un versement par chèque (il peut aussi être un versement par carte, ou un versement en liquide, etc)
    - Un versement par chèque est un versement (de même un versement par carte est un versement, un versement en liquide est un versement).

    Si tu veux plus de détails, je recommande le tutoriel Héritage dans une base de données Access.
    Dans le tutoriel, on parle d'intervenants qui sont soit des salariés, soit des indépendants mais le problème est identique à tes versements qui sont soit des versements par carte, soit des versements par chèque etc...

    Le modèle avec les relations -1-----1- est celui de la spécialisation sur le modèle du MCD.
    C'est le modèle le plus propre mais qui demande un peu d'expérience dans le codage des formulaires, les requêtes etc...

    Le modèle que tu proposes au départ avec tous les champs dans la même table est celui de la généralisation.
    C'est le modèle le plus dégueu, mais aussi la solution "de facilité". Toutefois si ta table ne dépasse pas les quelques milliers d'enregistrements, pas trop de champs vides, en fonctionnement mono-utilisateur, cela devrait rester tout à fait acceptable.

    J'espère avoir répondu à tes interrogations sur tes versements. Maintenant je n'ai pas encore regardé tes autres questions, je reviendrais plus tard...

    à+

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Points : 28
    Points
    28
    Par défaut
    Merci encore. Pour le conseil sur l'héritage, j'avais déjà regardé cet approche, mais je trouvais ça très complexe et je n'étais pas certaine que je pouvais l'appliquer à ça. J'y retourne donc. En tout cas, ça avance tout de même très bien mon affaire, mise à part ces coquilles. J'essaie autant que possible de rester dans la logique que les valeurs dans les tables sont les données brutes et que les requêtes servent à générer les calculs.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Points : 28
    Points
    28
    Par défaut aide pour les rqt roles modèle MCD
    Merci à M. f-leb d'avoir fourni un exemple de bdd (tchock) dans un précédent message. ça m'a facilité la tâche et l'ensemble de ma bdd. Il me reste à savoir comment je peux afficher dans un état les dates et les montants prévus des paiements des clients, en fonction du montant de la cotisation annuelle divisé par le nombre de paiements (1, 2, 4, 6, 12) par année, afin de faire un suivi. Merci

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Points : 28
    Points
    28
    Par défaut voici une image de mes relations
    Ce n'est plus nécessaire, mes tables ont changé, grâce aux conseils de f-leb. Merci

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    bonsoir Paulux,

    Citation Envoyé par paulux67 Voir le message
    Toutefois, j'aimerais aussi ajouter l'option de payer avec un autre mode de paiement, dans l'alternative qu'il perdrait sa carte de crédit par exemple et voudrait payer cash par la suite, ou d'un seul bloc. Comment je pourrais faire ça?
    Il n'y a rien à faire
    Si le mode de paiement choisi est VISA, l'interface proposera par défaut (dans une liste déroulante) ce type de paiement pour remplir TblVersementVISA mais rien n'empêche de choisir un autre type de paiement dans la liste pour un autre versement.

    Sinon il y a des exemples d'interfaces dans le tutoriel dont il faut s'inspirer (je l'ai d'ailleurs fait dans une autre discussion ici)

    Concernant tes requêtes (il y en a beaucoup), quelle est la question en fait ? Tu n'obtiens pas ce que tu veux? Il y a des erreurs de syntaxe ?

  9. #9
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    Citation Envoyé par paulux67 Voir le message
    date_adhesion (format Date/heure)
    ref_cotisation (num. ent long, en référence à une table pour liste déroulante Liste-Cotisation (id_cotisation –/NumAuto ; annee_cotisation / Numérique : montant_cotisation/Monétaire ; taux_tps/Numérique et taux_tvq/Numérique) J’aimerais que ce ne soit pas nécessaire de sélectionner l’année de cotisation et que le montant s’inscrive selon l’année de la date d’adhésion (pour que celle qui saisit les données, n’affiche pas une fausse année et bousille les calculs.
    Je propose de déconnecter tblCotisation et tblAdhesion. Tu supprimes la clé étrangère tblAdhesion.Ref_cotisation pour mettre le montant_cotisation à la place.
    Lors de la saisie de la date d'adhésion, on extrait l'année et on en déduit TblAdhésion.montant_cotisation en fouillant dans TblCotisation.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Points : 28
    Points
    28
    Par défaut en réponse à votre question
    rebonjour f-leb. Merci de me répondre. C'est gentil. C'est vraiment passionnant Access.

    Pour ce qui est du nombre de rqt basées sur le modèle MCD consulté dans le document portant sur l'héritage..., ce seraient les requetes pour les différents types de paiement. je voulais savoir comment faire les requete de roles. Mais, là, j'apprécie le lien pour consulter le fichier tchouk. Je pense que ça ressemble à mon cas et ça l'air plus simple! Avec ça, je n'aurai pas besoin du MCD? Est-ce que j'ai bien compris?

    Je passe la soirée là-dessus et si j'ai des questions, je peux vous réécrire?? Merci aussi pour l'autre conseil concernant la suppression de ma clé étrangère. Je regarde ça aussi de près.

    Un gros merci, c'est très apprécié. En passant, cette base données compte traiter entre 5 et 10 clients. Pour moi c'est gros. Je ne vieux rien manquer.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Je propose de déconnecter tblCotisation et tblAdhesion. Tu supprimes la clé étrangère tblAdhesion.Ref_cotisation pour mettre le montant_cotisation à la place.
    Lors de la saisie de la date d'adhésion, on extrait l'année et on en déduit TblAdhésion.montant_cotisation en fouillant dans TblCotisation.
    bonjour,
    comment faire alors pour saisir automatiquement le montant_cotisation en fonction de l'année de la date_adhesion? =année([date_adhesion]). J'ai essayé, et je n'arrive pas. Merci.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Points : 28
    Points
    28
    Par défaut

  13. #13
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    bonjour,

    Citation Envoyé par paulux67 Voir le message
    Je dois en déduire que ton problème est entièrement ?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Points : 28
    Points
    28
    Par défaut
    bonjour,
    on pourrait dire oui, c'est complété pour ces questions.
    Je pense que la question pour afficher automatiquement le montant de l'adhésion en fonction de l'année de l'adhésion dans mon formulaire, je vais le demander sur le forum du IHM.
    Toutefois, votre exemple de la base tchock m'ont beaucoup aidé! J'ai restructurer mes tables et relations, j'ai fait des tables avec relation 1 à 1 pour les différents mode de paiement associé au mode choisi d'une table principal, éviter de mettre des relations avec des tables genre liste qui doivent être libres, etc. comme vous me l'avez conseillé.
    Je suis très satisfaite de vos conseils.
    Un gros merci!
    Toutefois, si j'en ai d'autres, je pourrai encore vous écrire?

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

Discussions similaires

  1. Besoin d'aide pour positionner mes images svp
    Par shubakas dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 19/05/2008, 17h17
  2. [W3C] besoin d'aide pour validation W3C ?
    Par chris78 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 26/02/2007, 17h59
  3. Récupérer les relations entre les tables d'une bdd
    Par FRED.G dans le forum Accès aux données
    Réponses: 1
    Dernier message: 16/01/2007, 13h07
  4. Besoin d'aide pour valider ma version d'XP PRO
    Par vallica dans le forum Windows XP
    Réponses: 7
    Dernier message: 06/06/2006, 12h01
  5. [MySQL] aide pour MyAdmin-relation entre les tables
    Par bucarest dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/04/2006, 13h35

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